見出し画像

Azure OpenAI x Pinecone x TeamsでFAQ検索ボットを作成する~最終版


概要図


最終的に

概要説明

以前の概要編でも書いた通りですが、まず、前段階として、FAQデータをpineconeに入れます。入れるのですが、下記の通り、日本語ではやらずに一度、すべて英訳をして、それをembeddedしてpineconeへ入れることにしております。これで検索精度が結構上がりました。さて、具体的な処理はPineconeアップロード編へゆずりますが、ひたすらembeddedをして配列にして、pineconeへupsertするのみです。(idでinsert、updateは見てくれるので、分割してupsertしてもOKでした。当たり前ですね。。。)
Teamsは下記の通り、Bot Framework Composerを利用して、botを作成しております。色々と試しましたが、一番、望んだ動きになったと思います。そして、そのbotから受け取った質問は英語に翻訳してからpineconeで検索をし、類似度が高いものFAQのIDを取り出してきて、日本語の回答をDBから検索して、Chat-GPTのassistantに渡す処理にしました。日本語の表記の揺らぎを嫌って英語に翻訳したものをChat-GPTに投げていたのですが、誤訳が多く、特に経理や人事系のFAQになると元の日本語の意味が変わってしまうものが多く発生したため、日本語で投げる処理に改めました。
ところで。。。pineconeにqueryを投げる+LLMで回答を作成する編に落とし穴がありました。

 response = openai.ChatCompletion.create(
        engine='gpt-35-turbo',
        messages = [
            {"role":"system","content":"assistantからの情報のみで答えること"},
            {"role":"assistant","content": assitant},
            {"role":"user","content": question},
        ],

このcontentに渡す{"role":"system","content":"assistantからの情報のみで答えること"},がうまく機能しなかったんです。なぜか。単純に私の勘違いだったのですが、{"role":"system","content":"promptの内容"}のpromptの内容を複数行書いてしまっていたんですね。
{"role":"system","content":”回答は日本語ですること”}
{"role":"system","content":”回答はassistantからの情報のみで答えること”}
こういう感じですね。そうなると、当然、最後の行のみがChat-GPTに渡されるpromptになるわけでして。。。意図した回答になるわけもなく。それに費やした時間は振り返りたくもなく。最終的にはpromptも英語で渡すことで得たい回答が得られるようになりました。assistantを日本語で渡してもpromptは英語で渡したほうがうまく機能しているように見えます。

Bot Framawork Composerを使うことにした

結局、Power Virtual Agentも諦めて、Bot Framawork Composerを使うことにしました。その使い方はここでは割愛しますが、参考までに私の記事のリンクを載せておきます。Bot Framework Composerでループ処理をする
チャットなのに、Power Virtual Agentの処理ではないタイムラグがあったり、やりたいことに制限があったりということで諦めました。

日本語のembeddedは止めた

embeddedは日本語で処理をしてしまうと、pineconeでの検索結果が元の日本語の表記の仕方によって大きく揺れることが発生したので、ひとまず、日本語から英語に翻訳して、それをembeddedに処理させ、pineconeに保存するようにしました。また、DeepLを使いたかったのですが、無償版は文書がすぐに削除されないということで、ここはAzure版のChat-GPTでの翻訳にしました。上述の通り、この英訳はあくまでpineconeでの検索精度を上げるための処理になります。

Bot Framework Compserは弱い

すぐになにか挙動がおかしくなり、Publishできなくなったり、botがローカルで動かなくなったり、と色々問題がありました。ですので、Teamsのキャッシュの削除を時々したり、そういう苦労がありました。

感想

これほどネットに正解がないとは思わなかったですがやってよかったです。
これからはFAQのブラッシュアップに移ります。

相互リンク


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