基于李博杰《深入理解 AI Agent:设计原理与工程实践》第9章学习笔记
想象一个场景:你在电话里跟同事讨论方案,说到一半他突然说”稍等,我打字回复你”。荒谬吗?但很长一段时间里,AI Agent 就是这么工作的——明明可以说话,却非要通过文本框来来回回。
第 9 章要回答的问题很直接:Agent 如何从”打字聊天”走向”说话、看屏幕、动手操作”? 作者把这一章拆成三个场景:语音交互、Computer Use(GUI 自动化)、机器人操作。表面看差别悬殊,背后却是同一道坎的两面:延迟(实时性) 和 多模态(感知与表达的宽度)。本章标题”多模态与实时交互”,实为同一枚硬币——只有快得足够自然,多模态才有意义。
一、语音交互:三种范式的演进
从”轮流说话”到”全双工”
作者引用 OpenAI GPT-Live 对语音 Agent 的经典三分法:
| 范式 | 结构 | 代表 | 关键特征 |
|---|---|---|---|
| 级联(Cascading) | ASR → LLM → TTS 串行流水线 | 早期 ChatGPT Voice | 组件成熟、各环节独立迭代;延迟高、信息在转写中丢失 |
| 端到端全模态(Omni) | 单个模型直接”听想说出来” | Qwen3-Omni、GPT-4o Advanced Voice | 隐空间保留副语言信息;但仍轮流说话 |
| 全双工(Full-Duplex) | 边听边说,取消”轮流”假设 | Moshi(2024)、TML-Interaction、GPT-Live | 微轮次(micro-turn)、支持打断与同时说话 |
演进主线有两条:摆脱”轮流说话”假设(所以不再需要 VAD 端点检测),以及快慢解耦(让后台前沿模型处理深思考)。
级联流水线的延迟账本
传统级联的每一环都在”攒”延迟:VAD 端点检测 500-800ms,ASR 50-200ms,LLM 首 token 100-500ms,TTS 200-500ms,合计 0.95-2.3 秒——比正常对话反应(约 200ms)慢了一个数量级。更隐蔽的是排队延迟:总延迟 ≈ 空载延迟 × 1/(1-利用率),利用率 50% 延迟翻倍,80% 就放大 5 倍。
流水线的缓解之道是”全链路流式化”:ASR 边听边转、LLM 输出按文本块流式切分、TTS 增量合成(类似”抢跑生成”)。但作者指出更釜底抽薪的方向——
流式语音感知:替代 VAD + ASR
传统 VAD+ASR 有三个根本问题:延迟累积、信息丢失(笑声、语气、停顿全没了)、嘈杂环境准确率骤降。替代思路是让 LLM 直接吃音频流:Fixie Ultravox、Qwen2-Audio、Qwen2.5-Omni 都支持流式语音输入;轮次判断也可以塞进识别器,通过声学事件标记输出 <speak_start/end>、<interrupt>、<emotion:happy>、<laugh> 等结构化 token。
一个值得记取的洞见是训练标签的”上帝视角”问题:流式标签如果用了”决策点之后才出现的音频”,模型就学到了因果泄漏——训练时能预知未来,推理时做不到。实验 9-3 用 Qwen2-Audio 分块模拟流式,800-1100ms 的延迟与生产级(一两百毫秒)的差距,恰恰说明工程优化的空间依然巨大。
二、思考架构的取舍:快与慢的三种分工
实时语音引出整个第 9 章最核心的设计矛盾:既要 500ms 内回应,又要 5-10 秒的深度思考(test-time scaling),鱼与熊掌如何兼得? 三种方案,不是”迭代”,而是”取舍”:
| 方案 | 思路 | 局限 |
|---|---|---|
| 一:快思考应付,慢思考回答 | 简单问题快回答,难题触发深度思考 | 简单问题被过度思考(”今天星期几”也要想半天);快慢回答可能自相矛盾,信任崩塌 |
| 二:快思考交互,慢思考提醒 | 快模型对话,深思考作为”军师”幕后指导(GPT-Live 委派给 GPT-5.5) | 快模型只能干等状态栏,无法边想边说 |
| 三:端到端思考与表达统一 | 单模型同时负责推理与说话(Step-Audio R1) | “移动靶子”:既要比拼最强推理,又要比拼实时表达,工程代价高 |
方案三的技术细节很有意思:传统”文本代理思考”(Textual Surrogate Reasoning)越长越差,且思考基于转录文本而非声学特征。Step-Audio R1 用 MGRD 模态锚定思考蒸馏——采样时按声学特征筛选”值得想”的时刻,再做联合 SFT 与 RLVR;其 MPS 双脑架构(构思脑 + 表达脑并行)让模型可以边组织语言边开口。实验发现:CoT 开头往往只是复述问题,所以”先说再做”(Speak-First)影响极小——这解释了为什么双脑并行能取得 ≈93% 的效果而不掉推理。
快慢之间的接口则是一个开放性话题:除了文本,还能传什么?一种做法是潜空间桥(Latent Bridge)——冻结快慢两个模型,只训练几千万参数的”桥”把快模型的潜 token 投影给慢模型,Atari 游戏任务提升 26%-82%,每步只多 5ms。作者给了一个诚实的边界:这取决于瓶颈是”想不想得到”还是”来不来得及反应”——若大多数情况都能想到、只是来不及说,潜空间桥就能救命;若本来就想不到,给再多接口也没用。
顺带一提 9.7 的语音合成:太完美的 TTS 反而暴露机器身份——真人说话有停顿、有”嗯…”、有语气。做法是让 LLM 直接输出 [THINKING]、[SEARCHING]、[EMO:happy]、[SPEED:0.8x] 等控制标记,TTS 扮演”多模态生成器”;或用 Fish Audio S1 之类做声音克隆(3-10 秒参考语音即可)。
三、Computer Use:给 Agent 装上”眼睛和手”
Computer Use Agent 的循环朴素而有效:截图 → 模型推理 → 执行动作 → 等待稳定 → 再截图。难点在三个工程问题:
动作空间设计(Anthropic 方案):GUI 操作工具(mouse_move、点击、拖拽、type、组合键、滚动)、感知工具(screenshot、cursor_position、wait)、bash 工具(持久会话、120s 超时、哨兵字符串),以及文件编辑工具。动作间隔 2-5 秒,约人类速度的 1/3 到 1/5——慢是故意的,为了在”屏幕稳定”与”操作效率”间取平衡。
视觉定位(Grounding)是核心难点,三种思路各有利弊:
| 方法 | 原理 | 优缺点 |
|---|---|---|
| Set-of-Mark(SoM) | 分割模型把界面切成带编号区域,把”开放式找元素”变成”封闭式选择题” | 对布局不规则的界面鲁棒 |
| 结构化元素索引 | 直接解析 DOM / Accessibility Tree + CDP(browser-use) | 精准,但依赖网页可访问性结构 |
| 坐标预测 | 模型直接输出点击坐标(SeeClick、Claude computer use) | 简洁,但受分辨率影响大 |
坐标法有个反直觉的坑:分辨率匹配。模型在 XGA(1024×768)上训练,屏幕却是 2560×1440——必须做双向坐标缩放(比例 0.53,坐标换算 ×1.87),否则每次点击都会”歪”。工程上的选择逻辑是:能拿到结构化信息就优先 DOM,拿不到再退到 SoM / 坐标。
实时性是尚未解决的核心挑战:OSWorld 上准确率已接近人类,但操作步骤更多、推理延迟随任务推进增长、Agent 不会”提前想”。一个务实的解法仍是快慢解耦:小模型负责语音对话(0.58s),前沿 VLM 负责慢慢操作浏览器(8.64s),中间靠”纯文本契约”——把屏幕状态叙述成摘要文字来同步。有趣的是实验发现:一旦抽掉这条文本通道,成功率直接塌到 0——文字才是 LLM Agent 最擅长处理的模态(9.8.3 的观察接口同样验证:把帧叙述成能长期留存的文字,比直接喂视频帧更有用,+17 到 +48 个百分点)。
此外,9.8.4 提醒了一个被低估的壁垒:移动端的困难不是技术,是生态。AccessibilityService、触摸手势都好解决,真正难的是商业模式冲突——Agent 绕过流量与注意力变现,这是 CAPTCHA 之外的结构性利益矛盾。
四、机器人操作:VLA 与 Sim2Real
第 9 章最后的场景是机器人。核心是 VLA(视觉-语言-动作)模型,两条技术路线:
- 离散动作 token(RT-2、OpenVLA):把动作当语言 token 预测,配合 OpenX-Embodiment 多机器人预训练。好处是复用语言模型基建,坏处是动作过于平滑、像”机械描画”。
- 连续轨迹生成(π₀):用 flow matching 去噪直接生成平滑轨迹,就像画家先勾出曲线再细化,动作自然很多。
共同点是动作分块(Action Chunking,ACT 提出):一次生成 0.5-1 秒的动作块(25-50 个动作),像视频缓冲一样减少高频决策延迟。而 Sim2Real(仿真到现实)的关键是领域随机化——把物理、视觉、动力学参数统统随机化,逼模型学到”本质”,再在真实环境微调。工程上两个环节最容易被忽视:随机化范围要先实测真实分布再标定(不能拍脑袋),以及视觉对齐(环境对齐 + greenscreen 背景替换)。成功案例包括 OpenAI Dactyl 单手解魔方、ETH ANYmal 四足机器人;实验 9-10 用 LeRobot + ManiSkill 纯 RGB 零样本 Sim2Real,PPO 训练后机械臂成功率超 90%。
五、实践建议与总结
- 先想清楚”要不要实时”:不是所有场景都需要全双工语音。客服语音可以用级联+流式起步,先解决延迟账本里的最大项(VAD/端点检测),再逐步替换。
- 快慢解耦是当下最务实的 2026 主流:不要让一个模型同时扛实时与深思考。方案二的”状态栏/纯文本契约”思路可以平移到任何多模态场景——让文字当模态之间的”通用翻译层”。
- 选定位方案按信息可得性排序:结构化索引 > SoM 选择题 > 纯坐标;记住分辨率缩放这个容易被忽略的坑。
- 机器人项目先做好”随机化标定”与”视觉对齐”,再谈训练算法——大部分 Sim2Real 翻车都在这两个工程环节。
一句话总结:语音已走完整条演进路径(级联→Omni→全双工),Computer Use 准确率追上了人类但效率还差得远,机器人瓶颈已从硬件转移到 VLA 泛化——三个场景殊途同归,都卡在”延迟”与”多模态”这道坎上,而”快慢解耦 + 文本契约”是目前最通用的翻坎姿势。
参考实验清单
- 实验 9-1:Silero VAD + Whisper 构建传统语音 Agent
- 实验 9-2:PineClaw Voice API 构建电话 Agent(make_phone_call 工具 + ReAct)
- 实验 9-3:Qwen2-Audio 分块模拟流式识别
- 实验 9-5:Fish Audio S1 三秒声音克隆
- 实验 9-7:browser-use(Playwright + SoM)5 步操作自动完成
- 实验 9-10:LeRobot + ManiSkill 纯 RGB 零样本 Sim2Real