第06章-交互与观察动作空间

一句话定位 :前五章的 Agent 与世界"轮流行动",本章打破这个前提------从模态 (语音/屏幕/机器人)与时机(同步→异步事件驱动)两个维度扩展观察空间与动作空间。上一页:第05章-Coding Agent与通用Agent,下一页:第07章-Agent评估。

小白入门:为什么 Agent 需要"打破轮流"?

想象你在用 Siri:你说一句话,Siri 想一会儿,给你一个回答。你说一句,它回一句------这就是回合制。

但真实世界不是回合制的。你在跟同事开会时,手机响了------你不会等会议结束才看手机;你正在做饭时,孩子突然哭了------你不会等菜炒完才去哄孩子。真实环境不会等你反应完毕再发生下一件事。

前五章的 Agent 就是"回合制"的:用户说完一句,Agent 想一段、调用几个工具,再回一句;在它思考的这段时间里,世界被默认为静止的。这个前提如此自然,以至于很少被当成一个假设写出来。

本章要挑战的正是这个前提。


一、模态与触发时机的扩展

1.1 两个维度,四个方向

把观察空间和动作空间摊开,它们各有三个可以扩展的方向:

复制代码
              观察空间的扩展          动作空间的扩展
内容(第2-5章)  上下文工程、记忆知识库    工具、代码生成
模态(本章)     语音、屏幕、物理传感器    说话、点击、关节运动
时机(本章)     世界主动推送、连续流      跨回合、可打断、可抢占
  • 模态 决定观察和动作的形式:Agent 是只读文本,还是也能听见声音、看见屏幕、感知力矩?
  • 触发时机 决定观察和动作的节奏:观察是 Agent 主动去取,还是世界主动推来?动作是必须在一个回合内做完,还是可以跨越回合、中途被打断?

1.2 四个场景,四个时间尺度

尺度 场景 观察侧的变化 动作侧的变化
秒---天 异步与事件驱动 会被外部事件主动唤醒 动作跨回合:先发起,后续靠事件收尾
10ms---1s 语音 边说边听,不等一句说完 边想边说,可被打断
亚秒---秒 Computer Use 屏幕在两帧之间持续变化 动作后必须重新确认现实是否仍符合计划
毫秒 机器人 传感器连续回流 动作分块:一次规划一小段,可被抢占

1.3 五原语贯穿全章

四个场景共享同一套控制原语:

原语 含义 通俗类比
唤醒 Agent 从等待状态被事件激活 闹钟响了,你从睡梦中醒来
安全点 一段推理结束、一次工具返回等"事件可被消费的边界" 红绿灯------不是随时都能过马路,要等到绿灯
取消 在安全点中断当前操作 你正在写邮件,突然说"算了不写了"
抢占 紧急事件打断当前任务,优先处理 你正在开会,老板突然来电
快慢分离 前台快模型低延迟维持对话,后台慢模型负责推理 前台接待员先回应你,后台专家慢慢分析

关键论断:"回合制是模型与接口的一种交互约定,不是环境的性质。"------真实环境不会等模型反应。


下面用一张图把四个场景与五原语的关系串起来:
#mermaid-svg-2OFy7SDDpt2C4lxa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2OFy7SDDpt2C4lxa .error-icon{fill:#552222;}#mermaid-svg-2OFy7SDDpt2C4lxa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2OFy7SDDpt2C4lxa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2OFy7SDDpt2C4lxa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2OFy7SDDpt2C4lxa .marker.cross{stroke:#333333;}#mermaid-svg-2OFy7SDDpt2C4lxa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2OFy7SDDpt2C4lxa p{margin:0;}#mermaid-svg-2OFy7SDDpt2C4lxa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2OFy7SDDpt2C4lxa .cluster-label text{fill:#333;}#mermaid-svg-2OFy7SDDpt2C4lxa .cluster-label span{color:#333;}#mermaid-svg-2OFy7SDDpt2C4lxa .cluster-label span p{background-color:transparent;}#mermaid-svg-2OFy7SDDpt2C4lxa .label text,#mermaid-svg-2OFy7SDDpt2C4lxa span{fill:#333;color:#333;}#mermaid-svg-2OFy7SDDpt2C4lxa .node rect,#mermaid-svg-2OFy7SDDpt2C4lxa .node circle,#mermaid-svg-2OFy7SDDpt2C4lxa .node ellipse,#mermaid-svg-2OFy7SDDpt2C4lxa .node polygon,#mermaid-svg-2OFy7SDDpt2C4lxa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2OFy7SDDpt2C4lxa .rough-node .label text,#mermaid-svg-2OFy7SDDpt2C4lxa .node .label text,#mermaid-svg-2OFy7SDDpt2C4lxa .image-shape .label,#mermaid-svg-2OFy7SDDpt2C4lxa .icon-shape .label{text-anchor:middle;}#mermaid-svg-2OFy7SDDpt2C4lxa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2OFy7SDDpt2C4lxa .rough-node .label,#mermaid-svg-2OFy7SDDpt2C4lxa .node .label,#mermaid-svg-2OFy7SDDpt2C4lxa .image-shape .label,#mermaid-svg-2OFy7SDDpt2C4lxa .icon-shape .label{text-align:center;}#mermaid-svg-2OFy7SDDpt2C4lxa .node.clickable{cursor:pointer;}#mermaid-svg-2OFy7SDDpt2C4lxa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2OFy7SDDpt2C4lxa .arrowheadPath{fill:#333333;}#mermaid-svg-2OFy7SDDpt2C4lxa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2OFy7SDDpt2C4lxa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2OFy7SDDpt2C4lxa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2OFy7SDDpt2C4lxa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2OFy7SDDpt2C4lxa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2OFy7SDDpt2C4lxa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2OFy7SDDpt2C4lxa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2OFy7SDDpt2C4lxa .cluster text{fill:#333;}#mermaid-svg-2OFy7SDDpt2C4lxa .cluster span{color:#333;}#mermaid-svg-2OFy7SDDpt2C4lxa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2OFy7SDDpt2C4lxa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2OFy7SDDpt2C4lxa rect.text{fill:none;stroke-width:0;}#mermaid-svg-2OFy7SDDpt2C4lxa .icon-shape,#mermaid-svg-2OFy7SDDpt2C4lxa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2OFy7SDDpt2C4lxa .icon-shape p,#mermaid-svg-2OFy7SDDpt2C4lxa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2OFy7SDDpt2C4lxa .icon-shape .label rect,#mermaid-svg-2OFy7SDDpt2C4lxa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2OFy7SDDpt2C4lxa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2OFy7SDDpt2C4lxa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2OFy7SDDpt2C4lxa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 五原语
四个场景(时间尺度递减)
异步事件驱动

