模态与触发时机的扩展
第一章的论断:模型固定时,提升 Agent 表现最主要的工程手段,是重新定义或扩展观察空间和动作空间。前几章扩展的是空间里的内容,这一章扩展它们的模态(以什么形式看、以什么形式动)和时机(谁来触发、动作能否跨回合与被打断)。
| 扩展方向 | 观察空间 | 动作空间 |
|---|---|---|
| 内容(第二至五章) | 上下文工程、记忆与知识库 | 工具、代码生成 |
| 模态(本章) | 语音、屏幕、物理传感器 | 说话、点击、关节运动 |
| 时机(本章) | 世界主动推送、连续流 | 跨回合、可打断、可抢占 |
早期工具调用接口按同步轮次组织消息,这是约定,正在改变。截至 2026 年 9 月,GPT-6 Astra 已提供原生异步工具调用和回合中途追加指令。本章同时讨论“原生支持”和“兼容既有同步接口”两条路线。
| 尺度 | 场景 | 观察侧的变化 | 动作侧的变化 |
|---|---|---|---|
| 秒—天 | 异步与事件驱动 | 会被外部事件主动唤醒 | 动作跨回合:先发起,后续靠事件收尾 |
| 10 ms—1 s | 语音 | 边说边听,不等一句说完 | 边想边说,可被打断 |
| 亚秒—秒 | Computer Use | 屏幕在两帧之间持续变化 | 动作后必须重新确认现实是否仍符合计划 |
| 毫秒 | 机器人 | 传感器连续回流 | 动作分块:一次规划一小段,可被抢占 |
异步与事件驱动:当世界主动找上门
这一节模态没变,还是文本,变的只有时机。同步的 Agent 像只会叫号的柜台:要么等后台任务做完才能对话,要么等对话结束才处理新事件。异步的 Agent 像秘书:桌上摆着邮件、电话、来访者,按紧急程度决定先处理哪个,做到一半可以切走。
异步执行是常态
长任务不应阻塞用户交互。
按优先级动态处理
紧急的取消当前操作,常规的入队,独立轻量查询并行处理。
中断后能自然恢复
被打断的对话或任务要能接着做下去。
代码里用了 asyncio,不等于模型具备原生异步能力。有的接口要求先补齐工具结果才能继续,需要事件队列、任务句柄和兼容层;有的已允许工具挂起、生成中接收更新。两种情况下,事件来源、工具生命周期和结果归属都仍由应用管理。
图 6-1 · 事件驱动的异步 Agent 架构
事件源
事件队列
Agent 处理流程(循环)
不再轮询“有没有新消息”,而是消息一到就触发处理。所有输入、输出、思考和外部交互都建模为一条时间线上的事件流。结构上与 Go 的 for { select { ... } } 一样:每轮取出若干事件,追加到轨迹,调一次 LLM,执行它决定的工具,再回到开头。
OpenClaw:定时检查够不够
OpenClaw 用 Gateway 控制平面接收多渠道消息,内置三种事件机制。真正能让 Agent 在没有用户消息时自己动起来的只有 Cron 和 Heartbeat,而它们都由时间驱动。
事件钩子
响应会话创建、重置等生命周期事件,类似 GitHub Actions 的触发器。来源在框架内部。
定时调度
按 cron 表达式执行周期任务。0 9 * * 5 = 每周五上午 9 点(分 时 日 月 周)。
心跳守护
每隔 N 分钟唤醒一次 Agent,检查有没有要关注的事。
PineClaw · 客服在线上等验证码
Heartbeat 轮询 vs Channel 推送Pine AI 替用户拨打真实电话(协商账单、取消订阅、保险理赔)。通话中客服可能要求实时验证 OTP、三方通话确认、或确认降价方案。若靠 Heartbeat,用户可能迟迟收不到通知,客服挂断,通话失败。PineClaw 在 Gateway 与 Pine API 之间建了实时 Channel:电话接通、需要用户输入、通话结束时,事件立即推给 Agent。
三类事件触发工具 + 用户沟通工具
没有事件触发工具,Agent 只能循环思考、调工具、输出结果,然后等用户。这三类工具把世界的变化转成 Agent 能处理的事件。
定时器
依赖物理时间的事件。一次性:周六让 Agent 给银行房贷部门打电话,它设“下周一上午 10:00 致电”。循环:每小时检查服务器健康;外部服务不能推送时,用它定时查询进展。Heartbeat 就是这一机制的系统化实现。
后台任务监控
不断查询进度太费 token,等跑完再看又发现不了中途卡死。Claude Code 的 monitor 工具只在命令行有新增输出或出现特定关键词时唤醒 Agent。
外部事件通道
新邮件、API 回调、IM 消息实时推给 Agent,PineClaw Channel 是典型实现。设计上要有清晰的触发条件和过滤规则,载荷带足上下文,减少唤醒后的追加查询。
用户沟通工具:双方都能随时发消息
Claude Code、Manus 的 assistant 消息直接显示在会话里。OpenClaw 用专门工具发消息,可附图片、文件和按紧急度的推送提醒,用户无需打开会话,所以有“活人感”。渠道扩展到 IM、短信、邮件、电话、推送,按紧急程度、用户状态、内容性质和偏好选择;通知同时也是召回用户的手段。还要支持异步消息、已读/未读追踪和多渠道一致性;生成式 UI 用 HTML 生成交互界面。
虚拟身份与隔离执行环境
直接管理用户账号,一旦出错或被攻破,全部数字身份暴露。更稳妥的是给 Agent 一套自己的身份(像秘书有自己的电话和邮箱),部署在虚拟电脑(VM/容器)和虚拟手机(Android 模拟器)里:全天候运行、出错最多弄崩虚拟环境、不能随意读用户本地文件。
各方之间只传文件路径,不拷贝内容,不占上下文窗口。两个现实挑战:数据中心 IP 易被反机器人机制识别,常需住宅代理;必须以用户本人登录时,用 VNC/RDP 让用户亲自完成(Human-in-the-Loop),会话令牌在有效期内复用。
事件处理:先结构化,再按紧急度分三种策略
把每个输入建模为带来源(谁)、渠道(方式)、内容(什么)、上下文(背景)的结构化事件。这样 Agent 才不会把用户输入当成工具结果,也不会把藏有指令的工具结果当成用户指令而被提示注入。
{
"source": {"type": "email", "sender": "client@example.com"},
"channel": "gmail_webhook",
"content": {"subject": "退款请求", "body": "订单#12345 希望退款..."},
"context": {"priority": "high", "customer_tier": "vip", "related_orders": ["#12345"]}
}
同步接口在“安全点”消费事件:一段推理结束,或一次工具返回。队列式等下一个自然安全点,取消式主动提前制造一个,并行式另起一个循环,不等主循环。收到“停止”消息本身不会撤销已经发生的动作;工具取消要执行器响应取消信号,类似 Go 检查 ctx.Done()。
图 6-2 · 异步事件处理的三种策略
取消式
① 取消流式响应,向同步工具发取消信号 ② 清空待处理队列 ③ 队列事件与紧急事件一起追加到轨迹 ④ 立即重新调用 LLM。用户喊“停!我说错了”,Agent 立刻看到,避免执行错误操作。
队列式
① 入队,不打断 ② 等推理和同步工具完成 ③ 有 tool.result 返回时,把队列事件一次性追加 ④ LLM 综合处理。搜索时用户补“只看最近一个月”,与结果一起呈现,省一次往返。
并行式
与主任务无关、要快速响应、执行成本低。开一个并行推理会话处理,结果追加进主轨迹并标记“与主任务并行执行”,避免 LLM 混淆。
事件路由器 · 点一个事件看它走哪条路
建议用轻量分类 LLM 做路由硬编码规则有局限:事件的语义决定处理方式。取消点必须是工具或推理能安全收尾的位置;未完成的工具结果用显式占位符表示,不能伪造成功。
实验 6-1 ★★★ · 事件驱动的邮件处理 Agent
图 6-3 的架构:外部事件源(Web/App、邮件、GitHub、定时器、Webhook、系统告警)→ FastAPI POST /events/{type} → 事件路由器 → 优先级队列 → Agent 循环与会话管理 → MCP 工具服务器(感知 / 执行 / 协作 / 通知)→ 持久层(对话历史、事件日志、定时任务、工具状态、审计追踪)。每个事件触发一次独立的思考循环。
| 到达的邮件 | Agent 的处理 | 结果 |
|---|---|---|
| 会议邀请 | 检查日历冲突,起草接受/拒绝回复 | 草稿 |
| 客户投诉 | 提取关键信息,标记高优先级 | 通知用户 |
| 营销广告 | 自动归档 | 归档 |
整个过程无需用户介入。这是最简单的模式:事件入队,依次处理。长任务中途的打断、多个并发任务,需要下面的兼容方案。
不支持原生异步时:五条规则维持工具配对
场景:Agent 起草邮件,调用 search_contacts,结果还没回来,用户说“等一下,先帮我查一下明天的天气”。若接口要求未完成的工具调用先有结果,就不能带着悬空调用处理新消息。这是所选协议与模型的限制,不是所有 LLM 的规律。
五条规则
1 及时记录已完成的 assistant 消息和工具调用项;服务端管理的 reasoning 按提供商续接协议保留,不自行拼接不可见的思考。
2 工具完成时才记录 tool result。
3 工具执行中被打断:生成占位符结果,追加打断事件,重新调用 LLM。
4 无原生 steering 时,取消未完成的生成,保留已确认的消息和工具状态,追加新事件后重新请求;半截输出不能当合法前缀回灌。
5 非打断事件入队,本周期结束后一次性追加。
占位符的风险:模型可能把“任务已启动”误当“任务已完成”。要用明确的任务状态和结果校验防止,并在评估中检查是否编造了未到达的数据。
用任务句柄表达异步语义
phone_call 暗示“拨打并等通话结束”。改为 initiate_phone_call:立即返回任务 ID 和初始状态(“呼叫已发起,正在拨号”),进展通过 phone_call_connected、phone_call_ended 事件通知。工具名和描述本身就要传达“发起”而非“完成”。
批量事件的注意力分散
模型可能只回应最后一个事件。提示词提醒“全面考虑所有信息”,再加状态栏标记:
[未处理事件1/4] Tool result from database_query:... [未处理事件2/4] User 补充说明:只看北京地区的数据 [未处理事件3/4] 系统提醒:报告截止时间还有30 分钟 [未处理事件4/4] User 询问:进度如何? 上面有4 个未处理事件,包括1 个工具结果、 2 条用户消息、1 个系统提醒。请确保回应涵盖所有信息。
实验 6-2 ★★★ / 图 6-4 · 三个脚本,先完成的那个触发检查
用户:“帮我同时运行这三个脚本,哪个先完成了,就看看剩下的脚本进度怎么样,如果还没超过 50%,就取消。”关键是占位符注入、异步完成事件和 cancel_tool(task_id)。
同一实验的另外三项验证:长终端命令期间问“现在几点了?”立即回答;连续发“记得用日语回复”“整理成网页”,任务完成时一次性处理,生成日语网页;发“取消”,立即停止,轨迹记录打断与取消。
模型原生异步:GPT-6 Astra
另一条路线让模型自己理解等待与中途变化:异步工具调用把“发起行动”和“获得结果”分开,能独立推进的继续做,依赖结果的决策等结果到;回合中途引导让用户在 Agent 还在思考时追加“预算减少了”“参会人数变了”,系统保留已完成的工作,把新约束带进后续处理。
图 6-5 / 实验 6-3 · 为会议选场地
示意时间线(书中未给时长)。修改计划不等于停止正在运行的工具,更不会撤销已发生的动作;执行、取消和状态管理仍归运行时。
结果归属与未完成状态
迟到的结果能否归入正确任务?结果缺席时是否避免编造?
任务恢复与动作控制
处理新要求后能否接着做原任务?能否区分“修改计划”和“停止执行”?
多条更新的综合使用
能否同时遵守预算和人数,而不是只记住最后一条?
能接收异步消息,不等于能可靠处理异步任务。评估覆盖两层:模型是否理解了变化,系统是否按变化正确执行。
语音:最自然的人机接口
正常说话的速度约为打字的四倍,不占手和眼,天然适合持续工作、随时被打断的回路。本节同时讨论用户对 Agent 说话,和 Agent 替用户对外部世界说话。语音模型决定“能回答什么”,交互架构决定能否听清、及时回应、自然换手。
| 范式 | 核心结构 | 主要优势 | 主要限制 |
|---|---|---|---|
| 级联 | VAD → ASR → LLM → TTS | 模块清晰、易替换、易调试 | 延迟累积,副语言信息在接口处丢失 |
| 端到端 Omni | 原生音频输入输出,按轮次 | 延迟较低,保留语气、情绪、环境声 | 仍依赖轮次,训练调试成本高 |
| 全双工 | 原生音频,持续听、说、决策 | 重叠说话、自然打断、连续流 | 训练、控制、评估都更复杂 |
三种范式的主线:摆脱“轮流说话”和 VAD 对发言权的猜测。级联和 Omni 仍要划分轮次,只有全双工把“该谁说话”变成模型的持续决策。(三分法出自 OpenAI GPT-Live 介绍,2026-07-08。)
范式一 · 级联流水线
图 6-6。技术栈:Node.js WebSocket + AudioWorklet(128 样本 ≈ 2.7 ms)+ FFmpeg。瓶颈分别是:静音阈值带来的等待与误切分、识别延迟与上下文丢失、首 token 延迟(开 reasoning 更长)、首包合成与播放缓冲。
图 6-7 · 延迟瀑布:串行累积
简短、不开 reasoning 的回复,空载理想情况。真实数值取决于输入长度、模型、硬件、网络和负载。
图 6-8 · 排队把空载延迟放大
总延迟 = S / (1 − ρ)生产环境 ρ 通常 0.5–0.8,实际延迟是空载的 2–5 倍。这属于容量规划,本章不展开排队模型。实验 6-4 ★ 用 WebSocket 串起麦克风、Silero VAD、本地 Whisper、流式 LLM 和 Fish S1,作为级联基线。
从串行到流式感知
完全串行有三个问题:要等一段静音才确认说完;有声/无声的二值信号表达不了犹豫、情绪、附和和环境声;邮箱、人名、专有名词被分片识别而出错。保留模块分工的优化是让每一级尽早产出增量结果。
串行 vs 流式
ASR 边听边转
开始说话就按间隔调 ASR 出临时转录,说完再确认最终文本。
LLM 推测执行
临时转录先送 LLM;最终文本相同就不再调用,不同则取消重来。
LLM 分段输出
第一段适合播报的文本生成后立即交给 TTS。
TTS 增量合成
持续返回音频块,生成、合成、播放重叠。
示意时间线。真正的流式 ASR 需要模型支持:Whisper 解码是自回归的,但编码器要完整音频段。基于 LLM 的流式听觉模型保留从对话开始的上下文,能用世界知识处理品牌、人名;端点判断可以做进识别器,但训练标签只能用决策时刻可见的信息,否则“上帝视角”在线上无法复现。实验 6-5 ★ 用递增音频前缀让非流式的 Qwen2-Audio 模拟连续感知,对照 600 ms VAD + Whisper。
识别器输出的不只是文字
声学事件标记(说话起止与打断意图、情感与犹豫、笑声叹气与环境声)和文字 token 构成统一事件流,Agent 不必把所有声音压成纯文本。示例句为示意。
范式二 · 端到端 Omni;范式三 · 全双工
Omni 用同一个模型听音频、生成回复并输出语音,能理解停顿,也能唱歌、用特殊语调说话。但它仍假设轮流说话,通常靠 VAD 划分发言权:用户报数字时的中途停顿,仍可能被误判为说完。全双工不预设轮次,持续听、持续说,不断决定继续、停顿、打断或调用工具。
同一段对话,三种发言权
示意时间线。用户报号码时停顿了一下;“嗯”“对”是附和不是打断,背景噪音也不是发言,但基于声学信号的 VAD 捕捉不到这层语义。
服务端 VAD + 轮次检测,异步函数调用,打断即停止当前生成。2024 preview 基于 GPT-4o,本质仍在 VAD 框架下。
VAD 敏感度可配置,打断保留已发信息,优化对话连贯性,策略与 OpenAI 类似。
Thinker-Talker MoE:思考(理解)+ 表达(生成),多码本语音编码。首包 234 ms,22/36 基准 SOTA。
潜在音频编码 + RL,端到端语音 token,支持 CoT、RAG、工具。
并行建模用户与模型两路音频流 + 内心独白文本流,无需 VAD 和轮次检测。重叠说话与打断成为模型的自然行为。
Thinking Machines Lab 的微轮次以短音频块持续推进,静音、重叠、打断都留在上下文里。GPT-Live 把全双工带到生产规模,能等待、附和、被打断、做实时翻译。二者都把复杂任务委派给后台模型,前台继续维持对话。
实验 6-6 ★★:本地 MiniCPM-o 4.5 关闭 thinking,比较直接从音频作答与同模型“先转录再作答”的自级联,测的是音频信息是否被保留。
认知时序:实时交互与深度思考
“交互表现”和“智能上限”是两个维度:前台要在用户在线时回应,后台可以多花时间想。下面三种方案是取舍,不是线性迭代。
图 6-10 · “选哪个套餐?”
快慢分离能直接吃到慢模型的迭代红利
前台快模型只管低延迟地倾听、应答、维持对话;更强的思考模型发布后,只换后台,不必重训整套实时语音系统。统一路线每次升级都要同时兼顾智能、延迟和表达自然度。截至 2026 年 8 月,采用快慢分离的 Pine AI 语音 Agent 在 τ³-Voice Leaderboard 排第一,超过 Grok Voice、GPT-Realtime-2。
“端到端”有两根独立的轴
更像人的语音合成
实验 6-7 ★★ · 控制标记驱动 TTS
Fish Audio S1 · 多参考语音库太流畅、零停顿的 TTS 反而暴露机器身份。停顿、填充词、偶尔的重复,是人表达不确定和思考的信号。让主 LLM 在文本之外输出控制标记,由 TTS 映射为停顿、韵律、语速或笑声、叹气。
示例句为示意。实现上可以自研支持控制标记的 TTS,也可以用语音克隆准备不同情绪和风格的参考音频。实验比较无标记、单一参考音、多参考音三种配置。
Computer Use:GUI 自动化 Agent
语音的观察是一维声音流,Computer Use 把问题搬上二维屏幕:观察是持续变化的像素,动作是坐标上的点击与输入。语音强调“何时开口”,Computer Use 强调“下一步点哪里”,以及语音里没有的问题:动作之后,现实是否还和计划一致。
图 6-11 · 感知—思考—行动循环
一个多步表单可能要 10–20 轮。每个动作间隔 2–5 秒(串行截图—识别—思考—点击),是人类速度的 1/3 到 1/5。“看懂界面”可以用一次截图问答测;“完成任务”要在闭环里处理加载、状态变化、误操作和不可逆后果。
动作空间:三类工具
Anthropic 参考实现的划分。它不是私有协议:只要 Harness 能把截图、动作约束和执行结果转成目标模型支持的格式,Claude、开放权重视觉模型和自托管端点都能驱动同一个循环。
GUI 操作
鼠标:mouse_move、左/右/中键、双击/三击、left_click_drag、left_mouse_down/up;滚动四方向可配修饰键。键盘:type(逐字符,间隔 12 ms)、key 组合键、hold_key。感知:screenshot(缩放到训练分辨率)、cursor_position、wait。
命令执行
持久 bash 会话,120 秒超时,用哨兵字符串判断命令结束;调用之间保持状态(cd 之后下次还在那个目录)。
文件编辑
view、create、str_replace、insert、undo_edit。靠字符串匹配做替换,比整文件覆盖更精确。
图 6-12 · 填写表单的五个动作
实验 6-8 ★:路径 A 用 Anthropic Computer Use Demo(容器内 Ubuntu 桌面,后端把截图和指令发给 Claude,执行返回的动作);路径 B 用本书 chapter6/computer-use-open-model,默认以开放权重的 Qwen3-VL 32B Instruct 驱动 browser-use,可走 OpenRouter 或自托管 vLLM/SGLang。
视觉定位:选择题还是填空题
每一轮都要回答“搜索框在哪里”。选择题思路先给界面元素编号,模型只说“点击 [123]”;填空题思路让模型直接报出“(350, 464)”。输出坐标对模型更难,要大量训练,换分辨率还容易错。
图 6-13 · Set-of-Mark 与结构化元素索引
| 路线 | 怎么得到候选 | 适用 | 代价 |
|---|---|---|---|
| 视觉标注(SoM) 微软研究院 2023 | SAM、SEEM 等分割模型在像素上切出候选区域并编号 | 不需要 DOM,原生桌面、游戏也行 | 分割可能漏检、误检 |
| 结构化索引 | CDP 取 DOM 与无障碍树 → 检测可交互元素 → 分配 ID 并画框 → 文本列表 + 截图给模型 | 网页、提供 Accessibility 接口的应用 | 不省 token(标注信息都要发给模型) |
| 坐标预测 SeeClick、Claude | 不标注,模型在大量 GUI 截图—位置数据上训练后直接输出坐标 | 做过 GUI 定位训练的模型 | 依赖训练分辨率;小元素与密集界面仍有差距 |
结构化信息可得时,优先用 DOM / Accessibility Tree 索引,最精确稳定。不可得时(Photoshop 这类原生软件、Canvas/WebGL、游戏),对通用模型用视觉标注更友好,对做过 GUI 定位训练的模型用坐标预测更直接。
图 6-14 · 分辨率匹配与双向坐标缩放
XGA 1024×768 · WXGA 1280×800 · FWXGA 1366×768完整流程:① 按宽高比选目标分辨率 → ② ImageMagick 缩小截图 → ③ 模型推理生成坐标 → ④ 按比例放大 → ⑤ xdotool 执行。若把 16:9 硬拉进 4:3 的 XGA,画面被横向压扁,坐标会系统性偏移,像在小地图上量距离直接用到大地图上。实验 6-9 ★:browser-use + Playwright,启用 SoM 可视化,任务“打开 Google 查询旧金山天气”。
能看动画、能听声音:重新设计观察接口
截一张图、想一步、点一下的循环,隐含“屏幕是静止的”。可屏幕会放视频、弹出转瞬即逝的通知、播放会议人声。每 3–5 秒才睁一次眼、没有耳朵的 Agent,看不见也听不到两帧之间的事。Agent–电脑观察接口(AOI)把连续环境观察转成离散事件。
固定间隔截图 vs AOI
屏幕关键帧
小模型判断屏幕是否有意义地变化,只在显著变化时截图;变化频繁时每秒 1 次就有不错的效果。
音量门控转写
有声音时才调用语音识别,文字放进上下文,Agent 就能“听见”。
用文字描述画面
把截图描述成一句话。原图之后被清出上下文,这句话还在,相当于多模态交互历史压缩。
示意时间线(通知、视频的时长为示意)。论文:Li & Shi, Agent-Computer Observation Interfaces Enable Dynamic Computer Use, arXiv:2606.29472。
世界模型:先预测,偏离了才停下
观察接口不消除规划延迟。OSWorld-Human 的效率研究显示,即使任务成功,Agent 的步骤仍明显多于人类,等待也更长:准确率达到人类水平,不等于已经实用。人操作电脑时会先预测动作后果,实际变化与预期一致就继续,偏离了才重新观察和规划。
串行循环 vs 推测执行
示意时间线。桌面状态 + click/type/scroll/wait → 下一状态的表示。状态不只是像素,还有窗口、焦点、滚动位置、输入框内容、加载状态、权限、网络返回。要预测的是完成任务所需的、可检查的状态差异,不是逼真的未来截图。删除文件这类操作可以先在隔离虚拟桌面里预测会不会出现不可逆确认框,必要时请用户确认。
Photon-1(Induction Labs,2026 年 7 月)
仅用 3 万小时 H200 GPU 时间完成 computer use 世界模型预训练。每帧压成离散潜在 token,自回归预测动作之后的下一状态表示,不逐像素生成截图;图像生成器只用于可视化。给定种子截图和动作即可连续“想象”桌面,再经虚拟机在线训练学会输出动作。(数据为公司披露。)
移动端:生态壁垒比技术更难
技术上,移动端走 AccessibilityService 等无障碍 API,同一个 (x, y) 要额外标明是单击、长按还是滑动起点(第七章的 AndroidWorld 在此动作空间上评测)。真正卡住的是商业模式:平台靠流量、广告、推荐和冲动消费变现,Agent 直奔目标、不看广告,绕过了整条链路。曾有手机厂商让 AI 助手自动操作微信、淘宝、支付宝,很快遭遇平台限制。
机器人操作:以 XLeRobot 整理桌面为例
整节只用一个任务:把红色杯子放进托盘,把黄色废纸放进垃圾盒,最后重新观察并确认桌面状态。XLeRobot 既能由人通过键盘、Xbox 手柄、Switch Joy-Con、VR 遥操作,也能把摄像头和一组受约束的动作工具交给 Agent。硬件和任务都不变,只换操作者。
人想完成什么?
先做哪个子任务?
长程规划
技能输出哪些动作?
VLA / 动作原语
执行后现实还符合计划吗?
世界模型 + 重新观察
几百美元的机械臂通过遥操作已经能完成这个连续多步任务,所以对这个任务来说,瓶颈是算法,不是硬件。这个诊断只限于本节的桌面任务:硬件跨过了负载、精度和工作空间的门槛,不代表能胜任所有开放环境。人类操作者会自然地在靠近杯子时减速、杯子滑动时修正抓取点、没夹住纸时重新观察、放好后检查。
| 实验 | 环境 | 操作者 | 测什么 |
|---|---|---|---|
| 6-10 ★ | 真机 | 人遥操作 | 真实硬件上的人类闭环上限;记录画面、输入、机械臂状态、时间、抓取失败、重试、最终状态 |
| 6-11 ★ | 二维模拟器 | 理想控制器 | 感知与决策都正确时的上限:成功率、步数、路径长度 |
| 6-12 ★★ | 真机 | Agent(Gemini Robotics-ER 1.5) | 同一硬件同一任务,人类闭环与模型闭环差在哪;人只负责启动、急停、监护 |
| 6-13 ★★ | 模拟器 + 可注入失败 | 三种自主策略 | 开环 / 逐步检查 / 预测式:成功率、工具调用开销、失败恢复 |
| 6-14 ★★★ | 模拟器 · RGB | 四种视觉策略 | 改变背景、外观、光照、噪声后动作判断准确率 |
验收不能只看“桌面好像收拾好了”:杯子在托盘内、废纸在垃圾盒内、机械臂回到安全姿态,全程无碰撞、越界或未经确认的人工代做。真机和模拟分开报告,任务目标、动作语义和成功条件保持一致。
机器人控制的分层与时间尺度
| 层级 | 核心问题 | 输出 | 典型时间尺度 |
|---|---|---|---|
| 任务目标 | 人想完成什么 | “把杯子和废纸归位” | 分钟级 |
| 长程规划 | 先做什么、后做什么 | 先杯子,再废纸,最后检查 | 秒到分钟 |
| 基本技能 | 当前要完成哪个状态变化 | pick(red_cup)、place(red_cup, tray) | 约 1–3 秒 |
| VLA / 技能策略 | 这个技能具体怎么动 | 夹爪的一小段动作或连续轨迹 | 约 1–10 Hz 推理 |
| 底层控制与安全层 | 如何稳定、及时地执行 | 关节或末端控制量、限速与急停 | 约 50–1000 Hz |
把“任务顺序”和“眼前动作”分开。否则高层推理延迟拖慢底层控制,底层高频控制又让高层处理大量无关细节。模型不直接输出任意关节角,只选择 pick、place、verify_state、stop 等有边界的技能,由标定过、限速、带超时的执行器变成真实动作。
实验 6-12 / 6-13 · 整理桌面的三种闭环
只开放五个工具:observe_scene、pick、place、verify_state、stop。每完成一个技能都重新观察并检查后置条件;抓取失败只重试当前技能;用户喊停、物体离开工作区或状态无法确认时必须 stop。模型不能凭自己说过“已完成”跳过真实检查。物体被人挪动或目标改变时,只重新规划受影响的后续步骤。
VLA:当前观察 + 技能指令 → 动作
规划器只提交 pick(red_cup);VLA 还要决定从哪个方向接近、夹爪何时闭合、手臂沿什么轨迹抬起。执行完这一小段后重新拍摄,确认杯子确实被夹住,规划器才允许提交 place。工具调用定义期望的状态变化,VLA 定义如何用连续动作实现它。RT-2 和 OpenVLA 把动作切成离散 token 逐个输出,更易与语言模型结合;π₀ 直接生成连续平滑的轨迹,更适合表达平滑运动。
动作分块:平滑性和反应速度的取舍
书中只给范围(推理 1–10 Hz,控制 50–1000 Hz),滑块默认值是范围内的示例。演示的模型:每块开始执行时,用这一刻的画面在后台推理下一块;块长短于推理周期,控制线程就会空等。动作段越长运动越平滑,模型在这段时间里看到的新画面越少:杯子在伸手途中被碰动,它可能还在执行旧画面生成的动作。
训练数据有限
机器人演示远少于互联网文本和图像。见过“杯子”这个词,不代表见过各种材质与摩擦下的杯子。
只模仿,不一定懂后果
行为克隆学的是“示范者下一步怎么做”,没要求回答“这个动作会造成什么”。
机器人各不相同
自由度、坐标系、夹爪、执行器延迟都不同,动作不能直接搬到另一台。
观察可能过时
动作块开始后,物体可能被移动、遮挡或碰倒,模型还在依据上一帧决定。
世界模型:动作结果预测器
当前状态 + 候选动作 → 预测下一状态或未来片段 → 比较候选结果 → 选择动作、重新规划或安全停止
比较抓取、推动、等待等候选,选风险更小的。废纸被杯子部分遮住时,比较“先抓纸”“先移动杯子”“换个抓取方向”:哪些能让纸变得可抓,哪些可能碰倒杯子。
把真实观察和预测对照,发现偏差就缩短动作、停止或重新规划。
用视频、仿真数据和失败轨迹学习状态变化,减少真机试错。
预测只能帮助选择,不能代替验收;真实摄像头的观察才是最终事实。只会描述视频的 VLM、只会生成画面的模型,都不会自动变成可靠的机器人世界模型:它必须知道动作是什么,并能预测动作对物体的影响。V-JEPA 2 在内部状态中预测未来,World-Action Model 显式学习“动作—未来观察”。预测越远误差越大;逼真的画面也可能违反真实的接触和摩擦规律,所以仍需短期预测、实时观察、不确定性估计和独立的硬件安全控制器。
从仿真到真机
实验 6-14 ★★★ · 同一任务的 RGB 跨环境测试
四种结构相同的视觉策略只看固定画面
改变背景
改变物体外观
背景 + 外观 + 光照 + 噪声
每个样本是一个局部决策:根据 RGB 画面判断应向哪个方向接近物体,或是否已可以抓取。所有策略都在原始环境和变化后的新环境里测试。要回答的只是:训练时主动扩大画面变化范围,是否有助于适应新的摄像头画面。部署时同一个杯子会出现在不同背景、光照、相机位置和遮挡下,机械臂还有不同的摩擦、传感器噪声和执行器延迟;即使结果改善,真机仍需相机标定、执行器测试和完整的安全闭环。
四个场景,一条控制骨架
共享的闭环
| 原语 | 事件驱动(秒—天) | 语音(10 ms—1 s) | Computer Use(亚秒—秒) | 机器人(毫秒) |
|---|---|---|---|---|
| 唤醒 | set_timer、monitor、Channel 推送 | 持续听,speak_start | AOI 关键帧、音量门控转写 | 传感器连续回流 |
| 安全点 | 一段推理结束、一次工具返回 | VAD / 轮次边界 | 等界面稳定后再截图 | 每个技能后的 verify_state |
| 取消 | 取消流式响应 + 工具取消信号 | 被打断时停止当前生成 | 偏离预期就停下重新观察 | stop 工具、急停 |
| 抢占 | 紧急事件提前制造安全点 | 全双工下的自然打断 | 弹窗一闪而过时按状态差异恢复 | 动作块被新规划抢占 |
| 快慢分离 | 轻量分类 LLM 做路由;并行会话 | 前台快模型 + 后台慢模型 | 按预测推测执行,偏离才重新规划 | 长程规划 / VLA / 底层控制分层 |
异步与事件驱动把观察从“主动去取”扩展为“世界推来”,把动作从“回合内做完”扩展为“先发起、事件收尾”。语音把尺度压到毫秒,三种范式从轮流说话走向持续听说,并在前台交互与后台思考之间分工。Computer Use 的瓶颈从“能否完成”扩展到操作效率、连续视觉理解和动作后的状态确认。机器人把闭环推到物理世界,动作分块在平滑与反应之间取舍,是否完成仍由新的观察判定。下一章讨论如何判断系统构建得对不对。
容易混淆的八件事
思考题
1 ★★ · 紧急度判断交给规则引擎还是 LLM?
事件队列的优先级要在设计时确定。如果判断本身需要语义理解(新消息是否比当前任务更紧急),应由规则引擎还是另一个 LLM 调用来做?各有什么代价?(参见 6.2.6 事件路由器。)
2 ★★ · 积压 20 个事件时怎么排
队列中积压 10 个工具结果、5 条用户消息、5 个系统提醒,如何组织呈现顺序和格式,让模型不遗漏关键信息?(参见状态栏标记与汇总。)
3 ★★★ · 虚拟身份还是用户本人身份
独立身份可后台自主操作,但第三方可能不信任非真人身份;以用户本人身份操作上下文和权限更完整,却带来信任授权和安全边界问题。什么场景选哪种?
4 ★★ · 端到端语音 Agent 的可观测性
ASR-LLM-TTS 合成单一模型后延迟更低,但某环节(如识别)出错更难调试修复。如何设计它的可观测性系统?
5 ★ · “边想边说”要不要模仿人的毛病
Step-Audio R1 用 MPS 双脑实现边想边说。人边想边说时会说出未经深思的话、自我纠正、用填充词。Agent 应该模仿这些吗?
6 ★★ · 标注不完整时回退到坐标预测吗
SoM 和 DOM 索引都要先检测和标注元素。界面有非标准控件或动态元素时,标注可能不完整或不准确,这时应回退到坐标预测吗?
7 ★★ · 遥操作数据质量
几百美元的平台让遥操作采数据变便宜,但质量高度依赖操作者技能。不熟练的数据会怎样影响 VLA 训练?如何在采集阶段自动筛掉低质量数据?
8 ★★★ · 统一模型还是可替换的快慢分工
未来五年的 Agent 应优先追求更强的统一模型,还是保留可替换的快慢分工?结合延迟、可观测性、模型迭代速度和任务风险讨论。
9 ★★ · 押注纯视觉,还是两条路径都维护
Canvas/WebGL、跨平台自绘控件越来越多,不提供结构化信息。Computer Use 应押注纯视觉,还是同时维护结构化与视觉两条路径?成本和收益各是什么?
10 ★★ · 动作分块遇到环境突变
执行中物体被移走,预生成的动作序列就失效。如何在分块的效率和对环境变化的响应速度之间取得平衡?(可用上方动作分块演示试不同块长。)
11 ★★★ · 快速交互不能造成无法挽回的后果
语音里“说错了再纠正”,Computer Use 里“先点再看”,机器人里“走一步看一步”。如何用动作分级、可逆操作、状态确认、权限控制和安全停止来保证安全?
12 ★★★ · 同一原语在两个时间尺度上的差异
任选唤醒、安全点、取消、抢占、快慢分离之一,说明它在事件驱动(秒—天)与机器人动作分块(毫秒)中的实现差异。差异主要由环境变化速度、动作可逆性,还是观察获取成本决定?