Tensorflow.jsとChatGPT APIを使って安く趣味のQAシステムを作ろうとし、頓挫した話

ChatGPTを使ってQAシステム作るぞ!って今めちゃくちゃ色々な人が試してますよね。LangChainにもRetrieval QAの機能ありますし。チャット形式で質問したら答えが返ってくるシステムはみんなの夢ですね。

そんな中、私にも叶えたい夢がありました。

  • あるゲームの情報がチャット形式で返ってくるシステムが欲しい

  • でもお金はかけたくない

この2番目がめちゃくちゃ重要でした。なぜなら私はケチだからです。技術的探究心よりもケチが勝つほどのケチです。どうなんだエンジニアとして。

ケチなので、当然ChatGPT APIぶん回し戦法は使えません。GPT-3.5の料金はめちゃくちゃ安い? それでもです。俺は本当にケチだぞ。

私は考えました。どうにかして計算コストをできるだけ利用者側に転嫁して、こっちが負担しないといけない部分もできるだけ安く済ませたいよ〜〜! と。

そんなときに見つけました。Tensorflow.jsを。

天啓でした。Tensorflow.jsは計算をブラウザ側で行ってくれるツールです。サーバ側であれこれ計算して私がそのサーバ代を払う必要がありません。なんと最高なのでしょう。

そして、デフォルトでQA用のモデルが用意されています。最高。

そしてできたのが以下のような流れです。

一部適当に書いてますがこんな感じです。一番の節約ポイントとして、一度英訳するフェーズを挟んでいることです。ChatGPTのトークン数的には英語が圧倒的に有利ですし、Tensorflow.jsのモデルが日本語に対応しているかどうかも怪しかったです。それにどうせDeepL APIの無料枠を超えるほどには利用しないしされないので、事前の情報も全て手元で英語で用意しておき、質問だけDeepL APIで英訳しています。

そこで問題になるのが固有名詞です。英訳する際も日本語訳する際も、特に名前は変な読み方をされてしまいます。そこで、英訳するまえに固有名詞を英語に、日本語訳する前に固有名詞を日本語にする、といった処理を挟んでいます。これでも完全にうまくいくわけではありませんが、ある程度の表記揺れを抑制できています。

さあ、これで完成です。何度も色々なAPIに投げているので時間はかかりますが、トークン節約の為仕方ありません。……が、タイトルは「作ろうとした話」になっています。なぜ作った話ではないのでしょうか?

出なかったんです。精度が。

正確な答えを提供してはくれます。ですが、それよりも何も答えてくれないことのほうが多かったです。理由はわかりません。文章同士の類似度が低かったのでしょうか。なんにせよ、少し突っ込んだことを聞くだけで「あ、その情報ないっす😅」判定です。

そんなわけで、この計画は頓挫しました。きっとLangChainのmap reduce documents chainとか使えば、もっと精度が良いQAシステムができたのでしょう。でもそれはできません。なぜなら私はケチだから。

なんとも締まらない終わり方ですが、そういう結果になりました。この記事は空しき努力と悲しみの記録として、そして似たようなことを考えた人の助けに少しでもなればと思い、ここに置いておきます。

この記事が気に入ったらサポートをしてみませんか?