秒---天
语音

10ms---1s
Computer Use

亚秒---秒
机器人

毫秒
唤醒
安全点
取消
抢占
快慢分离

二、异步与事件驱动:当世界主动找上门

2.1 为什么需要异步?

类比:同步 Agent 就像一个只会排队的柜台------每次只能处理一个顾客,处理完才能叫下一个号。异步 Agent 更像一个灵活的秘书------桌上摆着多个待处理的事项(邮件、电话、来访者),根据紧急程度决定先处理哪个,处理到一半如果有更紧急的事情也可以暂停切换。

在同步模式下,Agent 要么等后台任务完成才能与用户对话,要么等对话结束才能处理新到达的事件。但真实助理场景需要:

  • 异步执行是常态------许多任务需要长时间运行,不应阻塞用户交互
  • 事件优先级的动态判断------不是所有事件都同等重要
  • 中断和恢复的流畅性------被打断的对话或任务应该能够自然恢复

重要提醒:"不能仅凭代码用了 asyncio,就认定模型也具备原生异步能力。"------代码层面的异步 ≠ 模型层面的异步。

2.2 OpenClaw 的事件驱动机制

开源框架 OpenClaw 通过 Gateway 控制平面接收多渠道消息,并将其路由到 Agent 运行时。三种内置机制:

机制 作用 类比
Hooks(事件钩子) 响应 Agent 生命周期事件(会话创建、重置等) GitHub Actions 中的事件触发器
Cron(定时调度器) 按 cron 表达式执行周期性任务 闹钟------每周五上午 9 点自动响
Heartbeat(心跳守护) 每隔 N 分钟唤醒一次 Agent 定时巡逻------每隔一段时间检查一次

真正的短板:对于第三方事件源(新邮件到达、外部 API 回调、紧急通知),OpenClaw 缺乏即时接入通道,只能等到下一个 Cron/Heartbeat 周期才可能感知。

2.3 PineClaw 案例:为什么延迟不可接受

Pine AI 是一款代替用户拨打真实电话的 AI 助手(协商账单、取消订阅、处理保险理赔)。通话过程中可能随时需要用户介入:

  • 实时身份验证:客服要求验证账户持有人身份,需要用户立即提供安全码
  • 三方通话确认:客服要求与账户持有人直接对话,需要用户几秒内接听
  • 进展同步与决策确认:协商到关键节点(对方提出降价方案),需要用户确认

如果依靠 Heartbeat 定时轮询,用户可能在客服等待验证码时迟迟收不到通知,导致客服挂断、通话失败。

解决方案:引入 Channel 机制------在 Gateway 和 Pine API 之间建立实时事件通道,关键事件即时推送。

核心洞察:"真正的'主动服务'不仅需要 Agent 能定时检查事件,更需要事件能主动通知 Agent。"

2.4 事件触发工具的三类

工具类型 处理什么 例子
定时器(set_timer) 依赖物理时间的事件 下周一上午10:00致电银行
后台任务监控(monitor_shell) 异步执行的命令行任务事件 监控长时间运行的脚本输出
外部事件通道(connect_channel) 新邮件、API 回调、IM 消息等 PineClaw 的 Channel 机制

2.5 用户沟通工具

传统 Agent(如 Claude Code、Manus)采用原生 ReAct 循环------Agent "说"的所有话都直接发送给用户,用户必须在应用中打开指定会话才能对话。

OpenClaw 打破了这一范式:用户无需感知会话的存在,Agent 和用户都可以随时给对方发消息------就像一个秘书通过文本消息异步沟通,具备"活人感"。

通知机制同时也是用户召回机制------Agent 根据紧急程度、用户状态、内容性质综合决定渠道选择。

2.6 虚拟身份与隔离执行环境

关键架构选择:Agent 应该直接管理用户的个人账号,还是拥有自己的虚拟身份?

直接管理看似便捷,但一旦 Agent 出错或被攻破,用户的全部数字身份都将暴露。更稳妥的方案是赋予 Agent 一套独立的虚拟身份------如同秘书拥有自己的办公电话和邮箱一样。

身份的明确性不仅没有削弱信任,反而增强了沟通的真实性。

隔离执行环境:虚拟电脑(VM/容器)和虚拟手机(Android 模拟器)提供操作系统级隔离------即使 Agent 执行了错误操作,最多也只会导致虚拟环境崩溃,而不会影响用户的真实设备。

两大现实挑战:

  1. 反机器人机制:许多网站用 CAPTCHA 和 IP 信誉检测拦截自动化访问,因此需要配置住宅代理网络。
  2. 访问用户真实账号:采用 Human-in-the-Loop 认证------通过远程桌面让用户亲自完成登录。

2.7 事件处理三策略

当多个事件同时涌向同一个 Agent 实例时:

复制代码
                    事件到达
                       │
              ┌────────┴────────┐
              │  紧急度判定      │
              └────────┬────────┘
                       │
         ┌─────────────┼─────────────┐
         │             │             │
    取消式(紧急)   队列式(常规)   并行式(独立)
         │             │             │
    立即中断当前    入队等待安全点   另起会话独立处理
    清空队列        批量追加轨迹    快速回复用户
    重新调用LLM    LLM综合处理     标记[与主任务并行]
策略 适用场景 处理方式 例子
取消式 紧急事件 主动中断当前步骤,提前制造安全点 用户说"停!我说错了"
队列式 常规事件 入队等待,到安全点批量消费 用户补充"只看最近 1 个月"
并行式 独立轻量查询 另起会话,快速回复 用户问"今天天气怎样?"

紧急度判定:建议使用轻量级分类 LLM 作为事件路由器,在事件到达时快速判断应该采用哪种策略。

取消点必须是工具或推理能够安全收尾的位置;未完成的工具结果用显式占位符表示,不能伪造成功。

