For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション

音声エージェント

GPT-Live、Realtime API セッション、チェーン型音声パイプラインから選択します。

音声エージェントを使うと、ユーザーはアプリケーションに話しかけて質問したり、タスクを完了したりできます。設計上の重要な選択は、音声を推論やツールにどうつなぐかです。独立したバックエンドを使いながら会話を継続する方式、単一の音声モデルを使う方式、各段階を個別に制御するパイプライン方式があります。

適切なアーキテクチャの選択

アーキテクチャ最適な用途選ぶ理由
GPT-Live独立したバックエンドを使う全二重の会話既存のテキストワークフローを維持し、バックエンドを独立して選択でき、会話も継続できます。
Realtime API単一セッションでの音声処理、推論、ツールの使用単一のモデルで音声を解釈し、実行する内容を判断して、音声で応答します。
チェーン型音声パイプライン音声とテキストの各処理段階の制御中間段階のテキストを確認・変換し、各コンポーネントを個別に置き換えられます。

全二重の音声エージェントの構築

GPT-Live は、聞くことと話すことを同時に行えます。この機能を全二重と呼びます。ライブモデルが音声でのやり取りを処理し、推論とツールの使用を独立したバックエンドに委任します。バックエンドの処理中も、ユーザーは話し続けられます。

ビジネスロジックやツールを含む既存のテキストワークフローを維持したまま、GPT-Live を音声インターフェースとして追加できます。バックエンドの処理を実行し、その会話コンテキストを提供する主体は、委任モードによって決まります。

  • クライアント委任:任意のバックエンドモデルとプロバイダーを使って、独自のエージェントやワークフローを接続します。アプリケーションが処理を実行し、結果を GPT-Live に返します。
  • Responses 委任:バックエンドでの推論とツールの使用に、OpenAI がホストする Responses モデルを選択します。GPT-Live が会話コンテキストを提供し、そのモデルの呼び出しを管理します。カスタム関数の実行は、引き続きアプリケーションが担当します。

どちらのモードでも、権限と業務記録はアプリケーションが管理します。話し方に関する指示はライブモデルのプロンプトに、ビジネスルールはバックエンドのプロンプトに記述します。

まずは「GPT-Live 入門」をご覧ください。バックエンドのセットアップについては「委任とツール」、話し方については「音声モデルのプロンプト」を参照してください。

音声変換方式の音声エージェントの構築

Realtime API では、RealtimeAgentRealtimeSession を使って、ブラウザでの利用を中心とした実装を始められます。セッションは、音声のターン、ツール、割り込み、ハンドオフを処理します。完全なスターターは、現在「Realtime API 入門」に掲載されています。

チェーン型音声ワークフローの構築

音声認識、エージェント、音声生成の間でテキストを確認・変換したい場合は、チェーン型の方式を使います。アプリケーションは次の 3 段階を管理します。

  1. 音声からテキストへの変換
  2. エージェントのワークフロー自体
  3. テキストから音声への変換
チェーン型音声パイプラインの実行
import asyncio
import numpy as np

from agents import Agent, function_tool
from agents.voice import AudioInput, SingleAgentVoiceWorkflow, VoicePipeline


@function_tool
def get_weather(city: str) -> str:
    """Get the weather for a given city."""
    return f"The weather in {city} is sunny."


agent = Agent(
    name="Assistant",
    instructions="You are a helpful voice assistant.",
    model="gpt-6-astra",
    tools=[get_weather],
)


async def main() -> None:
    pipeline = VoicePipeline(workflow=SingleAgentVoiceWorkflow(agent))
    audio_input = AudioInput(buffer=np.zeros(24000 * 3, dtype=np.int16))
    result = await pipeline.run(audio_input)
    async for event in result.stream():
        if event.type == "voice_stream_event_audio":
            print("Received audio bytes", len(event.data))


if __name__ == "__main__":
    asyncio.run(main())

各段階を確認できるようにしたい場合や、置き換え可能にしたい場合は、この方式を使います。たとえば、文字起こし結果を保存し、テキストエージェントが応答する前にポリシーチェックを実行し、内部システムを呼び出してから、ワークフローが承認済みの回答に到達した後にのみ音声を生成する、といった構成が可能です。

音声エージェントの評価

会話の品質とタスクの成果は分けてテストします。応答が自然に聞こえても、ツールが実行されたことや、アプリケーションの状態が変わったことの証明にはなりません。

  1. 期待される結果、ツール呼び出し、権限を定めた代表的なシナリオを選びます。
  2. 各結果の検証に必要な音声、イベント、ツールの結果、アプリケーションの状態を保存します。評価の実行自体が失敗した場合と、評価は正常に実行されたもののエージェントがタスクに失敗した場合を区別します。
  3. シナリオを繰り返し実行し、タスクの完了状況、応答音声が聞こえるまでの遅延、割り込み、意図しない無音を比較します。変更を比較するときは、通話者、モデルの構成、ツール、トランスポートの条件を揃えます。

