はじめに
2024年8月頃からAWS上でBedrockを使って社内向け生成AIチャットボットを作っています。
初めて生成AIを使ってみたところで色々考える点があったので、メモとして残しておくことにしました。
生成AI技術が日々すごいスピードで進歩しているので既に古い技術になっていそうなのと、そもそも初心者が書いておりますで、あまり技術的な参考にはならないと思いますが、ポエム的な感じ?でお読みいただけたら幸いです。
作りたいもの
よくあるシンプルなQAチャットボットです。
社内のよくある質問をQAデータとして読み込ませて、社員からの質問にQAデータから生成AIに回答させるというものです。構成としてはざっくり以下のようなイメージです。
考えたこと① チャットボットの形態
考えたことの1つ目は、チャットボットのインターフェース部分です。
今回の目的は生成AIを使ってみるという意図が大きかったので、できるだけ早く簡単に作りたい。チャットボットはWEBアプリが分かりやすくていいけど、UI開発は大変そうだし、、、
ということで以下の2つの案を考えました。
- Difyを利用してWEBアプリとして公開する
- AWSのサービスを駆使してTeams連携させる
Difyを利用してWEBアプリとして公開する(以降Dify版と呼びます)
Difyは結構すごいAI開発プラットフォームみたいだよと社内で聞いてましたので、
ちょこっと調べてみたら、
ノーコードで開発できて簡単にWEBアプリとして提供することができる。
ということで、すぐに採用しました。
(Difyについては多くのサイトで紹介されているので省略します)
構成
Difyのコミュニティ版をEC2にインストールする形としました。
EC2はプライベートVPCに配置し、Bedrock向けにモデルアクセス用のvpcエンドポイントやAPIアクセス用にAPIGW+Lambdaを用意しました。
Difyインストール手順は、下記の記事を参考にさせていただきました。
Dify版の良かった点
- インストールが簡単
- チャットフローやLLMへのプロンプト設定などのUIが非常に使い易い
- 簡単にWEBアプリとして公開できる。想像してる使い方ができる
- スタジオの複製やDSLのエクスポートなど気軽に環境を複数作れるので色々試しやすい
- プレビュー機能によりデバッグしやすい
- 運用系機能が充実している(ログ参照・分析等)
Dify版の課題と感じている点
- EC2やALB、NATGWなどのランニングコストがかかる(プライベートVPCに配置したから…)
- 機能追加やバージョンアップが非常に速いので、最新の機能を使いたかったら頻繁に更新確認してアップグレードする必要がある
- 更新するとすぐ保存されてしまう(バックアップ取ってから作業しないと後悔する)
- 冗長化や拡張性を持たせた構成にするには?(まだ調べてないだけ…)
AWSのサービスを駆使してTeams連携させる(以降Teams版と呼びます)
Teamsからチャット入力させる案です。
下記の記事にある通りTeamsからAWS Chatbot経由でBedrockエージェントに連携するものです。
※着手当時はまだその機能はなく、workflowsからEメール飛ばしてSESやSNSを使ったらどうか?など、、非常に苦労されてました。(センパイが)
構成
AWS Chatbot + Bedrockの構成になります。
構築手順は下記の記事が参考になると思います。
Teams版の良かった点
- AWS ChatbotとBedrockという非常にシンプルな構成
- 普段使い慣れているTeamsから気軽に入力できる
- ランニングコスト(AWS利用費)が非常に安い
- AWS ChatbotとBedrockともにマネージドサービスなので非機能要件的な考慮が要らない
- Bedrockエージェントを利用するのでナレッジベースやガードレールの呼び出しが簡単
Teams版の課題と感じている点
- Teamsのチャネルへの投稿のためチャネル参加者から見える(そういう使い方としての理解が必要)
- 『@aws ask xxx 質問文』みたいな構文のため、入力の手間がかかる
- 回答に時間がかかる。(Teams⇔AWS Chatbot間の通信なのか…20~30秒くらい待たされることが多い)
- ワークフロー的な処理をさせようとすると設定が複雑になる(PromptFlowsを呼び出すとか)
- 運用機能は作りこみが必要
考えた結果
Dify版もTeams版のどちらも機能として用意しようということで進めましたが、
Teams版の性能面の課題から、今のところはDify版を優先して利用することになりました。
Teams版はTeamsまたはAWS Chatbotのアップデートに期待したいと思います。