Soma Zero Tutorials
🔍 搜索功能尚未开启,敬请期待。

5.1 agent 系统

本节定位:ANIMA 是 Soma Zero 这套机器人的「脑」。但「脑」本质上是一个 agent(智能体)——和 Claude Code、Codex 这些当今最强的编码 agent 是同一类东西。既然别人已经把「怎么造一个靠谱的 agent」摸索出了一整套工程经验,我们没理由从零试错。这一节就是把这些经验,翻译成给「机器人大脑」用的设计原则。

这一节怎么读:分两大部分。第一部分(AI agent)讲通用的 agent 工程纪律——主循环、把上下文当稀缺资源、五根支柱(记忆 / 接口 / 验证 / 安全 / 编排)、能力积累,以及给 ANIMA 的落地清单;这些经验主要来自 Claude Code 这类编码 agent。第二部分(搬上机器人)讲机器人特有的改造:为什么不能照搬编码 agent、主流「慢脑 + 快手」(System 2 / System 1)框架如何把深思与控制分开异步运行,以及这一切如何映射到 ANIMA。每一步都先讲「人家为什么这么做」,再讲「搬到 ANIMA 上是什么样」。

第一部分 · AI agent 先把通用的「怎么造一个靠谱的 agent」讲清楚——这部分经验主要来自 Claude Code 这类编码 agent。

一、什么是 agent:ANIMA 与编码 agent 的同构关系

先把名词说清楚。agent(智能体)说白了就是一个程序:你给它一个目标,它自己「看一眼现状 → 想一下 → 动手调一个工具 → 再看结果 → 再想」,这样一圈一圈转,直到把活干完。中间「想」用的是大模型,「动手」用的是各种工具。

这个「一圈一圈转」的循环,就是 agent 的心脏,业界叫主循环(main loop)。这里有个反直觉但极其重要的事实:当今最强的编码 agent(如 Claude Code),它的主循环简单到只是一个 while 循环——调模型、跑工具、拿结果、再调模型,并没有什么花哨的多阶段规划器。复杂度不在循环里,而在循环周围那一圈「外围设施」(记忆、验证、安全闸门)。

那 ANIMA 呢?它也是这同一个循环,只不过把「眼」和「手」换了:编码 agent 的「眼」是读文件、ANIMA 的「眼」是相机看棋盘;编码 agent 的「手」是改代码 / 跑命令、ANIMA 的「手」是机械臂(背后是 VLA 策略);编码 agent 的「裁判」是跑单元测试、ANIMA 的「裁判」是视觉识别 + python-chess 比对。

编码 agent(Claude Code) 大模型:想下一步 改代码 / 跑命令 跑测试看结果 机器人 agent(ANIMA) System 2:编排决策 System 1(VLA):驱动臂 视觉裁判 vs python-chess 同一套循环
图 5.1.1 编码 agent 与机器人 agent 是「同构」的:想 → 动手 → 看结果 → 反馈重来,区别只在「手」和「眼」

本节核心结论:顶级 agent 强,不强在「大脑更聪明」,强在「外围工程扎实」。所以 ANIMA 不该把力气全花在「让 LLM 想得更妙」,而要花在外围——这正是 ANIMA 选「行为树 + LLM 补空」而不是「自由 ReAct」的底层理由:主流程用确定的代码(行为树)兜住,LLM 只在节点里补空。对一台会真实运动、有物理风险的机械臂,这种「能用固定流程就别放权」的克制是对的。

二、主线:上下文是稀缺资源

接下来所有讲究,都从这一句长出来,先讲透它。过去大家研究「怎么把提示词写好」(prompt engineering)。现在顶级 agent 团队把重心挪到了上下文工程(context engineering)——不是写好一句话,而是整体地管理「每一时刻喂进模型的全部信息」:系统指令、工具说明、历史对话、外部数据,全都要精打细算。

为什么?因为有个现象叫上下文腐烂(context rot):你塞进模型的 token 越多,它准确回忆其中信息的能力反而越差。根子在于大模型的注意力是「每个词和每个词两两算关系」,词一多,注意力就被稀释。所以上下文不是越多越好,而是边际递减。指导原则就一句:用能达成目标的、最小的一组高信号 token

