
人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载视频语音助手Voice Assistant with Video是 TEN Framework 官方提供的一个具备视觉感知能力的对话式语音 AI 示例在经典「ASR → LLM → TTS」语音链路之上额外接入 RTC 视频帧与视觉分析工具让智能体既能听、能说还能看。本文以 ai_agents/agents/examples/voice-assistant-video/README.md 为主线完整讲解从环境安装、一键启动到图Graph架构、主控扩展源码实现的全部细节读者将掌握该示例的运行方法、图编排原理以及基于事件驱动模型二次开发视频语音 Agent 的具体路径。示例定位一个带视觉能力的语音 Agentvoice-assistant-video是 TEN Framework 的 AI Agent 示例集ai_agents/agents/examples中面向视频交互场景的参考实现。相比纯语音示例它在会话中引入了视频帧的采集与分析通过 Agora RTC 订阅远端视频流将视频帧送给视觉分析工具vision_analyze_tool_python再借助一个独立的视觉 LLM 实例vllm完成图像内容理解使 Agent 具备看图说话的能力。整个示例以 TEN Framework 的Graph预定义图为核心组织方式所有能力RTC 接入、ASR、LLM、TTS、视觉分析、主控逻辑、转写收集都被抽象为 extension 节点通过 property 配置完成节点间的数据流编排无需修改任何运行时代码即可调整链路。快速开始三步跑起视频语音助手官方 README 给出的启动流程非常简洁共三步。第一步安装依赖task install该命令通过仓库内的 Taskfile.yml 定义的任务链完成四件事子任务目录实际执行install-tenapp./tenapptman install按 manifest.json 声明安装全部 TEN 扩展依赖install-tenapp-python-deps./tenapp执行 scripts/install_python_deps.sh安装 Python 侧依赖install-frontend../../playgroundbun install --verbose安装前端 playground 的依赖build-api-server../../servergo mod tidy go mod download go build -o bin/api main.go编译 server 目录下的 API 服务执行task install前需要确保本机已具备Task任务执行器、tmanTEN 包管理器安装方式见 tools/tman/install_tman.sh、bun前端依赖管理与Go工具链。第二步启动应用task runtask run会以并行方式拉起三个进程见 Taskfile.yml 中run任务的depsrun-gd-server在./tenapp下执行tman designer启动 TMAN Designer 的 HTTP 开发服务run-frontend在playground目录执行bun run dev启动 Web 前端run-api-server执行./bin/api -tenapp_dir{{.PWD}}/tenapp以 tenapp 目录为参数启动 API 服务即上一步编译出的 Go 二进制。其中tenapp目录下的 main.go 是 TEN 应用入口它通过ten.NewApp创建应用实例并支持通过-property参数显式指定property.json路径未指定时使用默认 property.json随后appInstance.Run(true)阻塞运行。第三步访问应用启动完成后示例会开放三个端口服务地址说明前端界面http://localhost:3000playground 提供的 Web 交互页面负责连接 RTC、展示对话与视频API 服务http://localhost:8080Go 实现的 HTTP API供前端调用TMAN Designerhttp://localhost:49483TEN 图可视化设计与调试工具环境变量运行前必须准备Taskfile.yml 第 3 行通过dotenv: [../../../.env]加载环境变量文件因此使用前应在对应位置即ai_agents目录下的.env配置第三方服务密钥。结合 property.json 中${env:...}的引用本示例需要以下变量环境变量用途默认/取值示例AGORA_APP_IDAgora RTC 应用 ID必填无默认值AGORA_APP_CERTIFICATEAgora 证书用于生成 token${env:...|}语法表示可为空空字符串DEEPGRAM_API_KEYDeepgram ASR 密钥必填无默认值OPENAI_API_KEYOpenAI 兼容 LLM 密钥必填无默认值OPENAI_MODELLLM 模型名无默认值OPENAI_PROXY_URL可选代理地址空字符串ELEVENLABS_TTS_KEYElevenLabs TTS 密钥必填无默认值需要注意的是本示例在代码与配置层面只负责读取这些密钥并转发给对应扩展密钥本身的获取与费用由各第三方服务商负责属于运行前提而非仓库内容。核心架构预定义图Predefined Graph编排示例的精华在于 property.json 中名为voice_assistant的预定义图。它声明了 9 个 extension 节点与它们之间的数据连接理解这张图就等于理解了整个示例的工作方式。节点Nodes一览节点名Addon作用agora_rtcagora_rtc音视频实时通信接入订阅远端音视频、发布本地音频并上报用户加入/离开事件streamid_adapterstreamid_adapter在 RTC 多流与 ASR 单流之间做流 ID 适配sttdeepgram_asr_python语音识别模型nova-3语言en-USllmopenai_llm2_python主对话 LLM负责自然语言理解与回复生成ttselevenlabs_tts2_python语音合成输出pcm_16000格式main_controlmain_python整个 Agent 的主控逻辑会话状态、打断、转写分发message_collectormessage_collector2收集并转发对话转写/消息数据vision_tool_pythonvision_analyze_tool_python视觉分析工具接收视频帧向 LLM 注册 toolvllmopenai_llm2_python第二个 LLM 实例专用于视觉内容理解由vision_tool_python触发其中主控扩展main_python的自述文档位于 ten_packages/extension/main_python/README.md是理解本示例业务逻辑的第一手资料。关键数据流Connections图中连接关系定义了各能力的协作方式按数据方向可分为三类1音频上行用户说话 → 识别agora_rtc (audio_frame: pcm_frame) → streamid_adapter → stt (audio_frame: pcm_frame) stt (data: asr_result) → main_control (data: asr_result)远端用户音频经 RTC 采集、流适配后送入 Deepgram 做语音识别识别结果含中间/最终结果以asr_result数据流进入主控扩展。2音频下行回复合成 → 播放main_control → tts (tts_text_input) [通过 send_data 命令直发] tts (audio_frame: pcm_frame) → agora_rtc (audio_frame 的 source)主控扩展把 LLM 回复按句子切分后通过_send_to_tts发送给 TTS 扩展见下文源码合成的 PCM 音频再回流到 RTC 发布给远端用户。3视频上行视觉感知agora_rtc (video_frame: video_frame) → vision_tool_python vision_tool_python (cmd: chat_completion) → vllmRTC 订阅到的视频帧被送入视觉工具视觉工具以 tool 形式向 LLM 注册能力main_control的tool_register命令来源即vision_tool_python当 LLM 需要看图时通过chat_completion命令调用vllm完成多模态推理。4用户会话与消息agora_rtc (cmd: on_user_joined / on_user_left) → main_control main_control → message_collector (data: message) [转写/消息下行] message_collector (data: data) → agora_rtc (data 的 source) [发回前端展示]LLM 双实例的设计意图图中存在llm与vllm两个openai_llm2_python实例llm承载主对话带greeting、max_memory_length: 10等记忆参数vllm仅作为视觉推理通道由视觉工具按需触发。这种对话推理与视觉推理分离的编排方式是本示例在工程上区别于纯语音 Agent 的关键设计。主控扩展 main_python 源码级解析main_controladdon 为main_python是整个 Agent 的大脑采用事件驱动 异步队列的架构核心代码集中在 ten_packages/extension/main_python 下。1. 事件模型agent/events.pyevents.py 定义了 5 种 Agent 事件统一继承自AgentEventBase事件类型触发来源UserJoinedEventcmdRTC 用户加入UserLeftEventcmdRTC 用户离开ToolRegisterEventcmd视觉工具注册携带LLMToolMetadata与来源扩展名ASRResultEventdataSTT 识别结果text/final/metadataLLMResponseEventdataLLM 流式回复delta/text/is_final/type2. Agent 核心agent/agent.pyagent.py 中的Agent类提供三块核心能力事件注册与分发on()方法同时支持agent.on(EventType, handler)与agent.on(EventType)两种注册方式_dispatch()将事件按类型顺序派发给已注册处理器双队列异步消费_asr_queue与_llm_queue两个asyncio.Queue分别缓存 ASR 与 LLM 事件由_consume_asr/_consume_llm两个常驻协程消费保证事件处理有序LLM 消费时通过asyncio.create_task包装处理器便于在打断时取消进行中的任务LLM 控制register_llm_tool()向 LLM 注册工具、queue_llm_input()将用户文本入队、flush_llm()清空队列并取消活动任务、stop()完成优雅停机。3. 主控扩展extension.pyextension.py 中的MainControlExtension继承AsyncExtension在on_init中加载配置并自动扫描带agent_event_handler装饰器的方法完成事件绑定decorators.py 通过给方法附加_agent_event_type属性实现标记。其业务逻辑包括问候语首个用户加入_rtc_user_count从 0 变 1且配置了greeting时向 TTS 发送问候语并输出转写。问候语来自 config.py 中的MainControlConfig默认值为Hello, I am your AI assistant.ASR 流式处理非空文本触发_interrupt()打断正在进行的 LLM/TTS 输出提升交互实时性最终结果入队交给 LLMLLM 流式处理与句子切分借助 helper.py 的parse_sentences()按标点中英文逗号、句号、问号、感叹号切分增量文本完整句子立即送 TTS 播报剩余片段缓存等待下一增量——这是实现边说边出低延迟体验的关键打断机制_interrupt()清空句子缓存、flush_llm()中断 LLM 推理并向 TTS 发送tts_flush、向 RTC 发送flush命令保证用户抢话时系统立即停止播报。4. LLM 执行器agent/llm_exec.pyllm_exec.py 的LLMExec负责与 LLM 扩展的完整交互通过AsyncQueue串行处理用户输入以chat_completion命令向llm扩展发起流式请求streamingTruetemperature0.7携带tools列表使用parse_llm_response解析流式响应按LLMResponseMessageDelta / MessageDone / ReasoningDelta / ReasoningDone / ToolCall分派处理工具调用LLMResponseToolCall时根据tool_registry找到注册该工具的来源扩展向其发送tool_call命令再把工具结果以function_call_output消息回填上下文并继续追问 LLM形成完整的 Function Call 循环flush()时通过abort命令携带request_id通知 LLM 侧终止当前请求。5. 直发辅助函数helper.pyhelper.py 提供_send_cmd/_send_cmd_ex/_send_data三个便捷方法通过Loc(, , dest)指定目标扩展即可在不显式建立连接的条件下向图内任意扩展发送命令/数据。源码注释明确指出这类用法包含针对当前图结构的假设假定目标扩展必然存在于图中因此它适用于业务编排扩展通用型扩展应避免使用。运行环境细节与扩展阅读tenapp 启动脚本scripts/start.sh 是 tman 启动 tenapp 时实际执行的脚本它在启动bin/main前配置了三类运行时路径PYTHONPATH指向ten_packages/system/ten_ai_base/interface确保 Python 扩展可导入ten_ai_baseLD_LIBRARY_PATH加载agora_rtc_sdk、agora_rtm、azure_speech_sdk等原生库NODE_PATH指向ten_runtime_nodejs/lib。脚本中注释掉的TEN_ENABLE_PYTHON_DEBUG/TEN_PYTHON_DEBUG_PORT环境变量表明如需调试 Python 扩展可取消注释并配合远程调试器使用。依赖声明manifest.json 是 tenapp 的包清单声明了ten_runtime_go版本 0.11、agora_rtc0.23.9-t1、ten_ai_base0.7等版本化依赖并通过path形式引用仓库内 ten_packages/extension 下的本地扩展ASR/TTS/LLM 全家桶、streamid_adapter、message_collector2、vision_analyze_tool_python等。它同时声明了scripts.start对应start.sh与scripts.build对应install_python_deps.sh。打包发布如需将示例打包发布可执行task release该任务调用 ai_agents/scripts/release.sh 并传入 tenapp 目录路径产出可分发的 TEN 应用包。延伸阅读纯语音无视频版本参考同目录下的 voice-assistant与本示例形成对照前端交互界面源码位于 playgroundAPI 服务源码位于 server想了解图上其他扩展的完整行为可在 ai_agents/ten_packages/extension 中查找对应 addon如vision_analyze_tool_python、deepgram_asr_python、elevenlabs_tts2_python的 manifest 与 README。小结voice-assistant-video是理解 TEN Framework「图编排 事件驱动 Agent」理念的极佳范本三条命令即可启动一套完整的视频语音 Agent通过 property.json 的图配置可以清晰看到音视频上行、回复下行、视觉推理三条数据通路的协作关系而main_python扩展则以「事件 双队列 可取消任务」的方式优雅地解决了流式 ASR/LLM/TTS 协同、句子级低延迟播报与抢话打断等真实场景问题。无论是要快速验证视频语音 Agent 的效果还是以此为模板开发自己的多模态 Agent本示例都是值得从图配置与源码两个层面精读的起点。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐TEN Framework voice-assistant-video 中的 main_python 扩展语音助手核心控制逻辑的架构与实现解析TEN Framework voice assistant video 中的 main_python 扩展语音助手核心控制逻辑的架构与实现解析 导读 main人工智能AI Agent多模态语音AI 应用TEN Framework RTM Transport 示例实战基于 Agora RTC 与 RTM 双通道的语音助手架构TEN Framework RTM Transport 示例实战基于 Agora RTC 与 RTM 双通道的语音助手架构 导读 rtm transport人工智能AI Agent多模态语音AI 应用终极指南如何快速构建多用途语音助手 - TEN-framework实战案例详解终极指南如何快速构建多用途语音助手 TEN framework实战案例详解 想要构建功能强大的语音AI助手吗TEN framework作为开源的对话式语音A人工智能AI Agent多模态语音AI 应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考