id:nishiohirokazuさん作のScrapboxの情報をChat GPTに流し込んで対話するスクリプトがおもしろそうだったので動かして遊んでみていた。
自分のScrapboxをChatGPTにつないだ - 西尾泰和のScrapbox
自分のScrapboxからおすすめサウナを案内してもらえた。おもしろい。自分のはてなブログとも対話したい。 https://t.co/7L51YPVURe pic.twitter.com/ijVXEFDXGl
— 趣味はマリンスポーツです (@hitode909) 2023年3月10日
自分はScrapboxよりはてなブログのほうをよく書いてるので、当然はてなブログと対話してみたい。
はてなブログのMT形式のエクスポート結果をScrapboxのエクスポート結果のJSONっぽく乱暴に書き換えるスクリプトを用意して、はてなブログのデータを使ってチャットできるようにした。
.pyが置かれているリポジトリをforkして突然.rbを追加している。
github.com
解析中でも対話できて、時系列順に処理しているので最近のエントリn%分、みたいな形で対話できておもしろかった。
とりあえずこのチャットに投げてもらえたら、過去の日記の内容をふまえて、それっぽい返答ができる、というような返答ができておもしろい。
embedding(5000記事あって3時間かかる)の途中28%(直近3年分)くらいだけど自分のはてなブログと対話できた。プロンプトに渡せるのは4000文字くらいでその場で送った文章をもとに答えてくれるという仕組みなようだった。客観的に見るとすごいネガティブな内容の日記とわかる。 pic.twitter.com/wvDvy6nAJx
— 趣味はマリンスポーツです (@hitode909) 2023年3月10日
— 趣味はマリンスポーツです (@hitode909) 2023年3月10日
過去10年分のブログ記事を使って、と言うと、なんか大規模なネットワークを構築して、すごい理解不能なことが起きているるような気がするけど、やってることはもうちょっと簡素で、事前にembeddingという処理をして、どのキーワードがどの文章に含まれるかのベクトル化をして、質問を投げるときには、質問文に近い文章を探して、一緒にプロンプトで何千文字かを送る、という形で実現されているようだった。なので、4000文字くらいの話題をかき集められれば、1年分でも10年分でも賢さは変わらない。ここは分量の多さよりは、一貫したスタンスの入力を与えられるか、みたいな方が重要そうな気がする。
PROMPT = """ Read the following text and answer the question. Your reply should be shorter than 250 characters. ## Text {text} ## Question {input} """.strip()https://github.com/nishio/scrapbox_chatgpt_connector/blob/main/ask.py#L25-L33
ということをふまえて、この以前流し読みしていた記事を読んだら、ああこういうことをやってるのね、というのがようやく理解できた。いや、本当は理解できてなくて、APIを呼び出してるのかがちょっとわかっただけ。
acro-engineer.hatenablog.com
賢いチャットもすっかりキャズムを超えていて、見知ったテキストを使ってチャットできるのは当然のこと、になってきたと思う。なんか感動的だけど、OK Googleしたり、Hey Siriしたりで使えていたので、このキャズム超え感はなんなのか?精度が高いし、APIもすぐ提供されていて、呼び出しがめっちゃ簡単、というのが良かったのだろうか。
手元で遊ぶ分にはいいけど、これを使ってサービス提供しようと思うとプロンプトインジェクション対策がたいへんそう。
こういう破壊活動ができるのもAIならではの愛嬌、ということになるのか、もうちょっとテクノロジーが進歩したら、こういう問題はこうやって防ぐのが定番、というのが出てきて解決するのか、気になる。
いま思うこととしては、プログラムへの指示が全部自然文で、対象のデータだけでなくて、こういうルールで動いてください、というところもプロンプト経由でやってるのが、これまであまり見たことない世界でおもしろいと思う。
qiita.com