可靠回忆能力 上下文里的 token 数 → 甜区:最小高信号集 塞太多 → 上下文腐烂
图 5.1.2 上下文不是越多越好:token 超过「甜区」后,模型可靠回忆的能力反而下降(context rot)

对 ANIMA:一局棋 80~100 步,每一步都会产生「看到了什么、期望是什么、对没对上、重试了几次」。如果一股脑全堆进 System 2 的上下文,很快就会「腐烂」——它会忘掉开局的关键约束。所以从第一天起,就要把「上下文预算」当成一等公民来管。怎么管?就是下面五根支柱里的第一根——记忆

三、支柱一 · 记忆与状态:外部化存储

既然上下文有限,那「装不下的东西」就得有地方放。顶级 agent 有三招,外加一招「状态持久化」。

1. 压缩(compaction)——但要小心它会丢细节。 当对话快塞满了,就把前面一大段高保真地总结成一小段摘要,然后从摘要重新开始。Anthropic 的实测:压缩能把上下文砍掉约一半,但有个关键代价——「高层事实」基本保得住,「冷僻细节」几乎全丢(基准里高层 3/3 保留、冷僻 0/3 全丢)。

⚠️ 对机器人这条是红线:像「夹爪角度不得超过 100°」「某个标定外参的精确值」这种精确数字,绝不能指望压缩帮你记住——压缩恰恰最爱丢这种冷僻细节。它们必须放进下面说的「硬约束」或「外置记忆」。

2. 外置记忆 + 进度文件——光压缩不够。 顶级 agent 团队发现:哪怕压缩了,跨越很多轮之后模型还是会「找不着北」。解法是把状态写成外部文件:一个进度文件(记「干到哪了」)+ 一份事件日志(记「发生过什么」)。这样哪怕上下文被清空,一个全新的窗口读一眼文件就能立刻恢复工作。对 ANIMA,这就是一份对局进度产物:走到第几步、上一步成败、机械臂当前状态——断电、急停、CAN 掉线之后,靠它续上,而不是从开局重下。

3. 分层作用域记忆——规则按「管辖范围」叠加。 Claude Code 的记忆文件(CLAUDE.md)是分层的:全局策略 > 用户级 > 项目级 > 本地,从宽到窄,向上拼接而不是互相覆盖。而且是双轨:人手写的硬规则 + 机器自己积累的经验笔记。搬到 ANIMA 正好:全局安全约束(永远生效)> 这一局棋的指令 > 这一步的临时指令,叠加生效。

4. 状态持久化(checkpoint)——每一步都「存档」。 开源框架 LangGraph 把这件事做到了极致:流程的每一步都先从一个状态快照(checkpoint)读、再写回一个新快照。好处有三个,对机器人都值钱:① 崩溃可恢复(从断点续,不从头来);② 可中断(停在某一步等人,之后接着跑——留到「安全」一节细讲);③ 时间旅行(回到「第 17 手出错」那个存档,改一改、长出一条支线重放,原来那局不受影响)。注意:第 ③ 条只能用在仿真和逻辑层复盘,绝不能用来「重放真机动作」——真机动作不可逆,重放等于让机械臂再动一次。

① 分层作用域记忆(向上拼接,不覆盖) 全局安全约束(夹爪≤100° · 真机由人执行)— 永远生效 本局棋指令 本步临时指令 双轨来源:人写硬规则 + 机器自积累的失败 / 恢复经验 ② 外置状态(脑子之外,随时可恢复) 进度文件 走到第几步 · 上步成败 · 机械臂状态 事件日志 / checkpoint 每步存档 (可恢复 / 可复盘)
图 5.1.3 ANIMA 的记忆体系:上半是「按管辖范围叠加」的分层记忆,下半是「写到脑子之外」的可恢复状态

四、支柱二 · 工具与接口:精简、正交、面向 agent

ANIMA 的 System 2 要「指挥」System 1,靠的是一套接口。这套接口怎么定,直接决定它好不好用。两条经验:

1. 工具要「少而正交、面向工作流」。 反面教材是给一堆零碎的低层工具(「列用户」「列日程」「建日程」);正面做法是合并成一个高层工作流工具(「帮我排个会」,内部自己找空档)。业界共识:工具太多或互相重叠,会把 agent 带偏(微软、OpenAI 都有此结论)。

