20年分のサポートチケットの前にAIエージェントを配置してみた
100万件のチケットを抱えるヘルプデスクシステムがあります。2,400冊のマニュアルと、2つの巨大なコードベースがあります。
開発者が「以前にこの問題を解決したか」と尋ねたとき、答えは常に「イエス」です。ただ、データが埋もれているだけなのです。シニアスタッフは検索に何時間も費やし、ジュニアスタッフは数週間を無駄にします。
私はこれらすべてのデータの前に座るAIエージェントを構築しました。現在は本番環境で稼働しています。実際に何が起きたのかをお話しします。
難しかったのはデータではありません。どこを探すべきかを知ることでした。エージェントに嘘をつかせないようにすることは、さらに困難でした。
仕組み:
- 自然言語入力による単一のエージェント。
- ヘルプデスクのデータベース、プロジェクトツール、GitLab、SVNを読み取ります。
- マニュアルや過去のチケットに対してベクトル検索を実行します。
- .xlsxや.docxなどのファイルを生成できます。
- 自らツールを選択し、それらを並列で実行します。
アーキテクチャはシンプルです。メインアプリとは別のNodeコンテナで動作します。これは障害の分離(failure isolation)のためです。AIが失敗しても、ヘルプデスクは稼働し続けます。
最大の教訓はプロンプトに関するものでした。最初は40,000トークンにも及ぶ巨大なテキストの塊から始めました。しかし、メンテナンスが難しく、エージェントの集中力が削がれてしまいました。
アプローチを変更しました。プロンプトを小さな「スキルファイル」に分割したのです。
- チケット検索が1つのファイル。
- コード履歴がもう1つ。
- プロジェクト管理が3つ目。
メインプロンプトはルーターとして機能します。必要なときにだけスキルをロードします。これにより、リクエストあたりのトークン数を40,000から8,000に削減できました。エージェントはタスクに集中でき、コードの更新も容易になりました。
また、ユーザープロファイルも追加しました。開発者にはコードパスを、プロジェクトマネージャーにはステータスの要約を提供します。エージェントは、指示されなくても誰が質問しているのかを理解します。
完璧ではありません。以下のような現実的な失敗に直面しました:
- ハルシネーション(幻覚):エージェントが架空のURLを捏造した。対策:正確なパターンを固定するか、強制的にルックアップを行う。
- メモリ喪失:長いチャットの中でエージェントがルールを忘れた。対策:すべてのターンに構造化されたToDoリストを注入する。
- 無限ループ:エージェントがツール呼び出しを過剰に行った。対策:リクエストごとに厳格な予算(制限)を設定する。
- セキュリティ:ユーザーがエージェントを騙そうとした。対策:セキュリティをプロンプトに頼らない。インフラストラクチャ側で読み取り専用のデータベース認証情報を使用する。
真の仕事は、週単位のループにあります。ログを読み、セッションをスコアリングし、スキルを微調整し、プロファイルを更新します。
このループを飛ばせば、それは単なる「デモ」です。このループを回せば、それは「プロダクト」になります。
目標は単に回答を速くすることではありません。組織知(institutional knowledge)を社内に留めておくことです。人が去っても、その知識はトランスクリプトの中に残ります。
構築のためのまとめ:
- 自社の履歴に対するRAGから始める。
- 巨大なプロンプトの代わりに、遅延ロードされるスキルファイルを使用する。
- パーソナライズされたコンテキストのためにユーザープロファイルを使用する。
- AIを独自のコンテナに分離する。
- 指示ではなく、インフラストラクチャを通じて安全性を確保する。
- 毎週ログを確認する。
Optional learning community: https://t.me/GyaanSetuAi