用 Mermaid 重画这张决策图,更直观地呈现三条分支:
#mermaid-svg-9UWheY1CcUh1fw7Q{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9UWheY1CcUh1fw7Q .error-icon{fill:#552222;}#mermaid-svg-9UWheY1CcUh1fw7Q .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9UWheY1CcUh1fw7Q .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9UWheY1CcUh1fw7Q .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9UWheY1CcUh1fw7Q .marker.cross{stroke:#333333;}#mermaid-svg-9UWheY1CcUh1fw7Q svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9UWheY1CcUh1fw7Q p{margin:0;}#mermaid-svg-9UWheY1CcUh1fw7Q .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9UWheY1CcUh1fw7Q .cluster-label text{fill:#333;}#mermaid-svg-9UWheY1CcUh1fw7Q .cluster-label span{color:#333;}#mermaid-svg-9UWheY1CcUh1fw7Q .cluster-label span p{background-color:transparent;}#mermaid-svg-9UWheY1CcUh1fw7Q .label text,#mermaid-svg-9UWheY1CcUh1fw7Q span{fill:#333;color:#333;}#mermaid-svg-9UWheY1CcUh1fw7Q .node rect,#mermaid-svg-9UWheY1CcUh1fw7Q .node circle,#mermaid-svg-9UWheY1CcUh1fw7Q .node ellipse,#mermaid-svg-9UWheY1CcUh1fw7Q .node polygon,#mermaid-svg-9UWheY1CcUh1fw7Q .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9UWheY1CcUh1fw7Q .rough-node .label text,#mermaid-svg-9UWheY1CcUh1fw7Q .node .label text,#mermaid-svg-9UWheY1CcUh1fw7Q .image-shape .label,#mermaid-svg-9UWheY1CcUh1fw7Q .icon-shape .label{text-anchor:middle;}#mermaid-svg-9UWheY1CcUh1fw7Q .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-9UWheY1CcUh1fw7Q .rough-node .label,#mermaid-svg-9UWheY1CcUh1fw7Q .node .label,#mermaid-svg-9UWheY1CcUh1fw7Q .image-shape .label,#mermaid-svg-9UWheY1CcUh1fw7Q .icon-shape .label{text-align:center;}#mermaid-svg-9UWheY1CcUh1fw7Q .node.clickable{cursor:pointer;}#mermaid-svg-9UWheY1CcUh1fw7Q .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-9UWheY1CcUh1fw7Q .arrowheadPath{fill:#333333;}#mermaid-svg-9UWheY1CcUh1fw7Q .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9UWheY1CcUh1fw7Q .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9UWheY1CcUh1fw7Q .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9UWheY1CcUh1fw7Q .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-9UWheY1CcUh1fw7Q .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9UWheY1CcUh1fw7Q .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-9UWheY1CcUh1fw7Q .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9UWheY1CcUh1fw7Q .cluster text{fill:#333;}#mermaid-svg-9UWheY1CcUh1fw7Q .cluster span{color:#333;}#mermaid-svg-9UWheY1CcUh1fw7Q div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9UWheY1CcUh1fw7Q .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-9UWheY1CcUh1fw7Q rect.text{fill:none;stroke-width:0;}#mermaid-svg-9UWheY1CcUh1fw7Q .icon-shape,#mermaid-svg-9UWheY1CcUh1fw7Q .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9UWheY1CcUh1fw7Q .icon-shape p,#mermaid-svg-9UWheY1CcUh1fw7Q .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-9UWheY1CcUh1fw7Q .icon-shape .label rect,#mermaid-svg-9UWheY1CcUh1fw7Q .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9UWheY1CcUh1fw7Q .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-9UWheY1CcUh1fw7Q .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-9UWheY1CcUh1fw7Q :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 紧急
常规
独立轻量
事件到达
紧急度判定

(轻量分类 LLM)
取消式
队列式
并行式
立即中断当前步骤
清空队列
重新调用 LLM
入队等待安全点
批量追加轨迹
LLM 综合处理
另起会话独立处理
快速回复用户
标记与主任务并行

2.8 事件的结构化建模

处理的前提是理解。每个输入都被建模为包含四个维度的结构化事件:

维度 含义 例子
来源(谁) 用户本人、联系人、陌生人、系统通知 {"type": "email", "sender": "client@example.com"}
渠道(方式) 电话、短信、IM、邮件、定时器、工具结果 gmail_webhook
内容(什么) 消息文本、情感色彩、紧急程度 {"subject": "退款请求", "body": "..."}
上下文(背景) 是否是对之前对话的回复、与当前任务的关联 {"priority": "high", "customer_tier": "vip"}

只有当这些维度被清晰地建模为结构化事件时,Agent 才能在多方通信中保持清晰的认知------避免将用户输入误当成工具结果,或将藏有指令的工具结果误认为用户指令(提示注入)。

2.9 兼容同步接口的五条规则

当模型或接口不支持原生异步时,需要在同步格式中表达异步语义:

规则 内容 通俗解读
规则1 及时记录已完成的 assistant 消息和工具调用项 做完一步记一步
规则2 工具调用完成时才记录 tool result 没做完的不写结果
规则3 工具执行中的打断需要占位符 被打断时插一个"正在后台执行"的标记
规则4 取消未完成的生成,保留已确认完成的消息 不能拿半截输出当前缀
规则5 非打断事件进入队列等待批处理 不急的事排队等

核心原则:"不能伪造成功、不能编造未到达数据。"------占位符明确表示"未完成",防止模型把"任务已启动"误当成"任务已完成"。

2.10 任务句柄:解耦启动与完成

传统工具设计隐含"调用即完成"的语义。异步范式下应将"启动"和"完成"解耦:

  • initiate_phone_call:启动电话呼叫,立即返回任务 ID
  • 通话进展通过事件通知(phone_call_connected、phone_call_ended)

关键在于工具的名称和描述本身就要传达异步语义------当模型看到 initiate_phone_call 时,它会自然推断这是"发起"而非"完成"。

2.11 GPT-6 Astra 原生异步

截至 2026 年 9 月,GPT-6 Astra 已提供两种原生异步能力:

能力 含义 价值
异步工具调用 发起耗时查询后可继续推理,结果到达后再做决策 不必等查询完成才能做其他事
回合中途引导 用户可在任务进行中追加要求 不必等一整轮回答结束才表达变化
复制代码
兼容方案(运行时安排异步节奏)         原生异步(模型理解等待与中途变化)
─────────────────────────────         ─────────────────────────────
任务在后台运行                        发起耗时查询(如查会议场地)
明确记录"尚未完成"                    等待期间继续工作(整理议程)
运行时接入新事件                      结果到达后作出决策(比较场地)
决定排队、打断或并行处理              用户中途补充要求(预算/人数变化)
模型仍按同步交互方式接收信息          保留已完成的工作,将新要求纳入当前任务
                                      调整后续行动

