Slackに社内文書を参照して回答するチャットボットを本番環境に実装しようとしたら沼りかけた話
9月からある会社さんでAIを活用した業務改善に関する仕事をさせていただいており、本日が最終日でした。具体的には社内チャットツールに社内文書(コンフル)を参照するRAGを構築し、それを基に回答するチャットボットを作成したりしていました。
社内ではDiscordとSlackの2種類のチャットツールが使われており、前者はすでに実装済みでした。私が最後にした仕事が後者だったのですがそこでとんでもない沼り方をしたのでぜひ共有したいと思い、こちらの記事を書いています。
ちなみにDiscordでRAGを参照して回答するBotを実装する記事はあまりなく、以下の記事をめちゃくちゃ参考にさせていただきました。以下の記事はRAGとかの実装そのものというより、サーバレスなDiscord botを作成するというコンセプトを参考にさせていただいたという感じです。本当に助かりました、感謝しています。
モチベーション
上述した通り社内には2種類のチャットツールがあり、主に仕事ではDiscordを使っておりました。バックオフィス系のやり取りはSlackという使い分けをざっくりしており、有給休暇の申請方法や諸々の手続きをバックオフィスに負荷をかけずにサクッと聞きたいよね、というお話からチャットボットを作成・実装することとなりました。
Slack bot作ってみた・その1
まずできるだけ楽に実装したいと思い、調べたところ以下のような記事を見かけ、AWS Chatbotというサービスでチャットボットを実装することにしました。詳細は以下の記事に譲るとして、簡単に言ってしまうとBedrockでナレッジベースさえ用意できればノーコードでサクッとチャットボットを実装できてしまうという優れものです。
(ちなみに現在サポートされているのはAmazon Chime, Microsoft Teams, Slackの3種類となっており、残念ながらDiscordは用意されていませんでした...)
コンフル上の情報をAWSのLambda関数で吸い出して(量が多くてLambda関数の実行時間の限界を超えたためStep Functionsを利用するなど工夫したことが色々あるのですがそれはまた別の機会に...)、ナレッジベースは作成できたので、いざ実装!
...したのはよかったんですが、これはAWS Chatbotの仕様でBotに質問する際には以下のような構文で質問する必要があります。
@aws ask {コネクター名}-{プロンプト}の構文
- @awsまではいいとして、それ以降を書くのがややめんどくさい
- もうちょっといいUXにしてほしい
というような要望が…笑
まあ最後の仕事なのでとことんやりましょう!となり、こちらの方向性はいったん棄却して別の方法をとることになりました。
Slack bot作ってみた・その2
という訳でフルスクラッチ(?)で作ることになりました。実装は以下の記事を完全にパクリもとい参考にさせていただき、API Gateway+Lambda+Bedrockという構成で実装しましたので、詳しくは以下の記事をぜひお読みいください。
動作を確認し、問題なかったため社のワークスペースに実装する運びとなりました。
ここで問題発生
個人のワークスペースに実装した時も、参考の記事でも見たことがないエラーが表示されたのです…
本来はAWS側と連携させる際に「Install to Workspace」を実行してxoxo-foobar~
のような「Bot User OAuth Token」を取得する必要があるので、これが取得できないと詰んでしまいます。
しかし「Install to Workspace」を実行しても、「導入するボットがいません」というような旨のメッセージが表示されて「Bot User OAuth Token」が入手できないという状況に陥りました。
調べても出てこず困り果て、ワンチャン権限の問題かも?と思い、Slackの上位権限を持っているインフラチームの方に協力していただけることになりました。
インフラチームの方と私が作成した手順書を一緒に実行していき、問題箇所に差し掛かり、祈りながら画面を見ていたのですが...
無情にも同じ「導入するボットがいません」というような旨のメッセージが…
解決方法[ここだけ見ればOK!]
今回の記事はここだけ読んでいただければいいと思っています。
解決方法は以下です。
上記のセクションのEditでDisplaynameを設定してください。これを設定したところ、無事ワークスペースにアプリをインストールすることができ、「Bot User OAuth Token」を取得することができました。
最後に
意外と権限を持っている人と実装する人が違うパターンがあったり、権限の関係で閉じた環境で試したところまでしか情報が出てこなかったり、ということがあるんだなと思いました。
今回は本番環境への実装時に発生した問題なので、割とレアな情報かもなと思い、共有させていただきました。共有した方が世のためになるかなと思い、記事として公開させていただきました。原因までは究明できてない、対症療法的な内容ではありますが、どなたかの役に立てば幸いです。
一応原因について考察もとい想像
今回個人のワークスペースに実装したチャットボットの名前はChatbot_testのような英語でした。しかし、本番環境で実装する際は日本語の親しみやすい「コーポチャットボット」のような名前でした。恐らくですが、英語の名前の場合は自動的にそのままDisplaynameとして採用される処理がされており、日本語の場合は別途英語のDisplaynameを設定する必要がある…みたいな感じかな、と思っております。詳しい方いたらぜひ教えてください。
Discussion