在 TEN Agent 中集成 OpenAI Realtime 多模态大模型:openai_mllm_python 扩展实战指南

发布时间:2026/9/24 17:21:40

在 TEN Agent 中集成 OpenAI Realtime 多模态大模型:openai_mllm_python 扩展实战指南 人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载本指南以 TEN-framework 仓库中的openai_mllm_python扩展为核心讲解如何在 TEN 智能体应用TEN Agent中接入 OpenAI Realtime 多模态模型实现低延迟的语音到语音voice-to-voice对话、文本处理与工具Function Call集成。读完本文你将掌握该扩展的全部配置项含义、pcm_frame等消息协议、Azure OpenAI 接入方式以及它在真实语音助手示例图中的调用链路与底层 WebSocket 实现原理。扩展概览把 OpenAI Realtime 塞进 TEN 图Graphopenai_mllm_python是位于 ai_agents/agents/ten_packages/extension/openai_mllm_python 下的一个 TEN 扩展extension其核心能力是OpenAI 多模态Multimodal集成借助 GPT Realtime 系列模型如gpt-4o-realtime-preview、虚拟模型名gpt-realtime实现语音到语音的实时对话同时支持纯文本处理高度可配置API Key、模型、提示词prompt、temperature、voice 等均可通过 property 配置异步队列处理基于 asyncio 的异步消息循环支持实时消息处理、中断interrupt、任务取消与优先级控制工具Tool集成扩展实现了LLMToolMetadata注册与 Function Call 回调可接入外部工具如天气查询当前仓库中的工具支持已就绪README 中以注释形式保留了图像识别类工具支持的位置。该扩展在 manifest.json 中声明为type: extension、name: openai_mllm_python、版本0.2.2依赖ten_runtime_python0.11与ten_ai_base0.7两个系统包并引入了ten_ai_base的mllm-interface.json接口定义因此它本质上是一个标准的 TENMLLM 类扩展——凡是符合 mllm 接口的上下游扩展ASR、LLM、TTS、消息收集器等都可以与它协同工作。配置项全解析从 manifest 到 property该扩展的 API 定义类型声明位于 manifest.json 的api.property.properties默认值位于 property.json实际运行时在 extension.py 的OpenAIRealtimeConfigpydantic 模型中被解析。核心属性表Property类型默认值说明api_keystring${env:OPENAI_API_KEY}用于 OpenAI 认证的 API Key支持从环境变量读取为空时扩展会在on_init直接报错见 extension.pybase_urlstringwss://api.openai.comWebSocket 服务地址OpenAI Realtime 走 WSS 协议pathstring/v1/realtimeWebSocket 路径最终连接 URL 为base_url pathmodelstringgpt-realtime虚拟模型名模型标识如gpt-4o-realtime-preview若不指定 vendor 且 URL 中无model参数会自动拼接?modelmodellanguagestringen模型回复及输入转写使用的语言如en-US、zh-CN会透传给input_audio_transcription.languagepromptstring空字符串发送给模型的默认系统提示词映射为 Realtime 会话的instructionstemperaturefloat320.9采样温度值越高随机性越强默认值见 property.jsonmax_tokensint322048生成的最大 token 数voicestringalloy模型说话音色如alloy、echo、fable、nova、onyx、shimmer等枚举定义见 struct.py 的Voicesserver_vadbooltrue是否启用 OpenAI 服务端 VAD语音活动检测代码默认Trueextension.pyaudio_outbooltrue是否输出音频为false时会话仅保留textmodalityinput_transcriptbool—是否开启输入转写接口层面保留sample_rateint3224000输入/输出音频采样率代码中同时用于input_audio_sample_rate与synthesize_audio_sample_ratevad_typestringserver_vadVAD 类型server_vad或semantic_vad语义 VADvad_eagernessstringauto语义 VAD 的敏感度low/medium/high/autovad_thresholdfloat320.5server VAD 的判定阈值vad_prefix_padding_msint32300server VAD 语音开始前的前置填充毫秒数vad_silence_duration_msint32500server VAD 判定语音结束所需的静音时长毫秒vendorstring空供应商标识azure表示 Azure OpenAI空表示标准 OpenAIdumpboolfalse是否开启音频 dump 用于调试dump_path指定落盘位置注README 的属性表中出现的dump在代码中对应dump: bool False与dump_path: str extension.pymanifest 的api.property中暂未列出配置时按代码实现为准。底层默认值与语义细节配置在on_init阶段通过ten_env.get_property_to_json(None)整体读取并由 pydantic 的OpenAIRealtimeConfig.model_validate_json校验extension.py类型不符会直接抛错vad_type二选一server_vad时构造ServerVADUpdateParams携带threshold、prefix_padding_ms、silence_duration_mssemantic_vad时构造SemanticVADUpdateParams仅携带eagerness二者均通过session.update下发给模型extension.py若关闭audio_out则modalities被设为[text]只做纯文本对话extension.py。消息协议数据进、数据出与命令README 将该扩展的对外消息划分为四类下面逐一结合源码说明。Data Out文本输出NamePropertyType说明text_datatextstring输出的文本数据在代码层面扩展通过send_server_output_text(MLLMServerOutputTranscript(...))发送增量finalFalse与最终finalTrue的转写/文本并通过send_server_input_transcript上送用户输入转写均携带session_id元数据见 extension.py。Command OutflushName说明flush刷新当前状态后的响应flush语义由消息协议层定义用于在状态被刷新如被新语音打断后通知下游恢复输出。代码中对“中断”的处理体现在InputAudioBufferSpeechStarted分支当服务端检测到新的语音开始扩展会发送MLLMServerInterruptsend_server_interrupted并把被截断的文本标记为[interrupted]后以finalTrue发送同时把该response_id记入flushed集合以丢弃后续过期增量extension.py。Audio Frame In / Out方向Name说明入pcm_frame输入给语音处理的音频帧出pcm_frame语音处理后的音频帧输出音频帧是原始 PCM 数据send_audio直接把AudioFrame的缓冲区frame.get_buf()交给连接层连接层按PCM16、24kHz、单声道、小端序编码为 base64 后封装为input_audio_buffer.append事件发送connection.py服务端返回的response.audio.deltabase64 音频则在扩展中被解码为原始字节经send_server_output_audio_data输出为pcm_frameextension.py。Azure OpenAI 接入README 明确给出该扩展对 Azure OpenAI Realtime 服务的支持配置示例如下{ base_url: wss://xxx.openai.azure.com, path: /openai/realtime?api-versionxxxdeploymentxxx, api_key: xxx, model: gpt-4o-realtime-preview, vendor: azure }代码层面connection.py的区别在于标准 OpenAI使用aiohttp.BasicAuth(, api_key)做 Basic 认证并附加OpenAI-Beta: realtimev1请求头Azure认证头改为api-key: api_key不再需要OpenAI-Beta头Azure 的model、api-version、deployment全部内嵌在path的 URL 查询参数中因此连接层在 URL 已含model时不再自动追加?modelconnection.py。在真实 TEN 应用中配置该扩展voice-assistant-realtime示例是一个可直接对照的完整应用其图定义位于 ai_agents/agents/examples/voice-assistant-realtime/tenapp/property.json。其中扩展节点名为v2vaddon 指向openai_mllm_python{ type: extension, name: v2v, addon: openai_mllm_python, property: { api_key: ${env:OPENAI_API_KEY}, temperature: 0.9, model: gpt-realtime, max_tokens: 2048, voice: alloy, language: en, vad_type: semantic_vad, vad_eagerness: auto, vad_threshold: 0.5, vad_prefix_padding_ms: 300, vad_silence_duration_ms: 500 } }图中消息流向与扩展的消息协议一一对应agora_rtc的pcm_frame远端用户语音经streamid_adapter转发到v2vaudio_frame入向v2v输出的pcm_frame音频帧回流到agora_rtc发布给用户v2v的mllm_server_input_transcript、mllm_server_output_transcript、mllm_server_session_ready、mllm_server_interrupted、mllm_server_function_call等 Data 消息连接到main_controlweatherapi_tool_python通过tool_register命令向main_control注册工具从而打通“模型调用工具→Function Call 回调”的链路。使用前需在环境中配置OPENAI_API_KEYproperty 通过${env:OPENAI_API_KEY}引用必要时同时配置AGORA_APP_ID等声网参数。实现原理异步 WebSocket 消息循环整个扩展的运行核心是start_connection里的异步消息循环extension.py配合RealtimeApiConnection与struct.py的消息模型完整复刻了 OpenAI Realtime API 的客户端-服务端事件协议建连RealtimeApiConnection.connect()用 aiohttp 打开 WSS按 vendor 选择认证方式会话初始化收到session.created后调用_update_session()下发session.update含instructions、model、tools、tool_choice、turn_detection、voice/modalities、input_audio_transcription等收到session.updated后向上游广播MLLMServerSessionReady上行send_audioPCM 音频、send_client_message_itemuser/assistant 文本消息映射为conversation.item.create、send_client_create_responseresponse.create、send_client_register_tool工具注册后触发_update_session重新下发 tools、send_client_function_call_output工具结果回填映射为conversation.item.create的function_call_output下行对response.audio.delta解码为音频帧输出对response.audio_transcript.delta/response.text.delta增量转发为文本输出对conversation.item.input_audio_transcription.*转发用户输入转写对response.function_call_arguments.done触发_handle_tool_call回调中断与打断input_audio_buffer.speech_started时发送MLLMServerInterrupt并截断当前输出[interrupted]标记 flushed集合去重speech_stopped时按audio_end_ms校准相对时间戳断线重连消息循环异常退出后调用_handle_reconnect()先关闭旧连接若未处于stopped状态则延时 1 秒后指数退避重连extension.py消息模型struct.py 用 dataclass 定义了全部 20 种客户端-服务端事件EventType枚举、Session、Response、Usage、ResponseAudioDelta等parse_server_message/parse_client_message按type字段动态反序列化to_json序列化时自动剔除None字段与 Realtime API 的 JSON 协议对齐。依赖方面该扩展运行需要pydantic、pydub0.25.1、aiohttp见 requirements.txtPython 版本要求3.10见 pyproject.toml。小结openai_mllm_python以约 500 行的扩展逻辑 900 行的消息协议层把 OpenAI Realtime 多模态能力完整封装成 TEN 标准 MLLM 扩展既可通过property.json灵活调整模型、音色、VAD 与转写语言也能通过pcm_frame、text_data、flush等消息无缝接入声网 RTC、消息收集器与外部工具。从源码结构看它的中断处理、增量转写与指数退避重连机制使其适合作为实时语音助手图graph中“大脑”节点的生产级参考实现。下一步可以对照 voice-assistant-realtime 示例 直接运行体验或参考 voice-assistant-companion 将其接入更复杂的伴生型语音助手场景。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐Semantic Kernel Python 实时语音多模态实战基于 OpenAI/Azure OpenAI Realtime API 的 WebSocket 与 WebRTC 语音 AgentSemantic Kernel Python 实时语音多模态实战基于 OpenAI/Azure OpenAI Realtime API 的 WebSocket人工智能大模型AI AgentAgent 框架多智能体RAGTEN Framework 集成 StepFun 实时语音模型stepfun-demo 语音 Agent 演示项目实战指南TEN Framework 集成 StepFun 实时语音模型stepfun demo 语音 Agent 演示项目实战指南 本文以 ai_agents/age人工智能AI Agent多模态语音AI 应用QbotAI 量化投研平台全解析——从策略开发、回测到自动化交易的本地部署实战指南QbotAI 量化投研平台全解析——从策略开发、回测到自动化交易的本地部署实战指南 Qbot 是一个以 Python 为核心、面向 AI 的自动化量化投资平台人工智能AI Agent多模态语音AI 应用上一篇为现代化改造项目定制 Copilot 指令doc-and-modernize 技能与 .github/copilot-instructions.md 模板实战指南下一篇Prefect callables 模块深度解析函数签名内省、参数绑定与 JSON Schema 生成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/24 18:21:44