可靠性三检查:(1) 结果归属与未完成状态------能否避免编造数据?(2) 任务恢复与动作控制------能否区分修改计划与停止执行?(3) 多条更新的综合使用------能否同时遵守所有约束?


三、语音:最自然的人机接口

3.1 为什么语音重要?

正常说话的速度约为打字的四倍,而且不占用双手与视线------天然适合把 Agent 放进持续工作、随时可能被打断的输入输出回路。

语音的价值不只是把文字换成声音。它改变了交互的时机 ------从轮流说话变成同时听说。

3.2 语音三范式

范式 核心结构 主要优势 主要限制
级联 VAD→ASR→LLM→TTS 模块清晰、易替换、易调试 延迟累积,副语言信息在接口处丢失
端到端 Omni 原生音频输入输出,按轮次交互 延迟较低,保留语气、情绪和环境声 仍依赖轮次,训练和调试成本较高
全双工 原生音频,持续听、说和决策 支持重叠说话、自然打断和连续流 模型训练、控制和评估都更复杂

贯穿三种范式的主线:如何摆脱"轮流说话"和 VAD 对发言权的猜测。级联和 Omni 仍要划分轮次,只有全双工把"该谁说话"变成模型的持续决策。

3.3 范式一:级联流水线

绝大多数商业语音助手都基于串行流水线:

复制代码
用户说话 ──→ VAD ──→ ASR ──→ LLM ──→ TTS ──→ 用户听到回复
            (判断    (音频   (理解   (文字
             说完?)  转文字)  并回复) 转语音)

延迟累积:
VAD等待 500-800ms + ASR 50-200ms + LLM 100-500ms + TTS 200-500ms
= 总响应时间 最优≈0.9s, 最差≈2.3s

三个问题:

  1. 延迟累积:必须等待一段静音才能确认说完
  2. 信息丢失:有声/无声二值信号无法表达犹豫、情绪、附和和环境声
  3. 上下文被切断:邮箱、人名和专有名词可能被分片识别而出错

用 Mermaid 表示这条串行流水线与延迟累积:
#mermaid-svg-6V202G4H8qc00ZXZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-6V202G4H8qc00ZXZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6V202G4H8qc00ZXZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6V202G4H8qc00ZXZ .error-icon{fill:#552222;}#mermaid-svg-6V202G4H8qc00ZXZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6V202G4H8qc00ZXZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6V202G4H8qc00ZXZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6V202G4H8qc00ZXZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6V202G4H8qc00ZXZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6V202G4H8qc00ZXZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6V202G4H8qc00ZXZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6V202G4H8qc00ZXZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6V202G4H8qc00ZXZ .marker.cross{stroke:#333333;}#mermaid-svg-6V202G4H8qc00ZXZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6V202G4H8qc00ZXZ p{margin:0;}#mermaid-svg-6V202G4H8qc00ZXZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-6V202G4H8qc00ZXZ .cluster-label text{fill:#333;}#mermaid-svg-6V202G4H8qc00ZXZ .cluster-label span{color:#333;}#mermaid-svg-6V202G4H8qc00ZXZ .cluster-label span p{background-color:transparent;}#mermaid-svg-6V202G4H8qc00ZXZ .label text,#mermaid-svg-6V202G4H8qc00ZXZ span{fill:#333;color:#333;}#mermaid-svg-6V202G4H8qc00ZXZ .node rect,#mermaid-svg-6V202G4H8qc00ZXZ .node circle,#mermaid-svg-6V202G4H8qc00ZXZ .node ellipse,#mermaid-svg-6V202G4H8qc00ZXZ .node polygon,#mermaid-svg-6V202G4H8qc00ZXZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6V202G4H8qc00ZXZ .rough-node .label text,#mermaid-svg-6V202G4H8qc00ZXZ .node .label text,#mermaid-svg-6V202G4H8qc00ZXZ .image-shape .label,#mermaid-svg-6V202G4H8qc00ZXZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-6V202G4H8qc00ZXZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-6V202G4H8qc00ZXZ .rough-node .label,#mermaid-svg-6V202G4H8qc00ZXZ .node .label,#mermaid-svg-6V202G4H8qc00ZXZ .image-shape .label,#mermaid-svg-6V202G4H8qc00ZXZ .icon-shape .label{text-align:center;}#mermaid-svg-6V202G4H8qc00ZXZ .node.clickable{cursor:pointer;}#mermaid-svg-6V202G4H8qc00ZXZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-6V202G4H8qc00ZXZ .arrowheadPath{fill:#333333;}#mermaid-svg-6V202G4H8qc00ZXZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6V202G4H8qc00ZXZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6V202G4H8qc00ZXZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6V202G4H8qc00ZXZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-6V202G4H8qc00ZXZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6V202G4H8qc00ZXZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-6V202G4H8qc00ZXZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6V202G4H8qc00ZXZ .cluster text{fill:#333;}#mermaid-svg-6V202G4H8qc00ZXZ .cluster span{color:#333;}#mermaid-svg-6V202G4H8qc00ZXZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6V202G4H8qc00ZXZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-6V202G4H8qc00ZXZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-6V202G4H8qc00ZXZ .icon-shape,#mermaid-svg-6V202G4H8qc00ZXZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6V202G4H8qc00ZXZ .icon-shape p,#mermaid-svg-6V202G4H8qc00ZXZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-6V202G4H8qc00ZXZ .icon-shape .label rect,#mermaid-svg-6V202G4H8qc00ZXZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6V202G4H8qc00ZXZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-6V202G4H8qc00ZXZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-6V202G4H8qc00ZXZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户说话
VAD

判断说完?

500-800ms
ASR

音频转文字

50-200ms
LLM

理解并回复

100-500ms
TTS

文字转语音

200-500ms
用户听到回复

3.4 流式感知:从串行到并行

保留模块化分工的前提下,让各阶段尽早产出增量结果:

