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を独自のコンテナに分離する。
  • 指示ではなく、インフラストラクチャを通じて安全性を確保する。
  • 毎週ログを確認する。

Source: https://dev.to/nunc/i-put-an-ai-agent-in-front-of-20-years-of-support-tickets-heres-what-actually-broke-5gdd

Optional learning community: https://t.me/GyaanSetuAi