尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

openai-agents-python 实时智能体快速入门:基于 WebSocket 的服务端低延迟语音会话实战指南

openai-agents-python 实时智能体快速入门:基于 WebSocket 的服务端低延迟语音会话实战指南 openai-agents-python 实时智能体快速入门基于 WebSocket 的服务端低延迟语音会话实战指南【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python导读本指南面向 openai-agents-pythonOpenAI Agents SDK开发者讲解如何在 Python 服务端构建基于 OpenAI Realtime API 的低延迟实时语音智能体。你将掌握RealtimeAgent、RealtimeRunner、RealtimeSession三个核心组件的完整用法学会配置嵌套式audio.input/audio.output会话参数、驱动事件循环消费音频与历史记录并了解 API 密钥、自定义 WebSocket 端点、SIP 电话接入等连接选项。读完本文你可以独立跑通一个由 Python 管理的服务端实时语音会话并在此基础上扩展工具调用、审批与守卫guardrails等能力。适用范围Python SDK 的服务端边界在开始之前需要明确 Python SDK 的能力边界它不提供浏览器 WebRTC 传输。本文以及 实时传输指南只覆盖两类由 Python 管理的实时路径服务端 WebSocketRealtimeRunner默认使用的标准 Python 路径适合服务端编排、工具执行、审批流程与电话集成SIP / 电话接入通过call_id挂接到已有实时通话的电信路径。浏览器端 WebRTC 属于另一平台话题不在本 SDK 范围内。若你的前端是 WebRTC 客户端需要自行处理客户端侧流程与事件模型。前提条件Python 3.10 或更高版本OpenAI API 密钥基本熟悉 OpenAI Agents SDK了解Agent、Runner等基础概念即可。安装 SDK如果尚未安装使用 pip 安装pip install openai-agents安装后实时相关模块位于agents.realtime包内源码对应仓库目录 src/agents/realtime其公开导出包含RealtimeAgent、RealtimeRunner、RealtimeSession以及底层模型与事件类型。创建服务端实时会话四步走实时会话的搭建分为四步导入组件、定义起始智能体、配置运行器、启动会话并发送输入。下面逐一展开。1. 导入实时组件import asyncio from agents.realtime import RealtimeAgent, RealtimeRunner2. 定义起始智能体RealtimeAgent是面向实时语音场景的专用智能体类型比普通Agent更收敛agent RealtimeAgent( nameAssistant, instructionsYou are a helpful voice assistant. Keep responses short and conversational., )从 agent.py 的源码可以看出它的约束model、modelSettings、outputType、toolUseBehavior均不受支持所有RealtimeAgent在同一个RealtimeSession内由同一个模型处理且实时智能体不支持结构化输出voice可以在智能体级配置但一旦会话中已有智能体发声就不能再更改。instructions可以是字符串也可以是返回字符串的可调用函数支持异步用于动态生成系统提示词。3. 配置运行器RealtimeRunner是实时场景下的Runner等价物。从 runner.py 看它会为整个运行维护与底层模型的持久连接并自动处理多轮对话会话负责本地历史副本、工具执行、守卫运行以及智能体间交接handoff。若未显式传入model默认使用OpenAIRealtimeWebSocketModel即服务端 WebSocket 实现。对新代码建议采用嵌套的audio.input/audio.output会话设置结构对新实时智能体模型从gpt-realtime-2.1开始runner RealtimeRunner( starting_agentagent, config{ model_settings: { model_name: gpt-realtime-2.1, audio: { input: { format: pcm16, transcription: {model: gpt-4o-mini-transcribe}, turn_detection: { type: semantic_vad, interrupt_response: True, }, }, output: { format: pcm16, voice: ash, }, }, } }, )参数语义与可选值依据 config.pymodel_name实时模型名。源码中RealtimeModelName列出的可选值包括gpt-realtime、gpt-realtime-1.5、gpt-realtime-2、gpt-realtime-2.1、gpt-realtime-2.1-mini、gpt-realtime-mini系列以及gpt-4o-realtime-preview系列等同时允许传入任意字符串以适配新模型。audio.input.format/audio.output.format音频格式RealtimeAudioFormat支持pcm16、g711_ulaw、g711_alaw等。PCM16 是通用的原始音频格式适合自建播放管线G.711 常用于电话场景。audio.input.transcription输入音频转录配置。model可选gpt-transcribe、gpt-live-transcribe、gpt-4o-transcribe、gpt-4o-mini-transcribe、gpt-realtime-whisper、whisper-1等还支持language、prompt、keywords、languages、delay等可选字段。其中delay仅在gpt-realtime-whisper下受当前 SDK 固定的 OpenAI 客户端版本支持取值为minimal/low/medium/high/xhigh。audio.input.noise_reduction输入降噪type可选near_field近场或far_field远场。audio.input.turn_detection自动轮次检测type可选semantic_vad语义 VAD或server_vad服务器 VADinterrupt_response控制是否允许打断助手的当前回复此外还支持create_response、eagernessauto/low/medium/high、prefix_padding_ms、silence_duration_ms、threshold、idle_timeout_ms、model_version等。置为None可完全禁用自动轮次检测。audio.output.voice输出音色RealtimeVoice可以是字符串、自定义音色对象{id: ...}或映射示例中使用的ash为内置音色之一。audio.output.speed回复语速浮点数。旧的扁平别名仍然可用input_audio_format、output_audio_format、input_audio_transcription、input_audio_noise_reduction、turn_detection等扁平字段在RealtimeSessionModelSettings中依旧存在并继续生效但新代码推荐使用嵌套的audio结构二者不可混用时以嵌套结构为准。4. 启动会话并发送输入runner.run()返回一个RealtimeSession进入会话上下文async with时连接才真正建立async def main() - None: session await runner.run() async with session: await session.send_message(Say hello in one short sentence.) async for event in session: if event.type audio: # Forward or play event.audio.data. pass elif event.type history_added: print(event.item) elif event.type agent_end: # One assistant turn finished. break elif event.type error: print(fError: {event.error}) if __name__ __main__: asyncio.run(main())会话的输入方式session.send_message()接受纯字符串或结构化实时消息RealtimeUserInputMessage可携带input_text与input_image内容是实时对话中传入图片的主要途径session.send_audio(audio_bytes, commitFalse)发送原始音频块当服务端轮次检测被禁用时可用commitTrue标记音频轮次的结束边界低层控制通过session.model.send_event(...)可直接发送input_audio_buffer.commit、response.create、session.update等 Realtime API 客户端事件详见 实时智能体指南 的手动轮次控制小节。事件循环如何工作RealtimeSession实现异步迭代器见 session.py 的__aiter__从内部事件队列持续产出RealtimeSessionEvent。常用事件类型定义在 events.pyaudio、audio_end、audio_interrupted音频流输出、结束与被中断被打断时你的播放器应立即停止本地播放agent_start、agent_end智能体回合开始与结束示例中以agent_end作为一个助手回合完成的退出条件tool_start、tool_end、tool_approval_required工具调用与人工审批事件handoff智能体交接history_added、history_updated本地历史变更通常是对 UI 状态最有用的两类事件其item/history字段为RealtimeItem对象用户消息、助手消息、工具调用等guardrail_tripped输出守卫触发error错误事件event.error携带错误详情raw_model_event底层模型层原始事件透传可用于用量统计等高级需求。本快速入门未包含的内容麦克风采集与扬声器播放代码本指南只覆盖会话侧逻辑采集/播放需自行实现。可参考 examples/realtime 中的实时示例examples/realtime/app核心演示应用含浏览器端 audio worklet 采集与播放examples/realtime/cliCLI 演示examples/realtime/twilioTwilio Media Streams 电话流示例。SIP / 电话接入流程见 实时传输 与 实时智能体指南的 SIP 小节。关键设置基本会话跑通后优先调优的参数基础会话工作后大多数人接下来会用到的设置包括层级设置项作用模型model_name选择实时模型新项目从gpt-realtime-2.1起步音频audio.input.format/audio.output.format输入/输出音频编码格式音频audio.input.transcription输入音频转写模型与参数音频audio.input.noise_reduction输入降噪模式near_field/far_field音频audio.input.turn_detection自动轮次检测semantic_vad/server_vad音频audio.output.voice输出音色会话tool_choice、prompt、tracing工具选择策略、提示词对象、请求追踪运行async_tool_calls函数工具是否异步执行默认True运行tool_execution.pre_approval_tool_input_guardrails是否在发出审批事件前先运行工具输入守卫默认False运行guardrails_settings.debounce_text_length输出守卫防抖的字符阈值默认100累积到 1x/2x/3x 倍数时才触发检查运行tool_error_formatter返回给模型的工具错误信息格式化回调完整类型化配置面见 config.py 中的RealtimeRunConfig与RealtimeSessionModelSettings其中RealtimeRunConfig还包含output_guardrails输出守卫列表与tracing_disabled是否禁用本次运行的追踪。手动轮次控制当你需要完全掌控何时让模型响应时可关闭自动轮次检测改用底层session.update将turn_detection置为null→input_audio_buffer.commit→response.create的低层流程详见 实时智能体指南。该模式适用于检测到用户输入后才决定响应、需要在触发响应前对输入进行门控、或需要为带外响应定制提示词等场景。连接选项配置 API 密钥方式一环境变量export OPENAI_API_KEYyour-api-key-here方式二启动会话时直接传入session await runner.run(model_config{api_key: your-api-key})api_key也支持传入可调用对象返回密钥的函数便于从密钥管理服务动态获取见 model.py 中RealtimeModelConfig的api_key字段定义。未设置时OpenAI 实时模型会回退到OPENAI_API_KEY环境变量。model_config支持的全部选项RealtimeModelConfig定义于 model.py还支持url自定义 WebSocket 端点如 Azure OpenAI 的 GA Realtime 端点headers自定义请求头。注意一旦显式传入headersSDK 将不再自动注入Authorization头认证完全由你负责initial_model_settings连接时使用的初始模型设置call_id挂接到已有实时通话而不是新建会话。传入后传输层使用call_id查询参数连接而非模型名本仓库内置的挂接示例是 SIP通过 Realtime Calls APIplayback_trackerRealtimePlaybackTracker实例用于向模型报告用户实际听到的音频量。默认实现假设音频即时、按实时速度播放在电话或远端播放等延迟场景下应在播放时调用on_play_bytes/on_play_ms上报进度使中断处理能按真实播放位置截断回复见 model.py 中RealtimePlaybackTracker的源码。连接 Azure OpenAI连接 Azure OpenAI 时将model_config[url]设置为 GA Realtime 端点 URL并显式传入请求头session await runner.run( model_config{ url: wss://your-resource.openai.azure.com/openai/v1/realtime?modeldeployment-name, headers: {api-key: your-azure-api-key}, } )使用令牌认证时session await runner.run( model_config{ url: wss://your-resource.openai.azure.com/openai/v1/realtime?modeldeployment-name, headers: {authorization: fBearer {token}}, } )务必避免与实时智能体一起使用旧版 beta 路径/openai/realtime?api-version...详见 实时智能体指南的低层访问与自定义端点小节。底层 WebSocket 调优当需要调优底层服务端 WebSocket 连接时可显式构造OpenAIRealtimeWebSocketModel并传入transport_configfrom agents.realtime import ( OpenAIRealtimeWebSocketModel, RealtimeAgent, RealtimeRunner, ) agent RealtimeAgent(nameAssistant) model OpenAIRealtimeWebSocketModel( transport_config{ ping_interval: 20.0, ping_timeout: 60.0, handshake_timeout: 30.0, max_size: 8 * 1024 * 1024, } ) runner RealtimeRunner(starting_agentagent, modelmodel)支持的选项详见 实时传输指南ping_interval客户端保活 ping 间隔秒设为None可禁用ping_timeout断开前等待 pong 的时间秒设为None可容忍延迟 ponghandshake_timeout等待初始握手完成的时间秒max_size接收 WebSocket 消息的最大字节数SDK 默认None不限制需要限制单条消息内存占用时显式设置。注意这些选项配置的是客户端连接本身端点、认证、通话挂接与播放设置仍通过RealtimeModelConfig完成。从快速入门走向生产下一步选择传输方式在服务端 WebSocket 与 SIP 之间做选择阅读 实时传输指南。默认 Python 路径下RealtimeRunner会使用OpenAIRealtimeWebSocketModel电信场景下通过RealtimeRunner(..., modelOpenAIRealtimeSIPModel())并以model_config{call_id: ...}挂接通话完整流程见 examples/realtime/twilio_sip/server.py。深入生命周期与高级能力生命周期、结构化输入、审批、交接handoff、守卫与低层控制阅读 实时智能体指南。函数工具、tool_approval_requiredsession.approve_tool_call()审批循环、realtime_handoff交接、输出守卫的防抖检查触发时发guardrail_tripped并中断当前响应都可以在实时会话中直接使用。参考完整示例浏览 examples/realtime 下的 app、cli、twilio、twilio_sip 四个示例其中 examples/realtime/app/server.py 展示了服务端审批循环与结构化input_image消息转发是理解Python 服务端编排 实时语音生产形态的最佳起点。【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表