対話型AIエージェントの構築方法について

# はじめに
近年、対話型AIエージェントの技術が急速に進化しているため、本記事では対話型AIエージェントの基本的なアーキテクチャをもとに、具体的な構築方法を紹介します。また実際に構築したデモへのリンクも記載しているので参考にしてください。

## 対象とする対話型AIエージェント

Anthropicのドキュメント「[Building Effective Agents](https://www.anthropic.com/research/building-effective-agents)」で述べられている構築方法のうち、本記事が対象とするのは **「LLMがユーザとの対話のなかで自律的にツールや記憶を使い、問題解決を行うエージェント」** です。  
対話型AIエージェントにはチャットボットと音声ボットの両方が考えられますが、本記事では **音声対話型のシナリオも含めて** 想定します。

下図のように、ユーザとの対話を軸としてLLMが自律的にツール(外部APIやDB)を呼び出す、あるいは記憶(コンテキスト)を参照しながらゴールに向かってタスクを完了するアーキテクチャを念頭に置きます。

![エージェントアーキテクチャ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/1f10eb4c-1206-149e-cf79-375ad343a0c7.png)  
引用: [Anthropic - Building Effective Agents](https://www.anthropic.com/research/building-effective-agents)

---

## 対話型AIエージェントの全体構成

対話型AIエージェントを構築する際、大きく３つのコンポーネントに分けて考えると整理しやすくなります。

1. **ボイスボット(またはチャットボット)**
2. **ツール(Web API)**
3. **事後処理**

以下では、これらそれぞれがどのように連携し、全体システムとして対話型AIエージェントを機能させるかを見ていきます。

### 1. ボイスボット(チャットボット)

**ボイスボット**の場合、音声認識と音声合成が必須となります。実装パターンとしては、
- ASR(音声認識) → LLMによる対話制御 → TTS(音声合成)
- Speech to Speechモデル(OpenAI等のRealtime APIのようなモデル)を利用

のいずれかです。一方、**チャットボット**の場合はテキストの入出力になるので、よりシンプルに構成可能です。

### 2. ツール(Web API)

AIエージェントがタスクを行うために、外部データを参照したり、外部APIを呼び出したり、独自のロジックを実行するためのAPI群を用意します。AnthropicではMCP(Multimodal Control Platform)というインターフェイスの利用を推奨しており、それに則ることでエージェントがツールを呼び出しやすくなります。

ツール内部では、
- **外部APIの実行**
- **ロジックの実行**
- **データベースの参照/書き込み**

などを行います。また、ツール内部でも追加のAIエージェントやLLMを組み込むことで高度な処理を実装することも可能です。

### 3. 事後処理

対話が終了した時点、または対話が中断したタイミングで自動的に実行される処理です。Webhookなどで会話ログを受け取り、主にLLMでの分析・データ抽出・分類を行います。たとえば、

- 会話のカテゴリ推定(クレーム、新機能要望、サポート要請など)
- 構造化したデータをCRMに登録
- 緊急度に応じて担当者に通知(SMSやSlackなど)

といった処理をここで行います。AIエージェントに100%の業務を任せるのは現実的でないケースが多いため、人間側が後工程でカバーできるようにするのがポイントです。

---

## 詳細アーキテクチャ

下図は、上記の３つのコンポーネントをどのようにつなげるかを表しています。

![詳細アーキテクチャ図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/a49124ac-0ec4-4d74-5548-6d42dc94220a.png)

1. **ボイスボット(チャットボット)**  
   ユーザとのインターフェイス。音声/テキストいずれかの形でLLMとのやりとりを行う。  

2. **ツール(Web API)**  
   ユーザの要望や質問に応じ、AIエージェント(LLM)が自律的に呼び出す機能群。  
   - DBアクセス
   - 外部サービス呼び出し
   - ロジック処理 など

3. **事後処理(LLM + Webhook)**  
   会話終了時に会話ログを受け取り、事後分析・処理を実行。  
   - 会話内容のテキストマイニング
   - 分類や要約などのLLM処理
   - 担当者へのアラート送信 など

---

## 構築における３つの要諦

対話型AIエージェントを構築するときに特に重要になるポイントとしては、以下の３点が挙げられます。

1. **プロンプト**  
   - 抽象的なゴールや行動規範を自然言語で設定し、エージェントに指示する。  
   - 事前にきっちりとワークフローが定義できるのであれば、AIエージェントではなく通常のシステム開発(ワークフロー+RPAなど)で対応するほうが無難。  
   - 「製品についての質問にはWebで検索し回答」「クレームが来たら折り返し連絡先を聞く」「新機能要望は詳しくヒアリングする」など、高度なタスクも抽象化してシンプルに書く。

2. **ツール設計**  
   - ツールはAPIとして整理し、**“LLMが呼び出しやすい形”** にする。  
   - APIが複雑すぎると、LLMが呼び出しパラメータやエンドポイントを間違える可能性が高くなる。  
   - 特に音声対話環境ではユーザの本人確認が難しいケースが多い。例えば電話番号のみでユーザを判別する場合、それに対応したAPI設計が必要。

3. **事後処理**  
   - AIエージェントが全てを完結させられるわけではないので、会話ログの分析や必要に応じた担当者アサインなどの後処理を自動化し、人間のオペレータへ引き継げる体制が大切。  
   - 会話ログをWebhookなどで取得し、LLMでメタ情報(カテゴリなど)を推定したのちCRMやIssue管理システムに登録すると運用がスムーズ。

---

## 対話型AIエージェントの具体構築例

先ほどのポイントを踏まえた、対話型AIエージェント構築のサンプルを紹介します。
詳細なソースコードやデモが以下で公開されているので、実装の参考にしてみてください。  
**URL**: [https://zenn.dev/yuno_miyako/articles/e2c02be1d73f7b](https://zenn.dev/yuno_miyako/articles/e2c02be1d73f7b)

1. **プロンプトの設定**  
   - 例) 「製品についての質問が来たらWebで調べて回答する」「クレームがあったら折り返しの連絡先を聞く」「新機能要望であればヒアリングをする」など。

2. **ツールの用意**  
   - 例) GeminiのWeb検索APIをエージェントツールとして構築。  
   - LLMが利用しやすい形でAPI仕様を定義。  

3. **事後処理**  
   - 会話終了時に会話ログを取得し、スプレッドシートへの記録やカテゴリ分類を実施。  
   - 新機能要望のカテゴリであればGitHub Issueを自動作成、クレームの場合はSMS通知を担当者に送る、といった分岐を定義。

## まとめ

対話型AIエージェントを構築するうえで重要なのは、

- **「抽象的なゴールをもったプロンプト」** と **「LLMが使いやすいツール(API)」** をしっかり用意すること  
- **事後処理を設計して、最終的なタスク完了を人間と協調して担保すること**  

です。とりわけボイスボットの分野は、音声合成や音声認識、Speech to Speechモデルなど、テクノロジー進化のスピードが非常に速いので、PoC段階から変化に追随しやすいアーキテクチャを採用すると良いでしょう。

これから対話型AIエージェントを導入・開発される方の参考になれば幸いです。ぜひ気軽に取り組んでみてください。