2023/2/21 Scrapboxの内容を元にしたチャットbotを実装する
2023/2/21
実装が見えてモチベが沸いているので、この勢いで実装したいblu3mo.icon
実況していく(?)
既存の議論
何を作るか
ユーザーがPromptを投げると、特定のScrapboxプロジェクトの内容を読み込んで、その内容を元に文章を生成する
Promptが質問であれば、回答を生成する
Promptが「要約してくれ」であれば、要約を生成する
Promptが「XXを書いてくれ」であれば、文章の内容を元にそれを生成する
Promptが「XXの話をしているページなんだっけ」であれば、そのページを見つけてくる
Reactのフロントエンドだけで動きそう
なるほどnishio.icon
Mem, Operandなど英語ツールとかで出来ていることを、Scrapbox/日本語でやりたいblu3mo.icon 実装方法
GPT-3に渡す適切なScrapboxの内容をどう選ぶかがむずい
https://assets.st-note.com/img/1676524237894-7VDUzEGA8S.png?width=2000&height=2000&fit=bounds&quality=85
文書をベクトル化したものを使っている
これをforkするかなblu3mo.icon
現状、Markdownとかの構造を読んでいい感じに分割するようになっている
これを、Scrapboxでもできるようにしたいblu3mo.icon
Embeddingにも、OpenAIのAPIを使っているみたいblu3mo.icon
価格: $0.0004 / 1K tokens
2000 token/pageだと見積もったら、一万ページのembeddingに大体1000円かかる
まあそんなオーダーか、耐えそう
試しにsite:scrapbox.io/blu3mo-public 質問で検索すると良さそうな結果が出る
ので、悪く無いかも
というかBing AIで大体いける説はある
site:scrapbox.io/blu3mo-public の内容のみを参照して答えてください。と伝えた上で質疑をすれば良さそう
ただ、Scrapboxのリンク構造を読ませるなどもやってみたいので、似たものを再実装したい
これのScrapbox版をやりたい
2023/3/3
対応にあたって、二つものが必要blu3mo.icon
1. Scrapbox対応のDocumentLoader
Evernote, Google Drive, Notion, Obsidian, PDF, .... など色々な形式のためのDocument Loaderが用意されている
残念ながらScrapboxはないので、自力で作る
これはjsonを読むだけ
2. Scrapbox対応のTextSplitter
単純に文字数で分割、MarkDownの形式にそっていいところで分割、Pythonコードのいいところで分割、などのパターンが用意されている
残念ながらScrapboxの箇条書き対応はない
@blu3mo: Scrapboxプロジェクト(/blu3mo-public)をGPT-3に食わせてチャットをやってみた 一部トンチンカンだけど、ちゃんとScrapboxの内容を元に答えられている
https://gyazo.com/08634c49ca5a56f310093a1d8cd6739ehttps://gyazo.com/8c0d904063cca26042390b1ddc93ef67
とりあえずできたblu3mo.icon
改善事項
2023/3/5
与えた情報を絶対に使おうとしてつぎはぎな答えを出してきて微妙なので、promptをいじったblu3mo.icon
If any of the above is not relevant, you can ignore it.
promptを少しいじっただけで、結構挙動がよくなった気がするblu3mo.icon
(ちゃんと検証していないけど、感覚として)
つぎはぎ感が結構減った
なんて書こうかな〜と迷っていたらスッと欲しいものをCopilotが出してくれた
マジかwwwnishio.icon
プロンプトもプログラミング言語もCopilotに取っては違いはない、と!
https://gyazo.com/93c6e7a54f15344f49b16d8dff56b046 https://gyazo.com/5f8a7a73e435b4f719195df3bef2dc27
いい感じblu3mo.icon
デプロイしたい
numpyとかみたいな重めのライブラリが色々必要で、容量オーバー
ガーン、vercelでやろうとしてたnishio.icon
まだちゃんと動いていないな
うーん、、、
ERROR:root:IndexFlat.search() missing 3 required positional arguments: 'k', 'distances', and 'labels'
質問を送ると、このエラーが出る
langchainがfaiss(ベクトル検索ライブラリ)を呼ぶ時にエラーが出ているみたい python verもライブラリのバージョンも全て合わせたのに、localとHerokuで何かが違うみたい
うーん、一番可能性が高いのは「全て合わせたつもりだけど合ってなかった」な気がするnishio.icon
わからんので一旦放置
英語でもちゃんと動作する
Scrapbox内で日本語で説明した内容について、英語で答えてくれる
https://gyazo.com/de6bf9fd754ae42de4cd8897e02e87ff