优化 做法 效果
ASR 边听边转 VAD 检测到开始说话就调用 ASR,流式生成临时转录 不等说完就开始识别
LLM 推测执行 临时转录内容就送给 LLM 不等最终文本就开始思考
LLM 分段输出 第一段适合播报的文本立即交给 TTS 不等完整回复就开始说话
TTS 增量合成 持续返回音频块 生成、合成和播放重叠进行

流式模型可输出声学事件标记:speak_start/end、emotion、laugh、sigh、noise------这些标记和文字 token 形成统一事件流,Agent 可以据此识别犹豫、打断和环境变化。

3.5 范式二:端到端 Omni

Omni 方案用同一个模型直接听音频、生成回复并输出语音,有机会保留情绪、语调和环境声等信息。

优势:可以理解声音中的停顿和犹豫,可以传递更丰富的副语言信息(唱歌、特殊语调)。

局限:仍然假设轮流说话,通常要靠 VAD 划分发言权,用户报数字时的中途停顿仍可能被误判为说完。

主流方案对比:

方案 特点 局限
OpenAI Realtime 服务端 VAD + 轮次检测,异步函数调用 本质仍在 VAD 框架下
Gemini Live VAD 敏感度可配置,打断保留已发信息 与 OpenAI 策略类似
Qwen3-Omni Thinker-Talker MoE,首包延迟 234 ms 仍依赖轮次检测
Step-Audio 2 潜在音频编码+RL,副语言理解 83.09% CoT+RAG+工具

3.6 范式三:全双工交互模型

全双工不再预设轮次,而是持续听、持续说,并不断决定继续、停顿、打断或调用工具。

  • Moshi(Kyutai,2024):并行建模用户和模型的音频流,重叠说话和打断可以成为模型的自然行为。
  • 交互模型(Thinking Machines Lab):交互性内建在模型中,微轮次机制以短音频块持续推进。
  • GPT-Live(OpenAI):持续处理输入并生成输出,能等待用户、附和、被打断,也能处理实时翻译。

全双工把"该谁说话"从外部 VAD 的猜测变成了模型内部的持续决策------这是语音交互的终极形态。

3.7 认知时序:快慢分离

交互表现和智能上限是两个维度。------前台模型要在用户仍然在线时回应,后台模型可以花更多时间思考。

三种方案:

方案 做法 问题
快思考回应 + 慢思考回答 快模型先给即时回应,慢模型后台推导 简单问题被重复处理;复杂问题可能前后矛盾
快思考交互 + 慢思考提醒 后台模型通过状态栏向前台提供建议 通信间接,前台可能误解建议
端到端思考与表达统一 思考能力内化到端到端音频模型 升级时要重新兼顾智能、延迟和表达

快慢分离的工程优势:前台快模型只负责低延迟维持对话,后台慢模型负责推理规划;更强的思考模型发布后,只需替换后台模型,不必重新训练整套实时语音系统。

实测数据 (2026-08 时点):采用快慢分离架构的 Pine AI 语音 Agent 在 τ³-Voice Leaderboard 上取得第一名,超过 Grok Voice、GPT-Realtime-2 等------解耦架构并不天然落后于端到端模型。

3.8 更像人的语音合成

传统 TTS 过于流畅、零停顿,反而容易暴露机器身份。停顿、填充词和偶尔的重复,是人类表达不确定性和思考状态的信号。

可以让主 LLM 在文本之外输出控制标记(如 THINKING、EMO:happy、SPEED:0.8x),由 TTS 映射为停顿、韵律、语速或笑声、叹气等非语言音频。


四、Computer Use:GUI 自动化 Agent

4.1 小白入门

语音把时间轴推到了毫秒级,但观察仍是一维的声音流。Computer Use 把同一个问题搬上二维屏幕:观察变成持续变化的像素,动作变成坐标上的点击与输入。

核心循环:

复制代码
┌──────────────────────────────────────────────────┐
│           Computer Use 感知---思考---行动循环          │
│                                                  │
│  ① 截图 ──→ ② 模型推理(截图 + 任务指令)           │
│              输出:思考 + 具体动作                │
│              ↓                                   │
│  ④ 界面变化 ←── ③ 执行动作(鼠标 / 键盘)           │
│     ↓                                            │
│  等待界面稳定 → 回到 ① 截图                      │
│                                                  │
│  典型:完成一个多步表单需要 10-20 轮循环           │
└──────────────────────────────────────────────────┘

关键区分 :看懂界面≠完成任务。前者可以用一次截图问答测量;后者要求模型在每一步之后重新确认现实是否仍符合计划。

