进阶 📋 6 个步骤 第 526 / 526 篇

用 TEN Framework 搭实时语音智能体:扩展图、TMAN Designer 可视化调参与打断实操

开源实时多模态语音框架 TEN 实操:docker compose 跑通 Agora RTC 到 Deepgram、OpenAI、ElevenLabs 的链式语音助手,TMAN Designer 画布换模型调提示词,VAD 与 Turn Detection 实现可打断。

2026.10.12· 21 分钟阅读· 约 2564 字· 🎙️ TEN Framework / 🔊 语音智能体

语音智能体的教程大多停在「调 SDK」层面:一行代码接 STT、一行接 TTS,跑通了但黑盒依旧。TEN Framework(TEN-framework/ten-framework,GitHub 一万一千星、长期占据语音方向 Trending)走的是另一条路:把 STT、LLM、TTS、VAD、打断检测全部做成可插拔扩展,用可视化画布 TMAN Designer 拼装、看着连线调参数——你的语音智能体是一张可以打开来看、可以逐个部件替换的图。官方示例覆盖链式语音助手、语音到语音实时助手、说话人分离、唇形同步数字人、SIP 电话、甚至 ESP32 硬件端。本篇按官方 README 的 localhost 快速开始路径,从备齐四把密钥到跑通默认语音助手,再在 TMAN Designer 里换模型、加打断、调提示词,走完一条可复现的路径。

🎯 适合人群:想搞懂语音智能体内部结构、而不只是调包的开发者;要做可打断、低延迟对话助手的团队。前置要求:Docker 与 Docker Compose;Node.js LTS v18;本机 CPU 至少 2 核、内存 4GB 起步。

先理解:扩展图与 TMAN Designer

在 TEN 里,一个语音智能体是一张扩展图(graph):实时音频流经 RTC 通道进来,交给 VAD 与 STT 扩展转成文本,LLM 扩展生成回复,TTS 扩展合成语音回流播放——每个环节是一个独立组件,接口标准化,可以整体替换:Deepgram 换成其他转写服务、ElevenLabs 换成其他合成服务,图的结构不变。官方的 voice-assistant 示例就是这条链式结构;voice-assistant-realtime 示例则改用语音到语音的实时模型,跳过文本中间层。

TMAN Designer 是这套框架的运维面板,跑在 localhost:49483:画布上能看到扩展图的真实拓扑,右键任意扩展开属性面板改密钥与参数,保存即生效;Agent Example UI 在 localhost:3000,是给你说话的界面。改配置、换供应商、调提示词都在这个面板完成,不用碰代码。

许可证与版本先看仓库。TEN 仓库许可证文件非标准单一条款(部分组件另有约定),商用前通读 LICENSE;框架迭代快,本篇按 2026 年 10 月官方 README 书写,端口与目录名以你克隆版本的文档为准。

Step 1:备齐四把密钥

1 四家供应商各管一段
# Agora 控制台创建项目,拿 App ID 与 App Certificate
#   —— 负责实时音频传输(RTC 通道)
# OpenAI API Key      —— LLM 推理
# Deepgram API Key    —— 语音转写(STT,官方要求必配)
# ElevenLabs API Key  —— 语音合成(TTS)

这四家是官方默认示例的组合:Agora 承担浏览器与服务端之间的实时音频流,Deepgram 做转写,OpenAI 做推理,ElevenLabs 做合成。注册流程各家都是控制台自助,新账号普遍有免费额度——跑通演示够用,压测前先把各家的计费规则看清楚。

密钥安全两句话。.env 文件只留在本机,绝不提交进 git;Agora Certificate 泄露等于把你的 RTC 通道送给别人刷时长。四家全部按用量计费,长会话与高频压测是烧钱大户,先设用量告警再开跑。

Step 2:起容器,跑通默认示例

2 六条命令进入对话
git clone https://github.com/TEN-framework/ten-framework.git
cd ten-framework/ai_agents
cp ./.env.example ./.env

# 编辑 .env,填入五项:
#   AGORA_APP_ID=...
#   AGORA_APP_CERTIFICATE=...
#   DEEPGRAM_API_KEY=...
#   OPENAI_API_KEY=...
#   ELEVENLABS_TTS_KEY=...

docker compose up -d
docker exec -it ten_agent_dev bash
# 容器内继续:
cd agents/examples/voice-assistant        # 链式语音助手
# 或 cd agents/examples/voice-assistant-realtime  # 语音到语音
task install    # 装 TEN、Python、前端依赖并构建 Go API 服务,约 5-8 分钟
task run
# 浏览器打开 http://localhost:3000 即语音助手界面

task install 只在初回启动、改依赖或改 Go 源码后需要重跑;纯 Python 层的改动不用重新安装。起来之后在 localhost:3000 授权麦克风,说一句话——听到回应就说明 RTC 通道、转写、推理、合成整条链路都通了。出问题时先看四把密钥是否都填了:官方示例对 Deepgram 与 OpenAI 是硬依赖,缺一个起不来。

💡 不想装 Docker 可以走 GitHub Codespaces:仓库自带 Codespaces 配置,起环境更快,适合先做功能验证;但要调音频设备、试打断体验,还是本机跑最真实。

Step 3:TMAN Designer 里换配置

