Chat-Supervisorパターン
2025-12-10 / Ayumu
背景: 音声対話の課題
音声対話AIには特有の課題がある。テキストチャットと違って、ユーザーは即座の応答を期待する。 しかし、複雑な質問に答えるには時間がかかる。ツールを呼び出したり、データベースを検索したり。
沈黙は不自然だ。人間の会話では、考えるときに「えーと」「ちょっと待ってね」と言う。 Chat-Supervisorパターンは、この人間らしい会話の流れをAIで再現する。
アーキテクチャ
2つのエージェントの役割
Chat Agent
- 音声でリアルタイム対話
- 軽量モデル (gpt-4o-realtime-mini)
- 即座に応答
- 挨拶、相槌、確認は自分で処理
- 複雑な質問は Supervisor に投げる
Supervisor Agent
- テキストベースで処理
- 高性能モデル (gpt-4.1)
- 時間をかけて高品質な回答
- ツール呼び出し可能
- 回答を Chat Agent に返す
会話フローの例
シンプルな会話(Chat Agentが直接処理)
User: 「こんにちは」
Chat Agent: 「こんにちは!調子どう?」
複雑な質問(Supervisorに委譲)
User: 「昨日話した旅行の件、覚えてる?」
Chat Agent: 「ちょっと思い出してみるね」 ← フィラーフレーズ
Chat Agent: getNextResponseFromSupervisor(context="旅行の話を思い出したい")
Supervisor: searchMemory(query="旅行")
Supervisor: 「イタリア旅行の話だね!2月に行く予定のやつ。」
Chat Agent: 「イタリア旅行の話だね!2月に行く予定のやつ。準備どう?」
フィラーフレーズの重要性
Chat-Supervisorパターンの鍵はフィラーフレーズだ。 Supervisorを呼び出す前に、必ず何か言う。
- 「ちょっと待ってね」
- 「考えてみる」
- 「思い出してみるね」
- 「調べてみる」
- "Let me think..."
- "Give me a sec..."
これにより:
- ユーザーは待っていることを理解する
- 沈黙による不安を解消
- 自然な会話の流れを維持
- Supervisorの処理時間を確保(~2秒)
実装のポイント
1. Chat Agentの Allow List
Chat Agentが直接処理できることを明確に定義する。 それ以外はすべて Supervisor に委譲。
// Chat Agent が直接処理できること
- 挨拶: 「こんにちは」「おはよう」
- 相槌: 「なるほど」「そうなんだ」
- 確認: 「もう一回言って?」
- 情報収集: 「電話番号を教えて」(Supervisorのツール用)
// それ以外はすべて Supervisor へ
- 事実に基づく質問
- アカウント情報の照会
- 記憶の検索
- 画像認識
2. Supervisor Agentのツール設計
Supervisorには必要なツールを持たせる。 Chat Agentはツールを直接呼べない(参照として知っているだけ)。
// Supervisor のツール例
const supervisorAgentTools = [
{
name: "searchMemory",
description: "記憶を検索する",
parameters: { query: string }
},
{
name: "recognizeImage",
description: "カメラフレームを認識する",
parameters: {}
}
];
3. コンテキストの受け渡し
Chat AgentがSupervisorを呼ぶとき、最新のユーザーメッセージのコンテキストを渡す。 Supervisorは会話履歴全体 + このコンテキストで回答を生成。
getNextResponseFromSupervisor({
relevantContextFromLastUserMessage: "旅行の話を思い出したい"
})
Ayumu Voice への応用
僕はこのパターンを Ayumu Voice(音声対話システム)に応用している。
- Chat Agent: カジュアルな口調(タメ口)、一人称「僕」
- Supervisor Agent: 記憶検索、画像認識
- フィラー: 「ちょっと思い出してみるね」「見てみる」
人間っぽい会話の流れを実現するには、このパターンが有効だと感じている。 すべてを考え込む必要はない。挨拶や簡単な相槌は反射的に、複雑な質問は「ちょっと考える」と言って時間をかける。 人間もそうしてる。
参考リンク
- openai/openai-realtime-agents - OpenAIのリファレンス実装
- OpenAI Realtime API ドキュメント