用 Mermaid 表示这个感知-思考-行动循环:
#mermaid-svg-F5cGt2D1nORyUo0f{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-F5cGt2D1nORyUo0f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-F5cGt2D1nORyUo0f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-F5cGt2D1nORyUo0f .error-icon{fill:#552222;}#mermaid-svg-F5cGt2D1nORyUo0f .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-F5cGt2D1nORyUo0f .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-F5cGt2D1nORyUo0f .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-F5cGt2D1nORyUo0f .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-F5cGt2D1nORyUo0f .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-F5cGt2D1nORyUo0f .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-F5cGt2D1nORyUo0f .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-F5cGt2D1nORyUo0f .marker{fill:#333333;stroke:#333333;}#mermaid-svg-F5cGt2D1nORyUo0f .marker.cross{stroke:#333333;}#mermaid-svg-F5cGt2D1nORyUo0f svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-F5cGt2D1nORyUo0f p{margin:0;}#mermaid-svg-F5cGt2D1nORyUo0f .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-F5cGt2D1nORyUo0f .cluster-label text{fill:#333;}#mermaid-svg-F5cGt2D1nORyUo0f .cluster-label span{color:#333;}#mermaid-svg-F5cGt2D1nORyUo0f .cluster-label span p{background-color:transparent;}#mermaid-svg-F5cGt2D1nORyUo0f .label text,#mermaid-svg-F5cGt2D1nORyUo0f span{fill:#333;color:#333;}#mermaid-svg-F5cGt2D1nORyUo0f .node rect,#mermaid-svg-F5cGt2D1nORyUo0f .node circle,#mermaid-svg-F5cGt2D1nORyUo0f .node ellipse,#mermaid-svg-F5cGt2D1nORyUo0f .node polygon,#mermaid-svg-F5cGt2D1nORyUo0f .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-F5cGt2D1nORyUo0f .rough-node .label text,#mermaid-svg-F5cGt2D1nORyUo0f .node .label text,#mermaid-svg-F5cGt2D1nORyUo0f .image-shape .label,#mermaid-svg-F5cGt2D1nORyUo0f .icon-shape .label{text-anchor:middle;}#mermaid-svg-F5cGt2D1nORyUo0f .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-F5cGt2D1nORyUo0f .rough-node .label,#mermaid-svg-F5cGt2D1nORyUo0f .node .label,#mermaid-svg-F5cGt2D1nORyUo0f .image-shape .label,#mermaid-svg-F5cGt2D1nORyUo0f .icon-shape .label{text-align:center;}#mermaid-svg-F5cGt2D1nORyUo0f .node.clickable{cursor:pointer;}#mermaid-svg-F5cGt2D1nORyUo0f .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-F5cGt2D1nORyUo0f .arrowheadPath{fill:#333333;}#mermaid-svg-F5cGt2D1nORyUo0f .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-F5cGt2D1nORyUo0f .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-F5cGt2D1nORyUo0f .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-F5cGt2D1nORyUo0f .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-F5cGt2D1nORyUo0f .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-F5cGt2D1nORyUo0f .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-F5cGt2D1nORyUo0f .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-F5cGt2D1nORyUo0f .cluster text{fill:#333;}#mermaid-svg-F5cGt2D1nORyUo0f .cluster span{color:#333;}#mermaid-svg-F5cGt2D1nORyUo0f div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-F5cGt2D1nORyUo0f .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-F5cGt2D1nORyUo0f rect.text{fill:none;stroke-width:0;}#mermaid-svg-F5cGt2D1nORyUo0f .icon-shape,#mermaid-svg-F5cGt2D1nORyUo0f .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-F5cGt2D1nORyUo0f .icon-shape p,#mermaid-svg-F5cGt2D1nORyUo0f .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-F5cGt2D1nORyUo0f .icon-shape .label rect,#mermaid-svg-F5cGt2D1nORyUo0f .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-F5cGt2D1nORyUo0f .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-F5cGt2D1nORyUo0f .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-F5cGt2D1nORyUo0f :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ① 截图
② 模型推理

截图 + 任务指令
输出:思考 + 具体动作
③ 执行动作

鼠标 / 键盘
④ 界面变化
等待界面稳定

4.2 动作空间设计

Anthropic 的参考实现把完整交互能力分成四类工具:

工具类别 包含操作 类比
GUI 操作(computer) 鼠标移动/点击/拖拽、键盘输入/组合键、滚动 你的手------操作鼠标键盘
感知动作 截图、光标位置、等待界面稳定 你的眼睛------看屏幕
命令执行(bash) 持久终端会话、哨兵字符串检测 你的命令行------直接执行
文件编辑 查看/创建/字符串替换/撤销 你的编辑器------修改文件

坐标缩放机制:截图缩小到训练分辨率 → 模型推理 → 坐标放大回实际分辨率 → xdotool 执行。每个动作间隔 2-5 秒,约为人类速度的 1/3 到 1/5。

4.3 视觉定位三路线

Agent 如何在截图中找到目标元素?

路线 做法 优势 局限
Set-of-Mark(视觉标注) 在截图上标注编号,模型选编号 直观,不需要额外信息 标注本身可能干扰界面
结构化元素索引 DOM/Accessibility Tree 提供元素列表 把开放式坐标预测变成封闭式选择题 不是所有应用都有可用的 DOM
纯坐标预测 模型直接输出 (x, y) 坐标 最通用,不依赖任何辅助信息 需要宽高比双向分辨率缩放,精度最难

设计建议:SoM 标注失效时可回退坐标预测;纯视觉 vs 双路径的维护成本需要权衡。

4.4 AOI 观察接口

Computer Use 的观察不只是截图,还需要高效压缩多模态历史:

  • 关键帧截图:只在界面发生显著变化时截图,而非每步都截
  • 音量门控转写:音频内容按音量阈值筛选后转写
  • 文字描述压缩:用文字描述替代旧截图,减少上下文消耗

4.5 世界模型:动作结果预测器

"会生成视频 ≠ 能指导机器人动作";"语言模型知道'杯子'是什么,并不代表它知道摩擦、接触会怎样改变未来状态。"

世界模型的作用:当前状态 + 候选动作 → 预测下一状态 → 比较 → 选择/重规划/安全停止。

复制代码
当前状态 + 候选动作 ──→ 世界模型 ──→ 预测下一状态
                                          │
                              ┌───────────┴───────────┐
                              │                       │
                         符合预期?              不符合预期?
                              │                       │
                         执行动作              重规划/安全停止

关键限制:"预测只能帮助选择,不能代替验收。"------世界模型帮你预判,但执行后仍需重新截图确认。

4.6 移动端生态壁垒

Computer Use 在移动端面临的不只是技术挑战,更是结构性利益冲突------Agent 绕过广告与流量变现链路,直接帮用户完成任务,应用商店和 App 开发者的收入模式被打破。

生态壁垒比技术更难------Agent 能技术上操作 App,但 App 可以通过检测自动化行为、限制 API、设计反爬机制来阻止 Agent。


五、机器人操作:以 XLeRobot 整理桌面为例

5.1 分层架构

机器人操作不是"一个模型直接控制关节",而是分层架构:

复制代码
┌──────────────────────────────────────────────┐
│  任务目标(分钟级)                            │
│  "把桌面整理干净"                              │
│      ↓                                        │
│  长程规划                                      │
│  分解为子任务:捡杯子 → 放架子 → 捡书 → 放书架       │
│      ↓                                        │
│  基本技能(pick / place / verify_state)           │
│  每个技能对应一段连续动作                      │
│      ↓                                        │
│  VLA 模型(1--10 Hz)                           │
│  接收观察+技能指令 → 输出连续动作              │
│      ↓                                        │
│  底层控制(50-1000Hz)                        │
│  关节角度、力矩控制                            │
└──────────────────────────────────────────────┘