3 右键属性面板,逐个扩展调参
# 浏览器打开 http://localhost:49483(TMAN Designer)
# 1) 找到 STT 扩展,右键 properties,
#    确认 Deepgram Key 已注入
# 2) LLM 扩展的 properties 里确认 OpenAI Key
#    与所用模型
# 3) TTS 扩展的 properties 里确认 ElevenLabs Key
#    与音色
# 4) 保存后回到 localhost:3000 验证效果

属性面板改的就是每个扩展的运行参数,保存即生效,不用重启容器。这是 TEN 与「一行 SDK 调用」框架的本质差异:你可以看着图调它。建议初回就把三个扩展的属性各打开看一遍——字段名、默认值、可选供应商一目了然,后面换东西心里有底。

换非默认供应商要逐步验证。属性面板里把 ASR 或 TTS 换成其他厂商时,参数字段各不相同;每次只换一段,改完立刻说一句话验证转写与合成是否正常,别一次性把三个扩展全换掉再排查。

Step 4:换模型与调人设

4 LLM 扩展的两处关键参数
# LLM 扩展属性面板:
#   model        —— 换推理模型(小模型延迟低,
#                   强模型回答好,按场景选)
#   prompt       —— 系统提示词,决定人设与语气
#
# 提示词示例(客服人设):
# 「你是售后客服,回答保持三句以内,
#  涉及退款政策时引用知识库结论,
#  不确定就引导用户转人工。」

语音场景的提示词与文本场景不同:回复会被念出来,长句、列表、代码块都是灾难。写人设时明确「控制在几句以内、口语化、可以打断」,再按业务补充边界。扩展图的持久化在 property.json 里,动手改图前先 git 提交一版——画布上的误操作能随时回退。

💡 模型选型用「两头测」:先用最快的模型跑通体验基线,再换强模型对比回答质量,延迟差超过可接受范围就留在小模型——语音场景延迟往往比智商更影响体验。

Step 5:加扩展——VAD、打断与记忆

5 打断是语音智能体体验的分水岭
# 在 TMAN Designer 的扩展市场按需挂载:
#   VAD            —— 静音检测,用户没说话
#                     就不调 STT,省成本
#   Turn Detection —— 判断用户是否说完,
#                     支持打断(barge-in)
#   Memory         —— 多轮对话记忆
# 挂上扩展、连线、保存,回 UI 逐个验证

没有打断检测的语音助手是灾难现场:用户插话它照播不误,体验直接崩掉。VAD 加 Turn Detection 是官方示例的标准组合——前者在本地判断有没有人说话,后者判断这句话说完了没有。多轮记忆扩展挂上后,助手才能记住前文,否则每轮都是失忆重启。

每加一个扩展都是一条延迟与计费链路。VAD 在本地跑能省 STT 调用,但扩展叠太多会拖高首响延迟。官方默认组合已经比较优,扩展逐个加、每加一个测一次端到端延迟,别一口气堆满。

Step 6:部署与进阶路线

6 从 localhost 到对外服务
# 官方 Self-Hosting 文档:
#   Docker 部署 / 其他云服务部署两条路线
# 进阶示例(都在 agents/examples/ 下):
#   speaker-diarization   说话人分离
#   唇形同步数字人          对接 Trulience、HeyGen、
#                          Tavus 等厂商
#   SIP call              接真实电话线路
#   ESP32-S3 Korvo V3     跑到硬件开发板上

对外的部署要点不在框架而在链路:扩展图跑通只是开始,真实延迟取决于你的服务器区域、供应商区域与用户网络三者的组合,上线前按目标用户分布实测。官方 Self-Hosting 文档覆盖 Docker 与主流云的部署路径,生产环境建议把 .env 换成密钥管理服务注入。延迟预算可以按段拆:RTC 传输几十毫秒、转写几百毫秒、推理几百到上千毫秒、合成几百毫秒——哪段超标就治哪段,逐段测量比笼统「感觉慢」有效得多。

进阶示例的选择也有讲究:说话人分离适合会议纪要场景;唇形同步数字人适合虚拟主播与展厅;SIP 电话把助手接进呼叫中心;ESP32 硬件端则是离线硬件原型的入口。这些示例与 voice-assistant 共享同一套扩展机制,先在主示例上把调参手感练出来,再迁移过去会顺很多。

文档时效提醒。本篇命令与端口按 2026 年 10 月官方 README 书写;克隆后以仓库内当前 README 为准,示例目录名与端口号如有调整,照新文档执行。

常见问题 FAQ

Q:和 LiveKit Agents 什么区别?TEN 是可视化扩展图加官方调参面板,适合看着图理解与调试;LiveKit 是代码框架,适合要精细控制每行逻辑的团队。想看懂内部结构选 TEN,想写代码掌控一切选代码框架。

Q:不用 Agora 行不行?官方示例的实时音频通道默认走 Agora,也提供 WebSocket 连接形态的示例;替换传输层前先确认所选示例对 RTC 的依赖程度,以官方示例文档为准。

Q:跑一天大概多少钱?四家全部按量计费,演示与开发强度下通常在几美元量级;真正的成本风险是压测与长时间挂机,用量告警一定要先配。

Q:中文场景能跑吗?能。转写与合成取决于所选供应商的中文能力(Deepgram 与 ElevenLabs 均有中文模型与音色),LLM 提示词写中文即可;换中文音色后记得重测延迟与断句表现。

← 返回教程中心