GPT-Live では、次の項目を個別に測定します。

  • タスクとツールの結果:意図が保持されているか、委任された処理、ツールの引数、権限、アプリケーションの最終状態を確認します。音声による完了報告が、実際に完了したアクションと一致していることを検証します。
  • 会話のタイミング:応答音声が聞こえるタイミング、意図しない無音、発話の重なり、割り込みに対して発話を譲る挙動を測定します。バックエンドの処理中に訂正が入る場合も含めます。
  • 音声と言語:アクセント、背景雑音、言語の切り替え、名前、数値など、さまざまな条件で入力の認識をテストします。出力音声の聞き取りやすさと言語の選択は、認識とは別に評価します。
  • セッションの信頼性:接続の失敗、音声の欠落、タイムアウト、未完了のセッションを、タスクのスコアとは別に追跡します。

初歩・発展・実践の段階を踏んで、複雑さを増やします。

  1. 初歩:条件を制御した単一ターンのリクエストに、合成音声を使います。再現性のある比較ができるよう、生成した音声、アプリケーションのコンテキスト、期待される結果を固定します。
  2. 発展:人が話した単一ターンのリクエストの代表的な録音を再生し、声、マイク、間の取り方、音響条件が挙動にどう影響するかをテストします。
  3. 実践:独立した通話者シミュレーターを使い、複数ターンにわたる継続的な会話を行います。会話とバックエンドの処理が並行して進む状況で、確認のやり取り、要件の変更、割り込み、復旧をテストします。

自動採点に加えて人が音声を聞き、発音、自然さ、会話のテンポが適切に感じられるかを評価します。

GPT-Live の評価ハーネスについては、音声エージェント評価の Cookbook を参照してください。

Realtime の評価ハーネスと具体例については、OpenAI Cookbook の Realtime 評価ガイドを参照してください。実行可能な評価レシピは Cookbook に掲載し、このページでは共通のテストチェックリストを提供します。

レイテンシの測定

レイテンシの指標ごとに、観測する開始イベントと終了イベントを定義します。最初の応答音声が聞こえるまでの時間、委任までの時間、割り込みに応じて発話を譲るまでの時間、バックエンドの処理完了までの時間、タスクの完了を検証するまでの時間は、それぞれ異なる区間を測定します。単一の単調増加する時間軸を使い、測定対象の母集団、中央値、テールレイテンシを報告します。エンドツーエンドの応答時間を、バックエンドのみの処理時間で代用しないでください。

フロントエンドのモデルを比較するときは、通話者、録音、バックエンドモデル、プロンプト、トランスポート、音声の送信間隔、採点器を固定します。

GPT-Live では、委任の受信、バックエンドリクエストの開始、最初の有用な結果、ツールの開始と終了、結果の送信、音声の到着、クライアントでの再生など、アプリケーションで観測できる段階を記録します。クライアント委任では、アプリケーションがバックエンドリクエストを直接観測できます。Responses 委任では、ネストされたレスポンスイベントと、アプリケーションが実行するカスタムツールを観測できます。

各区間の時間から、接続の確立、モデルの処理、ツール、アプリケーションのバッファリング、再生のどこで遅延が発生しているかを特定します。最初の有用な音声回答は、「確認しています」のような応答とは分けて測定します。こうした応答が早くなっても、求められた結果が早く届いたことにはなりません。

一度に変更する要因は 1 つにして、同じシナリオを繰り返します。 有用な音声応答までの時間の中央値とテールレイテンシを、タスクの成功、ツールの正確性、 割り込みと併せて比較します。実装の指針については、バックエンドのレイテンシの削減 を参照してください。

音声エージェントでも共通の基本構成要素

音声を使うと、通信方式と音声処理のループは変わりますが、ワークフローの基本的な設計判断は同じです。

実践上の原則は、まず音声のアーキテクチャを選び、その後、エージェントの残りのワークフローをテキストの場合と同じように設計することです。

次のステップ

音声と音声対話の概要

ユースケースに合ったリアルタイムまたは音声のガイドを選びます。

会話の管理

Realtime セッションのライフサイクルとイベントモデルを扱います。

WebRTC 接続

ブラウザやモバイルの音声を Realtime セッションに直接接続します。

リアルタイムのプロンプトガイド

推論、前置きの発話、ツール、エンティティの取得、音声の振る舞いを調整します。