⚡ 实时语音助手 这是一个使用 OpenAI 实时 API 的基本实时语音助手示例。它展示了实现超低延迟语音对话的核心组件,只需最少的配置即可完成。 本演示所展示的内容 核心实时组件:RealtimeAgent、RealtimeRunner 和 RealtimeSession 基础语音对话:超低延迟语音交互 函数工具:在语音对话期间可调用的简单工具 代理交接:简单的专业代理交接 事件处理:实时会话的关键事件处理 核心概念:实时语音处理 实时代理通过 OpenAI 的实时 API 提供了超低延迟的语音对话。与传统语音管道不同,实时代理保持持久的 WebSocket 连接,以便即时处理音频。
这是一个使用 OpenAI 实时 API 的基本实时语音助手示例。它展示了实现超低延迟语音对话的核心组件,只需最少的配置即可完成。
实时代理通过 OpenAI 的实时 API 提供了超低延迟的语音对话。与传统语音管道不同,实时代理保持持久的 WebSocket 连接,以便即时处理音频。可以将实时代理视为实时对话伙伴,它们:
根据官方文档,实时代理能够以尽可能低的延迟实现自然的语音对话。
┌─────────────────────────────────────────────────────────────┐ │ REALTIME VOICE WORKFLOW │ ├─────────────────────────────────────────────────────────────┤ │ │ │ LIVE AUDIO INPUT | │ │ │ │ ▼ │ │ ┌─────────────┐ 1. WEBSOCKET CONNECTION │ │ │ PERSISTENT │ ◦ Continuous audio streaming │ │ │ CONNECTION │ ◦ Ultra-low latency pipeline │ │ └─────────────┘ ◦ Real-time processing │ │ │ │ │ ▼ │ │ ┌─────────────┐ 2. INSTANT PROCESSING │ │ │ REALTIME │ ◦ Immediate speech recognition │ │ │ AGENTS │ ◦ Live agent reasoning │ │ └─────────────┘ ◦ Real-time tool execution │ │ │ │ │ ▼ │ │ ┌─────────────┐ 3. IMMEDIATE RESPONSE │ │ │ LIVE │ ◦ Real-time audio generation │ │ │ RESPONSE │ ◦ Streaming audio output │ │ └─────────────┘ ◦ Interruption handling │ │ │ │ │ ▼ │ │ INSTANT AUDIO OUTPUT | │ │ │ ↺ CONTINUOUS CONVERSATION LOOP │ └─────────────────────────────────────────────────────────────┘
安装 OpenAI Agents SDK:
pip install openai-agents
设置环境:
cp env.example .env # Edit .env and add your OpenAI API key
运行基本实时代理:
python agent.py
开始对话:代理将实时回应。试试以下指令:
根据官方指南:
get_weather(city): Simple weather informationbook_appointment(date, time, service):基础预约工具根据官方指南:
from agents.realtime import RealtimeAgent agent = RealtimeAgent( name="Assistant", instructions="You are a helpful voice assistant...", tools=[get_weather, book_appointment], handoffs=[realtime_handoff(billing_agent)] )
from agents.realtime import RealtimeRunner runner = RealtimeRunner( starting_agent=agent, config={ "model_settings": { "model_name": "gpt-4o-realtime-preview", "voice": "alloy", "modalities": ["text", "audio"] } } )
session = await runner.run() async with session: async for event in session: if event.type == "response.audio_transcript.done": print(f"Assistant: {event.transcript}")
来自官方指南:
| 特性 | 传统语音 | 实时语音 |
|---|---|---|
| 延迟 | 2-5秒 | <500毫秒 |
| 连接 | 请求/响应 | 持久WebSocket |
| 打断 | 有限 | 自然处理 |
| 音频处理 | 批量 | 流式 |
| 工具执行 | 分轮次 | 实时 |
| 对话流程 | 结构化 | 自然 |
| API | REST端点 | WebSocket事件 |
根据指南文档,实时防护措施包括:
response.audio.delta, response.audio.doneresponse.audio_transcript.done, input_audio_transcription.completedresponse.function_call_arguments.donesession.created, session.updated, response.doneerror, guardrail_trippedopenai-agents>=1.0.0: OpenAI Agents SDK with realtime supportpython-dotenv>=1.0.0: Environment variable managementgpt-4o-realtime-preview模型"model_settings": { "model_name": "gpt-4o-realtime-preview", # Realtime model "voice": "alloy", # Voice selection "modalities": ["text", "audio"], # Supported modalities "input_audio_format": "pcm16", # Audio input format "output_audio_format": "pcm16" # Audio output format }
"turn_detection": { "type": "server_vad", # Voice activity detection "threshold": 0.5, # Detection sensitivity (0.0-1.0) "prefix_padding_ms": 300, # Audio padding before speech "silence_duration_ms": 200 # Silence to detect turn end }
"input_audio_transcription": { "model": "whisper-1", # Transcription model "language": "en", # Language preference "prompt": "Custom prompt..." # Domain-specific terms }
guardrail_tripped事件,而非抛出异常@output_guardrail def sensitive_data_guardrail(ctx, agent, output: str) -> GuardrailFunctionOutput: if contains_sensitive_data(output): return GuardrailFunctionOutput( tripwire_triggered=True, output_info="Blocked sensitive data" ) return GuardrailFunctionOutput(tripwire_triggered=False)
正如官方文档所述,实时代理目前处于Beta阶段。请注意:
gpt-4o-realtime-preview模型掌握实时语音代理后:
免责声明:
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。