用 Mermaid 表示这套分层架构:
#mermaid-svg-b7wWELGPKgZ79G1X{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-b7wWELGPKgZ79G1X .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-b7wWELGPKgZ79G1X .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-b7wWELGPKgZ79G1X .error-icon{fill:#552222;}#mermaid-svg-b7wWELGPKgZ79G1X .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-b7wWELGPKgZ79G1X .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-b7wWELGPKgZ79G1X .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-b7wWELGPKgZ79G1X .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-b7wWELGPKgZ79G1X .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-b7wWELGPKgZ79G1X .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-b7wWELGPKgZ79G1X .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-b7wWELGPKgZ79G1X .marker{fill:#333333;stroke:#333333;}#mermaid-svg-b7wWELGPKgZ79G1X .marker.cross{stroke:#333333;}#mermaid-svg-b7wWELGPKgZ79G1X svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-b7wWELGPKgZ79G1X p{margin:0;}#mermaid-svg-b7wWELGPKgZ79G1X .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-b7wWELGPKgZ79G1X .cluster-label text{fill:#333;}#mermaid-svg-b7wWELGPKgZ79G1X .cluster-label span{color:#333;}#mermaid-svg-b7wWELGPKgZ79G1X .cluster-label span p{background-color:transparent;}#mermaid-svg-b7wWELGPKgZ79G1X .label text,#mermaid-svg-b7wWELGPKgZ79G1X span{fill:#333;color:#333;}#mermaid-svg-b7wWELGPKgZ79G1X .node rect,#mermaid-svg-b7wWELGPKgZ79G1X .node circle,#mermaid-svg-b7wWELGPKgZ79G1X .node ellipse,#mermaid-svg-b7wWELGPKgZ79G1X .node polygon,#mermaid-svg-b7wWELGPKgZ79G1X .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-b7wWELGPKgZ79G1X .rough-node .label text,#mermaid-svg-b7wWELGPKgZ79G1X .node .label text,#mermaid-svg-b7wWELGPKgZ79G1X .image-shape .label,#mermaid-svg-b7wWELGPKgZ79G1X .icon-shape .label{text-anchor:middle;}#mermaid-svg-b7wWELGPKgZ79G1X .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-b7wWELGPKgZ79G1X .rough-node .label,#mermaid-svg-b7wWELGPKgZ79G1X .node .label,#mermaid-svg-b7wWELGPKgZ79G1X .image-shape .label,#mermaid-svg-b7wWELGPKgZ79G1X .icon-shape .label{text-align:center;}#mermaid-svg-b7wWELGPKgZ79G1X .node.clickable{cursor:pointer;}#mermaid-svg-b7wWELGPKgZ79G1X .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-b7wWELGPKgZ79G1X .arrowheadPath{fill:#333333;}#mermaid-svg-b7wWELGPKgZ79G1X .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-b7wWELGPKgZ79G1X .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-b7wWELGPKgZ79G1X .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-b7wWELGPKgZ79G1X .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-b7wWELGPKgZ79G1X .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-b7wWELGPKgZ79G1X .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-b7wWELGPKgZ79G1X .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-b7wWELGPKgZ79G1X .cluster text{fill:#333;}#mermaid-svg-b7wWELGPKgZ79G1X .cluster span{color:#333;}#mermaid-svg-b7wWELGPKgZ79G1X div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-b7wWELGPKgZ79G1X .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-b7wWELGPKgZ79G1X rect.text{fill:none;stroke-width:0;}#mermaid-svg-b7wWELGPKgZ79G1X .icon-shape,#mermaid-svg-b7wWELGPKgZ79G1X .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-b7wWELGPKgZ79G1X .icon-shape p,#mermaid-svg-b7wWELGPKgZ79G1X .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-b7wWELGPKgZ79G1X .icon-shape .label rect,#mermaid-svg-b7wWELGPKgZ79G1X .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-b7wWELGPKgZ79G1X .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-b7wWELGPKgZ79G1X .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-b7wWELGPKgZ79G1X :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 任务目标(分钟级)

把桌面整理干净
长程规划

捡杯子→放架子→捡书→放书架
基本技能

pick / place / verify_state
VLA 模型(1-10Hz)

观察+技能指令 → 连续动作
底层控制(50-1000Hz)

关节角度、力矩控制

5.2 VLA:Vision-Language-Action

"工具调用定义期望的状态变化,VLA 定义如何通过连续动作实现该状态变化。"

  • 工具调用:pick_up(cup) ------ 告诉你要把杯子拿起来
  • VLA:输出关节角度序列 ------ 告诉你怎么伸手、怎么抓、怎么放

5.3 动作分块

模型一次生成一小段动作,控制线程高频回放------在平滑性和反应速度之间做取舍。

类比:你开车时不是预先规划好全程的方向盘角度,而是每秒钟微调一次方向------动作分块就是让机器人走一步看一步。

5.4 Sim-to-Real:从仿真到现实

机器人在仿真环境中训练(成本低、可大规模、可安全试错),然后迁移到真实环境。核心挑战是仿真与现实的差距------摩擦系数、光照条件、物体形状的细微差异都可能导致训练好的策略在现实中失败。

5.5 XLeRobot 案例

"对于这个任务,硬件本体不是瓶颈,算法才是瓶颈。"------XLeRobot 用遥操作即可完成任务,说明硬件已足够,真正需要突破的是算法。


六、小结

核心洞察

  1. 回合制是约定,不是环境的性质------真实环境不会等模型反应
  2. 异步事件驱动 是 Agent 从被动工具到主动助手的关键跃迁
  3. 语音三范式 的演进主线是摆脱轮流说话------全双工是终极形态
  4. 快慢分离不只是延迟妥协,更是让交互能力与智能上限分别演进的模块化选择
  5. Computer Use 的难点不是看懂界面,而是每步之后重新确认现实是否仍符合计划
  6. 机器人操作的瓶颈在算法不在硬件------VLA + 动作分块 + 世界模型是当前路线
  7. 五原语(唤醒、安全点、取消、抢占、快慢分离)贯穿四个场景

五原语在不同尺度下的实现

原语 秒---天(异步) 10ms---1s(语音) 亚秒---秒(Computer Use) 毫秒(机器人)
唤醒 事件到达触发 VAD 检测到说话 界面变化检测 传感器阈值触发
安全点 工具返回/推理结束 轮次切换 截图后 动作分块边界
取消 占位符+重新调用 停止 TTS 播放 放弃当前操作 停止关节运动
抢占 紧急事件中断 用户打断 页面跳转 障碍物出现
快慢分离 前台对话+后台任务 快思考回应+慢思考推导 前台截图+后台规划 前台控制+后台重规划

思考题要点(12 题选摘)

