AI 机器人交互系统
这是我最近在做的一个项目:让机器人「听得懂、答得上、有反应」。不是套壳音箱,而是端到端的具身交互系统——用户对机器人说一句话,它要边理解、边思考、边说话、边做表情和动作,全链路延迟控制在能接受的自然对话体验内。
一、项目背景
传统的机器人语音交互是「命令式」的:唤醒词 + 固定指令表,说「打开空调」它才会打开空调,稍微换个说法就听不懂。接上大模型之后,交互形态彻底变了:
- 模糊意图理解:「屋里有点闷」→ 它能推断出要开窗或开新风
- 多轮上下文:用户说「再大点声」,它知道改的是上一轮的动作
- 主动交互:结合传感器和场景,主动发起对话
难点在于:大模型能力强但慢,而人对话时对延迟极其敏感——超过 1 秒不回应就觉得「卡」。
二、整体架构
┌─────────────┐ ┌──────────┐ ┌──────────────┐ ┌─────────┐
│ 麦克风阵列 │ → │ VAD/唤醒 │ → │ ASR 流式 │ → │ 意图路由 │
└─────────────┘ └──────────┘ └──────────────┘ └────┬────┘
│
┌─────────────────────────────────┤
▼ ▼
┌────────────┐ ┌────────────┐
│ LLM 对话 │ ←── 知识库/RAG ──→ │ 本地技能 │
│ (流式输出) │ │ (控制指令) │
└──────┬─────┘ └────────────┘
│ 流式 token
▼
┌────────────┐ ┌──────────────┐
│ TTS 流式合成 │ → │ 表情/动作编排 │
└────────────┘ └──────────────┘关键设计点:
- 全链路流式。ASR 边说边识别、LLM 边生成边出 token、TTS 按句切分边合成边播放。首字延迟 = ASR 尾包 + LLM 首 token + TTS 首包,三段叠加优化。
- 意图路由前置。不是所有话都要过大模型——「关灯」「音量大点」这类高频指令走本地技能库直通,毫秒级响应;只有开放对话才进 LLM。
- 对话状态管理。多轮上下文、打断处理(用户抢话时要立刻停 TTS)、跨会话记忆,都用一套独立的 Dialog Manager 管理。
三、核心难点与解决方案
1. 延迟优化
这是整个项目最花时间的地方。【待补充:具体优化前后的量化数据】
- LLM 首 token 优化:用小参数模型处理闲聊(7B 级别本地推理足够),复杂问题才路由到云端大模型;prompt 前缀缓存(KV Cache 复用)把系统提示词的重复计算省掉
- TTS 句级切分:不等 LLM 生成完整回答,按标点切段,第一段生成完就开始播
- 打断即停:VAD 检测到用户开口,立即停掉 TTS 播放队列并 cancel 进行中的 LLM 请求,省 token 也省等待
2. 表情与动作编排
LLM 的输出不只是文本,还要驱动机器人的「行为」:
json
{
"say": "好的,我把客厅的灯调暗一点",
"emotion": "happy",
"actions": [{"type": "light.dim", "room": "living", "value": 30}],
"gesture": "nod"
}用结构化输出(JSON Schema 约束)让 LLM 直接产出可执行的指令,再由编排器把语音、表情、动作按时间轴对齐——说话的同时点头,而不是说完再点头。
3. 唤醒与降噪
远场拾音是硬仗:麦克风阵列做波束成形,回声消除(AEC)处理机器人自己说话的声音,加上噪声抑制。这部分用现成的音频前端方案做二次调优【待补充:具体方案】。
四、涉及的技术栈
| 层次 | 技术 |
|---|---|
| 语音 | 流式 ASR、TTS、VAD、AEC/波束成形【待补充:具体引擎】 |
| 对话 | LLM 流式调用、Function Calling、多轮状态管理 |
| 知识 | RAG 检索增强(家用/场景知识库) |
| 机器人侧 | ROS 2、传感器数据订阅、动作执行【待补充:具体机型】 |
| 后端 | Python【待补充:服务框架】 |
五、成果与收获
【待补充:量化成果——延迟指标、对话轮次、试点数据等】
最大的收获是把「大模型能力」翻译成「产品体验」中间隔着的那一公里走完了:能力是模型的,体验是工程做的。流式、打断、路由、编排,每一个环节都决定用户觉得它「聪明」还是「智障」。
💬 对这个项目的架构细节、技术选型有想法?欢迎加我泡泡(微信)一起探讨技术与科技前沿 → 🍵 加我泡泡