Spring Boot后端项目部署实战:从解压到联调的全流程指南

简介:期刊出版数字化要求后端系统高效组织数据与业务逻辑。这份资源正是一套面向初中级开发者的期刊管理后端实现,适合用来学习API设计、数据库建模与权限控制。资源围绕期刊、文章、作者、审稿人等核心实体,以Python提供app入口、rpc远程调用…

2026/9/24 18:21:44

AI创业公司云平台选型指南:算力、成本与防锁定策略

这两年我经常被VC朋友问同一个问题:手上投了十几家AI公司,每家都在问云平台怎么选,能不能直接给个清单?说实话,这个问题没有标准答案,但问的人多了,我发现大家踩过的坑高度重合。今天这篇就从技…

2026/9/24 18:21:44

Win11网线直连传大文件:“输入网络凭据”问题全解析

1. 为什么网线直连才是最稳的文件传输方式先说个场景:两台电脑都需要互传大量文件,一个大活儿是几十 GB 的设计稿、视频素材或者虚拟机镜像。用 U 盘倒腾来回拔插累得够呛,走微信、网盘传大文件要么限速要么压缩画质,内网 WiFi 传…

2026/9/24 18:21:44

从COCO到YOLO:雨雪路面数据集训练全流程与避坑指南

简介:雨雪天气路面状况识别是自动驾驶与智能交通中的常见难点,这份数据集专门面向结冰路面、雪地、下雨湿滑、干燥路面四类场景,图片均为原始拍摄图像,并使用COCO格式进行目标标记,可直接用于目标检测、语义分割等模型…

2026/9/24 18:16:44

Java火车票系统实战:解决超卖、事务隔离与订单唯一性

简介:这是一套面向Java初学者与数据库课程实践者的火车票售票系统完整源码,基于Java Swing界面与Access数据库(.mdb文件)实现,解决小型票务场景下的车次管理、余票查询、在线售票与退票等核心业务需求。资源共89个文件…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码