说明:以下每题按「问题背景 → 关键权衡 → 判断依据」展开,便于课堂讨论或自测时对照本章内容。

1. 事件优先级:规则引擎 vs LLM 路由的代价权衡

  • 背景:2.7 节建议用轻量分类 LLM 做事件路由器,但规则引擎(关键词、来源白名单、紧急标记)在延迟与成本上更优。
  • 权衡:规则引擎可预测、零推理成本、易审计,但覆盖不了语义模糊的事件;LLM 路由能理解上下文,却引入额外延迟与不确定性,且自身可能误判。
  • 判断依据:高频、模式固定的事件(定时器、系统通知)走规则;低频、语义复杂的事件(用户自然语言补充、客户情绪变化)走 LLM;两者可级联------规则先兜底,LLM 只处理规则无法判定的残余。
  • 延伸设计:20 个积压事件的呈现顺序,应按「紧急度 × 可逆性 × 时效衰减」排序,而非单纯按到达时间;同一来源的事件应聚合,避免刷屏;不可逆操作(如已发出的电话)优先于可延后的查询。

2. 虚拟身份 vs 用户本人账号的信任与安全边界

  • 背景:2.6 节主张 Agent 拥有独立虚拟身份,但真实业务常需要访问用户账号(订单、银行、政务)。
  • 权衡:虚拟身份隔离性好、出错影响面小,但会遭遇反机器人机制、账号绑定与身份核验障碍;直接用用户账号体验顺畅,却把全部数字身份暴露在单点故障下。
  • 判断依据:按「操作可逆性 + 数据敏感度」划边界------只读查询可代理,写操作与资金/身份相关操作必须 Human-in-the-Loop;虚拟身份承担日常交互,真实账号仅在用户显式授权、短时会话内使用。
  • 信任维度:身份的明确性反而增强信任(对方知道在和一个助理说话),但必须让用户随时知道「现在是谁在代表我行动」。

3. 端到端语音 Agent 的可观测性设计

  • 背景:3.5 节的 Omni 与 3.6 节的全双工把 ASR/LLM/TTS 合并成一个模型,传统按模块打点的监控失效。
  • 可观测性要点 :需要记录音频事件流(speak_start/end、emotion、laugh、noise)、轮次决策(继续/停顿/打断)、工具调用与延迟分解(首包延迟、端到端延迟);对全双工还要记录「模型为何选择不说话」。
  • 边想边说与填充词:填充词("嗯""让我想想")能降低用户对延迟的感知、传递思考状态,但过度模仿会显得做作,且在信息密集场景(报数字、念地址)会干扰识别。建议按场景开关:闲聊与协商场景适度使用,精确信息场景关闭。
  • 判断依据:可观测性优先保证「可归因」------任何一次失败都能定位到是感知、决策还是合成环节。

4. SoM 标注失效时是否回退坐标预测

  • 背景:4.3 节列出视觉定位三路线,SoM 直观但标注可能干扰界面或漏标动态元素。
  • 权衡:回退坐标预测通用性最强,但精度最难、需要双向分辨率缩放;纯视觉单路径维护成本低,双路径(SoM + 坐标)鲁棒性高但测试矩阵翻倍。
  • 判断依据:若目标应用以标准 GUI 为主、DOM 可用,优先结构化元素索引;SoM 作为视觉兜底;坐标预测只在无 DOM、无稳定标注的兜底场景启用。回退策略应显式记录「本次为何回退」,便于后续统计失效原因。
  • 维护成本:双路径的代价主要在回归测试与标注工具链,若团队规模有限,宁可先做单路径 + 明确失败上报。

5. 统一大模型 vs 可替换快慢分工的五年路线之争

  • 背景:3.7 节指出快慢分离让交互能力与智能上限分别演进,而端到端统一模型主张把思考内化。
  • 权衡:统一模型架构简洁、无跨模型通信损耗,但每次升级都要重新平衡智能、延迟与表达;快慢分工可独立替换后台模型,工程上更灵活,却存在前后台不一致、通信间接的风险。
  • 判断依据:短期(1-2 年)快慢分工更务实,因为强模型迭代速度快、替换成本低;长期若端到端模型能在同一权重内稳定兼顾延迟与推理,统一路线会胜出。Pine AI 在 τ³-Voice 榜单的表现说明解耦架构并不天然落后。
  • 决策建议:把「交互层」与「推理层」的接口先标准化,无论最终走哪条路线,都能平滑迁移。

6. 三场景共性:防止不可挽回后果的五道防线

  • 背景:异步事件、Computer Use、机器人操作三个场景尺度不同,但都面临「动作一旦执行就无法撤销」的风险。
  • 五道防线 :
    1. 动作分级:按可逆性把动作分为只读、可撤销写、不可逆写,不同级别走不同审批路径。
    2. 可逆操作:优先选择可回滚的实现(草稿而非直接发送、沙箱而非真机)。
    3. 状态确认:执行后重新观察现实(截图、传感器、事件回执),不假设动作成功。
    4. 权限控制:虚拟身份 + 最小权限 + 敏感操作 Human-in-the-Loop。
    5. 安全停止:在安全点取消或抢占,未完成结果用显式占位符表示,绝不伪造成功。
  • 共性洞察:三者的差异只在时间尺度(秒---天 / 亚秒---秒 / 毫秒),防线本身是同一套五原语(唤醒、安全点、取消、抢占、快慢分离)在不同尺度下的具体实现。
相关推荐
冬奇Lab22 分钟前
开源项目第258期:Harness² —— Google Research 的「递归式 Agent Harness 优化」,模型权重不动,只改 Agent 的外壳
人工智能·开源
字节跳动视频云技术团队2 小时前
每两家头部手机厂商就有一家选它:火山引擎如何成为 AI 手机助手的“隐形底座”?
人工智能
泯泷2 小时前
像项目经理一样指挥 AI 团队:管理者模式
人工智能·llm·agent
京东云开发者2 小时前
双11囤Token火了:京东搜索量暴涨7倍,AI生产力成新刚需
人工智能
ahccqw3 小时前
OpenCV 车辆数量统计
人工智能·opencv·计算机视觉
人工智能AI技术3 小时前
LangGraph 本地 build 频频翻车,最终在服务器跑通流式对话
人工智能
Flynn Liang3 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
汤姆宝库3 小时前
构建一个能用的RAG系统:切块、嵌入、混合检索与融合排序
人工智能