アプリにAIチャットを追加しようとして壁にぶつかった話
プロジェクト管理ツールにAIチャットアシスタントを組み込もうとしました。簡単だと思っていました。チャット履歴のすべてをAPIに送信する計画でした。
しかし、失敗しました。
15メッセージほどで、レスポンスが遅くなったり、動作が不安定になったりするようになりました。テキストがトークン制限に対して長すぎたため、APIがエラーを返したのです。
私が試したことと、うまくいった方法を紹介します。
直面した問題:
- 履歴の切り捨て:直近の数メッセージだけを残しました。これにより速度は改善しましたが、AIはチャットの最初の方の内容をすべて忘れてしまいました。
- 要約:5メッセージごとにAIにチャットを要約させました。これにより記憶力は向上しましたが、コストと待ち時間が増加しました。
- ベクターストア:メッセージの関連性に基づいてスコアリングを試みました。しかし、私のニーズに対しては複雑すぎました。
解決策:
すべてを送信しようとするのをやめました。体験を改善するために、主に2つの方法を用いました。
ストリーミング:Server-Sent Eventsを使用して、テキストが生成されるたびに表示するようにしました。これにより、AIの思考に時間がかかっても、アプリが高速に動作しているように感じられます。
3つのスロットによるコンテキストウィンドウ:トークン予算を特定のパーツに分割しました。
- システムプロンプト: 500トークン。これは固定です。
- ダイナミックコンテキスト: 2000トークン。これには直近のプロジェクトの更新情報やタスクの状態を保持させます。
- 会話履歴: 4000トークン。これは直近のメッセージのスライディングウィンドウです。
このように予算を管理することで、ペイロードサイズを40%削減できました。これによりコストが節約され、レイテンシも低下しました。
私からのアドバイス:
AIの導入は、単にAPIを呼び出すだけのことではありません。送信するデータの量を管理する必要があります。ストリーミングはユーザーが感じる速度を向上させ、賢いコンテキスト戦略はAIの「賢さ」を向上させます。
あなたのアプリでは、会話のメモリをどのように管理していますか?スライディングウィンドウを使っていますか、それとも要約を使っていますか?
オプションの学習コミュニティ: https://t.me/GyaanSetuAi