2. 接口要专门为 agent 设计,而不是把「给人用的」拿来复用(ACI)。 这是开源项目 SWE-agent 的核心论点,而且有硬数据:固定同一个模型,只改接口,在 SWE-bench 上就能多解 10.7 个百分点。它的四条设计原则可以直接当 ANIMA 的接口 checklist:① 动作让 LLM 一眼能懂;② 把多步操作合并成少数高阶原语(少一次决策就少一次出错);③ 反馈要信息足够但简洁;④ 内建护栏,遏制错误扩散。

对 ANIMA:System 2 不该用「给人看的 ROS topic / MoveIt 界面」去驱动 System 1,更不该让 LLM 去拼关节角和轨迹。正确做法是定义少数几个高阶棋步原语,比如「把 e2 的子走到 e4」是一个原语,内部自动完成「定位—抓取—移动—放置—自检」。

✗ 坏:一堆低层动作丢给 LLM 自己拼 LLM 移到(x,y,z) 下降 5cm 合夹爪 上抬 移到(x',y',z') 松爪 …每步都是出错机会 ✓ 好:少数高阶工作流原语 LLM 把 e2 的子走到 e4 (内部自动)定位 → 抓取 → 移动 → 放置 → 自检 LLM 只表达意图,怎么做交给 System 1
图 5.1.4 动作接口:把低层动作合并成「面向工作流」的高阶原语,少一次 LLM 决策就少一次出错

五、支柱三 · 验证闭环:执行后必须验证

顶级 agent 最硬的一条教训:不要相信模型自己说「干完了」,要用一个独立的、端到端的验证去核实。 编码 agent 怎么做的?端到端验证胜过自查——与其只跑单元测试,不如开个浏览器像真人一样把功能走一遍;护栏闭环(SWE-agent 的 linter)——每次编辑后立刻跑语法检查,一旦发现错误就把这次编辑丢弃(坏改动从不落盘),同时把「错在哪 + 改动前后的片段」简洁地回给 agent,让它重试。

这套「执行 → 独立核验 → 不对就别让状态前进 → 简洁反馈 → 重试」,正是 ANIMA 视觉裁判的设计蓝本,而且 ANIMA 做得还更硬——它有 python-chess 提供的逻辑真值兜底,不像编码 agent 只能靠测试。映射过来:VLA 走完一手 → 视觉裁判看真实棋盘,和 python-chess 算出的「期望局面」比对;不一致 → 逻辑真值不许前进(错误绝不向后传播);反馈要紧凑可定位——回「e4 该有子却空了 / d5 多出一子(碰倒了)」这种一句话差异,而不是把整帧图像灌给 LLM;然后重试 / 触发恢复。还有一条来自 Devin:子任务在「汇报成功」之前必须先自验——这给 ANIMA「视觉裁判才是成败最终判定、python-chess 只是给期望值的盲工具」提供了独立佐证。

System 2 决策一手 System 1 (VLA) 执行 视觉裁判拍照识别observed(有噪声) python-chess 算期望expected(确定) observed== expected ? 一致 ✓ 逻辑真值前进 → 下一手 一致 不一致 ✗ 逻辑真值原地不动回「哪格错」+ 重试 / 恢复 不一致
图 5.1.5 ANIMA 的验证闭环:执行后用「视觉裁判 vs python-chess」核验,一致才放行,不一致则逻辑真值不前进并重试

六、支柱四 · 安全闸门:硬安全独立于提示词

这是对 ANIMA 最重要的一节,因为机械臂动作不可逆,撞坏了就是撞坏了。

核心铁律:记忆文件、系统提示词,对模型来说都只是「参考上下文」,不是「强制配置」——模型可以选择不听。所以任何「硬安全」都不能只靠写进提示词。要真正拦住一个动作,必须有一道不经过 LLM 的、确定性的代码闸门

顶级 agent 把这条做到了什么程度?Claude Code 用 PreToolUse hook:在工具真正执行前跑一段固定校验,模型怎么想都绕不过。Codex 更狠,直接上操作系统级隔离(macOS Seatbelt、Linux bubblewrap+seccomp、Windows 原生沙箱)——哪怕模型被攻击想干坏事,也越不过操作系统这堵墙;它还把安全拆成两层:「能力闸门」(技术上能做什么)和「审批闸门」(什么时候必须问人),两层都同意才放行,并且默认「读操作自动放行、改状态的操作要人批」「默认拒绝、只给指定工作区开口」。LangGraph 的 interrupt 提供了「审批」的优雅形态:在动作下发之前暂停,把「要做什么 + 期望结果」写进持久层等人确认,人逐个批准后再 resume。

⚠️ interrupt 还带出一条真机专属的硬约束:恢复时会「重跑被中断节点里、暂停点之前的代码」。这意味着——真正驱动硬件的那行代码,必须放在审批之后;暂停点之前只能放纯计算、读状态这种「重跑也没关系」的操作。否则一旦走审批流程,机械臂会动两次。

对 ANIMA 的落地:在 LLM 输出动作、到动作真正下发给 CAN / 机械臂之间,插一道独立的确定性安全闸门。它做两件事:① 能力校验(角度是否 ≤100°、目标是否在标定过的安全工作区和合法棋盘格内、CAN 是否被占用)——不满足直接硬拦;② 审批(不可逆动作前,按项目铁律交人确认)。默认拒绝任何关节运动,只有通过校验 + 人批准的指令才放行。 这把编码 agent 的「软提示 + 事后 git 回滚」范式,正确替换成机器人需要的「事前硬阻断 + 单步确认」。

System 2 / LLM输出一个动作意图 确定性安全闸门 ① 能力校验:角度≤100° 工作区 / 棋盘范围 · CAN 占用 ② 审批:不可逆动作交人确认 机械臂 / CAN(真机动作不可逆) 通过才放行 不满足 → 硬拦,退回让 LLM 重想(默认拒绝)
图 5.1.6 硬安全不写在提示词里:LLM 的意图必须先过一道不经过 LLM 的确定性闸门,默认拒绝,通过校验 + 人批准才下发真机

七、支柱五 · 能力积累:单脑收口,持续改进

先说编排。Devin 的经验:要有单一编排者收口,不要让多个 agent 共享并累积同一份上下文(上下文一胀,每个子任务质量都掉)。这正好支持 ANIMA「System 2 只编排不动手」的单脑设计。而且——一套物理本体不能真并行控制同一只机械臂,下棋又是强相互依赖的串行任务(一步接一步、共享棋局),所以 ANIMA 用「串行行为树主干」是对的,不该盲目并行

小提醒:业界曾有「多 agent 比单 agent 强 90%」的说法,但那是单次内部评测、没独立复现,而且只在「可大量并行」的任务上成立。别据此给 ANIMA 堆一堆 LLM 子 agent——ANIMA 的 System 1 是 VLA 策略,根本不是 LLM。

再说能力积累——怎么让 ANIMA「越用越聪明」,而且不用重新训练 VLA 的权重。靠两条腿:Voyager 式技能库,把反复验证成功、可复用的操作固化成可执行技能,按「自然语言描述」的向量索引,下次相似情境直接检索来用(如「e2→e4 的标准抓放序列」「把吃掉的子移到回收区」)——这是可执行的记忆Reflexion 式口头反思,把一次失败「反思成一段文字」(如「这类残局我老是过早换子」),存进情景记忆,下次遇到相似局面载入来提醒自己——它存的是经验教训,模糊匹配,完全不动权重

一条可操作准则反思回答「下次该怎么想」(文字,进情景记忆,模糊召回);技能回答「这个动作怎么做」(代码,进技能库,精确调用)。失败先产生反思;当某个解法稳定成功、可复用了,再把它从「反思」晋升成「技能」。 ⚠️ 机器人技能涉及不可逆物理动作,入库前必须经视觉裁判验证 + 人类审批,不能像 Voyager 在 Minecraft 里那样自动纳新。

一次失败 / 次优 口头反思(文字)→ 存情景记忆 · 模糊召回「下次怎么想」 晋升为技能(代码)→ 存技能库 · 精确调用「这个动作怎么做」 下次更快、更稳 稳定成功 + 可复用 + 人审批 越转越聪明
图 5.1.7 能力积累飞轮:失败先沉淀成「反思」,稳定可复用后再「晋升」为可执行技能,越用越快越稳

八、不能照搬之处:机器人与编码 agent 的四条鸿沟

把经验搬过来时,必须时刻记住这四条根本差异,否则会出事:

  • 物理错误要分「可恢复」和「真不可逆」:编码 agent 靠「做错了用 git 回滚」兜底,机器人没有 Ctrl-Z——但这不等于一切物理错误都不可逆。撞倒、抓偏棋子其实是可恢复的:棋盘是已知的刚性结构、棋局状态由 python-chess 记着真值,重新摆放或重抓即可,这正是「失败检测 + 重试」能成立的前提。真正不可逆的是撞墙、撞桌沿、撞到自身结构或人、把整盘棋扫翻这类会损坏硬件或伤人的动作。→ 所以硬闸门要对准「会造成损坏 / 不可逆」的动作做事前阻断 + 单步确认;可恢复的失误交给检测后重试,不必为它牺牲流畅。
  • 谁是裁判:符号工具给「期望」,眼睛给「观测」,脑来判:编码 agent 的裁判(单元测试)几乎可信、近乎真值;机器人的裁判是视觉,会看错。这里要纠正一个常见误解——python-chess 不是和视觉并列的「第二个裁判」,它是脑调用的一个工具:它只持有「这步走完棋盘应该变成什么样」(expected),却看不见物理棋盘。真正的裁判是脑:拿眼睛读到的真实棋盘(observed)去和 python-chess 的 expected 比对,一致才算成功。所以正确链路是「python-chess 出期望 → 视觉出观测 → 脑做比对判定」,而不是「两个裁判各投一票」。这个带噪声的视觉比对才是核心难点(第二部分第十二节详述)。
  • 硬实时:快环不能等慢环:编码 agent 可以同步「停下来思考」,反正慢一点只是等;机器人不行——机械臂在物理世界里连续运动,控制环一旦停顿就会抖、就会偏。所以主流机器人大脑不是「想完再动」的串行,而是快慢两环异步分频并行:慢环(深思、重规划、查棋)在后台低频跑、不时刷新一个子目标,快环(连续控制)始终用「上一次的子目标」高频出动作、绝不暂停。「停下来整理上下文 / 重规划」因此是后台并发的慢环,不是动作里的一次暂停(第二部分第十一节详述)。
  • 别把单次内部评测当通用规律:业界有个常被引用的说法——「多 agent 协作比单 agent 强约 90%」,但那是某家的单次内部评测、自报数据。当我们要决定 ANIMA 的脑要不要拆成多个专职子 agent(职责分离)时,能借用的只是定性结论「分工通常有好处」;至于到底拆不拆、拆成几个,要由我们自己的任务和实测来定,绝不能把「90%」当成目标或论据照搬

这四条里,后三条都指向同一个根源——机器人的脑必须按「快慢双系统」来组织,这正是下面第二部分要展开的。

九、ANIMA 的落地优先级清单

优先级做什么来自谁一句话怎么落地
P0 安全确定性安全闸门Codex / Claude Code / LangGraphLLM 与真机之间插一道不经过 LLM 的闸门;能力校验 + 审批;默认拒绝
P0 安全能力闸门 ⟂ 审批闸门两层分离Codex「技术上能不能下发」与「要不要人批」分开;读放行 / 改审批
P0 安全硬件副作用放在审批之后(幂等)LangGraph暂停点之前只放纯计算 / 读状态,驱动臂的代码放审批后,避免动两次
P1 验证视觉裁判闭环,禁止 LLM 自述成功SWE-agent / Devin不一致则逻辑真值不前进;反馈紧凑可定位(哪格错),不灌整帧图
P1 记忆外置进度文件 + checkpoint 事件日志Claude Code / LangGraph断电 / 急停后读文件即恢复;精确数字走硬约束,不靠压缩
P1 记忆分层作用域记忆(全局安全 > 任务 > 步)Claude Code向上拼接不覆盖;人写硬规则 + 机器自积累经验双轨
P2 接口少而正交、面向工作流的高阶动作原语SWE-agent「把 e2 的子走到 e4」是一个原语,别让 LLM 拼关节角
P2 编排单编排者收口,串行行为树主干DevinSystem 2 单脑;不盲目并行;System 1 是 VLA 不是 LLM
P2 积累反思(文字)+ 技能库(代码)+ 晋升流水线Reflexion / Voyager失败先存反思,稳定可复用后晋升为技能;入库须验证 + 审批
P3 工程主循环极简、复杂度放外围Claude Code行为树 + LLM 补空维持现状,不上重型框架
P3 调试time-travel 复盘(仅限仿真 / 逻辑层)LangGraph回到出错那步开支线重放;绝不用于重放真机动作
第二部分 · 搬上机器人:System 2 大脑与主流框架 第一部分的纪律大多能用,但「具身」会改写其中几条。这一部分先看业界主流机器人大脑怎么搭,再回到 ANIMA。

十、双系统分层:System 1 / System 2

先给结论:2025 年以来,主流具身智能框架几乎一致地把「脑」拆成两层异步运行的系统。这套叫法借自心理学家卡尼曼的「快思考 / 慢思考」。

  • System 2(慢脑):一个在互联网数据上预训练的大模型(视觉语言模型 VLM / 多模态大模型),负责看懂场景、理解语言、多步规划、估计进度与成败。它跑得慢、频率低(约 1~9 Hz,即每秒只「想」几次),但见多识广、会推理。
  • System 1(快手):一个轻量的视觉运动策略(扩散 / 流匹配 / 小型 transformer),负责把慢脑给的目标实时变成连续关节动作。它跑得快、频率高(约 25~200 Hz),但不思考、只反应。

为什么非拆不可?因为「会推理的大模型」和「能实时控制的策略」对算力与延迟的要求正好相反:大模型一次前向推理动辄几十上百毫秒,配不上几十赫兹的控制节奏;而能跑到 200 Hz 的小策略又没有推理能力。把两者拆开、各跑各的频率,是工程上的必然选择。

System 2 · 慢脑 VLM / 多模态大模型 理解 · 规划 · 估成败 慢 · 约 1–9 Hz System 1 · 快手 轻量策略(扩散/流匹配) 连续关节动作 快 · 约 25–200 Hz 机械臂 物理棋盘上落子 子目标 语言指令 连续动作 眼 · 相机 + 检测器 读 observed(真实棋盘) 闭环:眼读 observed → 慢脑比对 python-chess 的 expected、估成败 → 触发重试
图 5.1.8 双系统分层:慢脑(System 2,低频)规划并估成败 → 子目标 → 快手(System 1,高频)出连续动作 → 机械臂;眼读真实棋盘构成闭环

主流框架长什么样(频率与接口对照)。下表把几个有代表性的框架放在一起——注意频率多来自厂商博客或预印本、会随版本变化,可迁移的是「分层 + 异步」这个模式,不是具体数字

框架慢脑 System 2快手 System 1两层接口
Figure Helix(2025)7B VLM · 7–9 Hz80M 策略 · 200 Hz单个连续 latent 向量
Google Gemini RoboticsGemini Robotics-ER(推理脑·调工具·估成败)Gemini Robotics VLA(执行手)自然语言子指令
PI π0.5 / Hi RobotVLM · 约 1 Hz(或单模型先出语言子目标)π0 VLA · 50 Hz人类可读的原子语言指令
NVIDIA GR00T N1.5VLM · 约 10 Hz扩散 transformer · 约 120 Hzlatent 表示
DuoCore-FS(2025)大 VLM · 1–3 Hz策略 · 25–30 Hzbridge buffer(异步缓冲)
Google RT-255B · 1–3 Hz(或 5B · 约 5 Hz)—(端到端单模型,作对照)

两层之间「传什么」分两大流派:传语言(Hi Robot、π0.5 让脑说一句人能读懂的「把杯子拿起来」,再让手照着做)和传潜向量(Helix 把语义压成一个连续向量、GR00T 传 latent)。对 ANIMA,我们取语言接口——因为语言接口可读、可审计,还能被 Stockfish / python-chess 这类符号工具介入;latent 是黑箱,工具插不进去。

十一、快慢环协调:异步分频

这一节直接回答前面「四条鸿沟」里的实时性问题。关键不是「先想后动」的先后,而是「两环并行、互不阻塞」。

最先进的做法(DuoCore-FS、Real-Time Chunking 等)是真正的异步:慢环在后台每隔一段时间(如每秒 1~3 次)刷新一次子目标 / 中间表示;快环每秒做几十次,每次都取「当前最新的那个子目标」继续出动作哪怕慢环这一拍还没想完,快环也用上一次的子目标平滑地接着动,绝不停下来等。

慢环 System 2 低频·后台 想:子目标 A 还在想 B… 想:子目标 B 还在想 C… 子目标 C 快环 System 1 高频·从不停 连续高频出动作(每秒几十次,从不停顿) A 生效 B 生效 慢环还在想 B 时,快环仍用「上一次的 A」继续出动作——绝不为等待而停顿 t
图 5.1.9 快慢两环异步并行:慢环(低频)稀疏地刷新子目标,快环(高频)连续出动作、始终复用「最近一次」子目标,从不为等待慢环而停顿

为什么必须这样?Physical Intelligence 的 Real-Time Chunking 给了一组硬数字:在 50 Hz 控制(每步只有 20 毫秒)下,一个 30 亿参数的策略光是准备一次推理就要 46 毫秒,70 亿参数的 OpenVLA 一次推理要 321 毫秒——根本不可能在两个控制步之间算完。它的解法是「冻结 + 补全」:已经来不及改的前几个动作先锁定、照常执行,推理在后台线程里跑,新结果一出来就无缝接上,保证任何时刻都有动作可发

所以原来「停下来整理上下文只能在动作间隙」的说法不够准确。正确的图景是:慢思考是一条一直在后台跑的低频线程,它从不打断高频控制;真正要协调的,是「快环如何始终拿到一个够用的子目标」,而不是「什么时候允许暂停」。⚠️ 还有一个重要提醒:分层本身不自带纠错——π0.5、GR00T 等论文都坦承自己没有闭环重规划,闭环必须我们在慢环里显式加(见下一节的裁判,以及第二章的重试)。

十二、期望 / 观测 / 裁判:符号工具与感知的分工

这一节展开「四条鸿沟」里的裁判问题,也是 ANIMA 最容易搭错的地方。先看业界怎么摆放符号工具:

  • 在 SPCA(Sense-Plan-Code-Act)这类框架里,符号校验器(规则检查 / 经典规划器 / 仿真编译)是高层推理器调用的「可信锚点」:大模型负责提议(它会幻觉、不可靠),符号侧负责裁决合不合法。谁校验谁很清楚——干净的符号侧裁定有效性,大模型只是提议者
  • 失败判定则被拆成两道闸门:事前用符号侧做「这步合不合法 / 可不可行」的语义过滤(拦住明显错误的动作),事后用真机感知做「物理上到底成没成」的评估(对比动作前后的真实状态)。带噪声的物理观测,才是最终成败的裁判。

把这套放到下棋上,就能纠正一个常见误解:

python-chess(工具) 持有 expected(应该怎样) 看不见物理棋盘 相机 + 检测器(眼) 给出 observed(实际怎样) 有噪声、会看错 脑 · 唯一裁判 比对 expected × observed 判定成 / 败 一致 → 下一步 不一致 → 重试 expected observed 不是两个裁判各投一票:python-chess 只给「参考答案」,眼睛给「现场」,脑来判
图 5.1.10 python-chess 出「期望」(它看不见真棋盘),相机+检测器出「观测」,脑当裁判做比对——这是一条串接的链路,而非两个并列裁判
  • python-chess 是工具,持有「期望」:它知道规则、知道「e2 的兵走到 e4 后棋盘应该长什么样」,但它看不见物理棋盘,本身不能判断真机有没有放对。它对应业界的「事前符号过滤」——校验走法合法、并给出 expected。
  • 相机 + 检测器是眼睛,给出「观测」:真机棋盘实际变成了什么样(observed),有噪声、会看错。
  • 脑是唯一的裁判:拿 observed 和 expected 比对,一致才算成功,不一致就触发重试。这对应业界的「事后物理评估」。

所以正确链路是「python-chess 出期望 → 视觉出观测 → 脑做比对判定」的串接,而不是「视觉和 python-chess 各当一个裁判、双双确认」。逻辑真值(应该怎样)在 python-chess,物理真相(实际怎样)在眼睛,判定权在脑。这个带噪声的视觉比对是 ANIMA 的核心难点,也是「失败检测 → 重试」可靠性的隐藏天花板。

十三、经验迁移:哪些可用、哪些不可用

把第一部分的纪律逐条过一遍,标出「具身」会不会改写它。(最后这一栏是从「物理不可逆 + 硬实时 + 感知有噪」综合推出的判断,不是单篇论文的实证结论。)

编码 agent 的经验能否迁移到 ANIMA为什么 / 怎么改
外置记忆 + 进度文件能,直接用断电 / 急停后读文件即恢复,与机器人无冲突
少而正交的高层工具 / 原语「把 e2 的子走到 e4」是一个原语,别让大模型去拼关节角
确定性硬安全闸门能,且更重要SPCA 的编译+仿真校验、事前/事后双闸门都是同一思路;机器人这里关系到硬件与人身安全
闭环验证、禁止自述成功能,但裁判换成视觉编码 agent 信测试,ANIMA 的「测试」是带噪视觉,要按上一节做 expected × observed 比对
同步「停下来思考」不能照搬快环不能停;深思必须改成后台并发的慢环(第十一节)
「做错了回滚重来」不能照搬物理没有 Ctrl-Z;可恢复失误靠重试,不可逆 / 有损害动作靠事前硬闸门(第九节)
多 agent「强 90%」这类数字只取定性自报单次评测;只借「职责分离通常有益」,拆不拆由自己任务定

十四、回到 ANIMA:脑如何指挥手

把以上拼起来,ANIMA 的形态就清楚了——它是一个「慢脑」,统领一组工具与一只「快手」:

  • 脑 = ANIMA(大模型编排器)+ 一组工具:Stockfish 出招、python-chess 校验合法性并持有期望、失败检测器读视觉。脑在低频里想「下哪步、这步成没成、要不要重试」。
  • 手 = VLA 策略(System 1):在高频里把脑给的「把某子走到某格」变成连续抓放动作。
  • 眼 = 相机 + 检测器:给出物理棋盘的 observed,喂给脑当裁判。
  • 接口 = 人类可读的语言原子指令(取自 Hi Robot / π0.5),而非 latent 黑箱——这样 Stockfish / python-chess 才能介入。
  • 闭环靠自己加:业界框架(π0.5 / GR00T)多不自带纠错,所以「估成败 → 重试」要在 ANIMA 的慢环里显式实现,以 Gemini Robotics-ER 的「成功估计」为范本。

一句话:逻辑真值在 python-chess,物理真相靠眼睛,判定与编排在脑,动作在手。更完整的框架巡览与 ANIMA 架构图,见第四章 · 附录1 脑规划框架调研

来源与可信度说明

  • 全部证据来自一手资料:Anthropic / OpenAI / Cursor / Cognition 官方工程博客与文档、LangChain 官方文档,以及 SWE-agent(arXiv 2405.15793)、Reflexion(arXiv 2303.11366)、Voyager 论文与官方实现。绝大多数主张经过三票对抗式核验。
  • 少数标「中等置信」的:Cursor 的检索准确率提升是厂商自报基准;「多 agent 强 90%」是单次内部评测——均只取定性结论。「反思→晋升为技能」流水线是面向 ANIMA 的工程综合,非论文原文主张。
  • 时效性:资料集中在 2025 末—2026 上半年,具体数字会随版本变化,可迁移的是设计模式而非数字。完整带引用的研究底稿见仓库 research/agent-system/ 下三份报告。
  • 第二部分(机器人框架)来源:Figure Helix(figure.ai/news/helix)、Physical Intelligence π0.5 与 Real-Time Chunking(pi.website)、DuoCore-FS(arXiv 2512.20188)、OpenHelix 综述(arXiv 2505.03912)、SPCA / Sense-Plan-Code-Act(MDPI MAKE 8(1):22, 2026),以及 Google Gemini Robotics、NVIDIA GR00T N1.5、RT-2 等公开资料;各框架的 System 1/System 2 频率经多源交叉核验,绝大多数主张经过三票对抗式核验。
  • 第二部分的几点提醒:① Helix 的 7–9 / 200 Hz 来自厂商博客、且只描述 2025 年初版,后续型号未必相同;②「bridge buffer」「事前 / 事后双闸门」是各自论文的专有术语、非行业标准,文中已归属到具体来源;③「快慢真正异步」只有 DuoCore-FS / Real-Time Chunking 等近期工作做到,早期双系统多为同步、快环被慢 VLM 卡住频率;④「哪些经验不能迁移」是从「物理不可逆 + 硬实时 + 感知有噪」综合推出的判断,非单篇实证。