AI工程重心迁移:从生成能力到多智能体调度与验收
今天这份日报里三条消息乍看是三件互不相干的事IDE 变成多智能体调度台、评审成新瓶颈、全栈开源人形机器人和做「大脑」的团队在同一周一个开源一个融资。我把它们放在一起读了两遍越读越觉得指的是同一件事——AI 工程的竞争重心正在从「模型能不能写出来」往「系统能不能调度、能不能验收」上迁移。调度台往开发工具里下沉说的是编排层评审跟不上生成速度说的是验证层人形和大脑同周出现说的是执行层开始软硬同频。这三层叠起来基本就是接下来一两年一线研发要天天面对的工作环境。这篇我不打算复述新闻日报本身信息量够了重复一遍没意义。我更想干的事是把这三条背后的技术逻辑拆开讲清楚为什么会走到这一步以及一个普通开发者、一个十来人的研发团队今天能动手做点什么。会涉及多智能体编排的最小骨架代码、评审分层的具体规则、具身智能链路的搭建顺序也会把我自己踩过的坑摊开说。不管你是刚摸 AI 编程工具的新手还是已经在带团队做工程化落地的老手应该都能从里面挑到能直接用的东西。1. IDE 变成多智能体调度台改的到底是什么1.1 为什么偏偏是 IDE 先被改造很多人第一反应是「编辑器加了个 AI 面板」这个理解太浅了。真正发生的事是调度权从聊天窗口转移到了编辑器的进程里。这个转移不是产品经理拍脑袋决定的而是被上下文带宽逼出来的。你想想聊天窗口能拿到什么——你粘贴进去的那几百行文本、你口述的需求。IDE 能拿到什么——完整的文件树、git diff、终端输出、调试器断点状态、语言服务给出的类型信息和调用关系、依赖清单。这两者的信息密度差着数量级。一个 agent 在聊天窗口里判断「这个改动会不会破坏别的地方」只能靠猜在 IDE 里它能直接查引用、跑测试、读报错。上下文就是权力谁能低成本拿到更多可验证的信号谁就该做调度。还有个更实际的原因IDE 天然带写权限。聊天窗口产出的是文本你得手动复制、粘贴、对齐缩进、处理冲突IDE 里的 agent 产出的是 patch能直接落到工作区跑一遍编译错了立刻回滚。这个闭环短得多的链路是调度台能成立的前提。我见过一些团队试图把调度放在 CI 上结论是反馈太慢改一行等三分钟人的耐心撑不住。所以这个变化有路径依赖的成分不是最优解。如果从零设计一套开发环境调度台未必长在编辑器里。但在既有生态下编辑器是唯一同时具备「高上下文 写权限 低延迟反馈」三个条件的位置。1.2 调度台需要具备的四个核心能力把「多智能体调度台」这个词拆开落到工程上其实是四件事缺一件就转不起来。我用装修队打个比方包工头是调度器水电工木工油漆工是不同角色的 agent图纸是规格说明验收是测试。任务分解是第一件。一句「把这个模块的同步调用改成异步」拆出来的不是一步而是一张有依赖关系的图先要改接口签名再改调用方再改测试最后跑回归。这张图的顺序错了中间态就编译不过。分解粒度也有讲究切太粗 agent 做不完切太细协调成本吃掉收益。我自己的经验是单个子任务的改动量控制在 50 到 200 行之间比较舒服。上下文路由是第二件也是最容易被忽略的。子任务「改调用方」需要知道接口签名、需要知道有哪些调用点但不需要知道接口内部怎么实现的。如果你图省事把所有文件内容一股脑塞进去agent 大概率会在无关文件里顺手「优化」两下产出你根本没要求的改动。切片给上下文是控制副作用的主要手段。冲突消解是第三件。两个 agent 同时改同一个文件合并的时候一定打架。最笨也最有效的办法是单一写者原则同一个文件在同一时刻只允许一个 agent 持有写权限其他人排队。再往上可以做乐观并发加语义合并但那是后面的事先把串行跑通。验证闭环是第四件也是整个系统的心脏。没有验证多 agent 就是个错误放大器——三个 agent 各自产出一点小偏差叠起来就是一个大坑而且你还不知道是哪一步错的。验证必须机器可判编译过不过、类型对不对、单测绿不绿、契约有没有破。人只负责验证机器判断不了的部分。1.3 一套能在本地跑起来的最小编排骨架不要一上来就找框架。多智能体编排的核心逻辑其实不到一百行先手写一遍你才知道框架在帮你解决什么。先定义数据结构from dataclasses import dataclass, field dataclass class Task: id: str role: str # 指派给哪个角色的 agent scope: list # 允许触碰的文件白名单越界即失败 deps: list field(default_factorylist) payload: dict field(default_factorydict) dataclass class Result: task_id: str ok: bool patch: str log: str scope这个字段是整套设计的精髓。它不是建议是硬约束——agent 返回的 patch 如果动了白名单之外的文件直接判失败。我第一版没加这个结果一个负责改测试的 agent 顺手把生产代码重构了评审的时候我盯着 diff 看了十分钟才反应过来。调度器本身class Orchestrator: def __init__(self, agents, verifier, max_retry2, budget200_000): self.agents agents # role - callable(task, done) - Result self.verifier verifier # callable(task, result) - bool self.max_retry max_retry self.budget budget # token 总预算防止失控 def run(self, tasks): done, failed, spent {}, [], 0 pending list(tasks) while pending: progressed False for t in list(pending): if any(d not in done for d in t.deps): continue progressed True pending.remove(t) for attempt in range(self.max_retry 1): res self.agents[t.role](t, done) spent res.cost if hasattr(res, cost) else 0 if spent self.budget: raise RuntimeError(超出预算人工介入) if self.verifier(t, res): done[t.id] res break if attempt self.max_retry: failed.append((t.id, res)) if not progressed: raise RuntimeError(依赖成环或存在永远无法满足的依赖) return done, failed角色和依赖用配置描述别写死在代码里tasks: - id: t1 role: architect scope: [docs/design.md] - id: t2 role: coder scope: [src/async_client.py] deps: [t1] - id: t3 role: coder scope: [src/callers/**] deps: [t2] - id: t4 role: tester scope: [tests/**] deps: [t3]验证函数是整个系统的天花板。我的写法是把验证拆成三段任何一段不过就回滚重试def verifier(task, result): if not files_within_scope(result.patch, task.scope): return False if not patch_applies_cleanly(result.patch): return False return run_checks(modefast) # 编译 类型 相关单测注意run_checks我用的是fast模式只跑受影响的测试子集全量回归放到最后一步统一跑。每次都跑全量的话一个十分钟的验证循环乘上重试次数一天就过去了。1.4 三条反直觉的编排经验agent 数量不是越多越好。三个到五个是甜点区超过七个之后协调开销指数上升而且每个 agent 都要吃上下文成本涨得比产出快。我试过拆成十二个角色结果光是在调度层处理「谁该先动手」就写了一堆逻辑最后产出还不如五个角色的版本。共享上下文要切片不要全量。每个 agent 只拿它能用上的东西。全量上下文看着保险实际会让模型在无关信息里做关联产生莫名其妙的改动。这点跟人的注意力很像——你给一个新同事一堆文档让他「先熟悉一下」他反而不知道该干什么。必须有硬性的终止条件。最大重试次数、总 token 预算、最长墙钟时间三个都要设。多智能体最容易出的问题不是做错是来回改、越改越远最后一算账花了一堆成本产出零。我在第一版里没设墙钟时间有个任务跑了四十分钟还在「优化」一个格式化问题。2. 评审成为新瓶颈生成快了验收没快2.1 瓶颈后移是什么感觉日报说评审成新瓶颈这个判断我完全认同而且感受比大多数人早。生成端提速之后整条流水线的形状变了以前是「想清楚再写」写占大头现在是「几分钟出一版」写几乎不占时间反倒是「这一版该不该合」卡住了所有人。量级上是这样变化的不同团队绝对值差很多但方向基本一致环节引入多智能体之前之后变化方向单个功能初版产出2 到 5 天半天到 1 天大幅缩短单次提交平均改动行数150 到 300 行400 到 800 行翻倍每天待评审提交数3 到 5 个10 到 20 个三到四倍平均评审等待时间2 小时8 小时以上明显拉长评审单次耗时25 分钟40 分钟以上上升这张表想说明的不是「AI 不好用」而是系统的瓶颈位置变了。以前瓶颈在编码现在瓶颈在评审而评审是一件高度依赖人的注意力和经验的事。人的注意力是稀缺资源一天能认真读的 diff 有上限大概三到五份复杂改动就到头了。待评审的东西一多要么延期要么走过场。走过场比延期更危险因为问题会漏到线上。还有个隐蔽的变化改动行数翻倍之后单次评审的认知负荷不是线性涨的是超线性的。读两百行你能在脑子里建起完整模型读八百行你就开始跳读、开始凭印象。我自己有个很明确的感受——超过五百行的 diff我读到后半段已经记不清前半段改了什么。2.2 评审为什么比生成难自动化生成之所以能用模型做是因为它有相对客观的终止条件能编译、测试绿、跑起来不报错。评审不一样评审的核心问题不是「这段代码对不对」是「这段代码该不该这么写」。第一个难点是上下文的时间跨度。评审要判断的东西很多来自历史这个模块为什么这么分层、这个奇怪的判断是三年前某个线上事故的补丁、这个方法名为什么不能改因为外部系统在调。这些信息不在代码里在人的记忆和提交历史里。模型能读到当前代码读不到当时的取舍。第二个难点是产出形态。生成的产出是补丁可以检验、可以回滚、可以差分对比。评审的产出是意见是「这里我觉得可以换个写法」这个东西没法自动闭环——你没法机器判断「换个写法」到底该不该换。所以评审可以辅助不能托管。第三个难点是责任。合进去的代码出了问题是要有人负责的。这个责任链条决定了最终签字的人必须是真的看懂了的活人不能是模型。这不是保守是工程系统能运转的基本前提。2.3 分层评审把人的注意力花在刀刃上既然评审不可托管但可以加速正确的方向不是「让模型来评审」而是「让机器把不该人看的东西提前拦掉」。分层做一层层往下过滤层级执行者检查内容目标拦截比例L0 机器层CI 流水线编译、类型、格式化、单测、依赖漏洞扫描六到七成L1 规则层静态分析、自定义检查分层依赖方向、循环引用、敏感接口调用、日志规范两到三成L2 人层资深工程师设计意图、边界条件、性能取舍、可维护性剩下那部分关键在 L1。L0 大家基本都做了L2 是人本来就在做的被跳过的是 L1 ——把团队口头约定的架构规矩写成可执行的检查。这一步做不做差别巨大。举几个能写成规则的具体约束领域层不允许反向依赖基础设施层同一个包里不允许出现两个同名但职责不同的工具类对外接口的参数数量上限日志里禁止打印完整请求体脱敏新增的公开方法必须有对应的测试文件路径。这些规则不需要多聪明只需要能挡住「顺手写出来的、过得去但不该合的东西」。我见过一个团队把 L1 做到位之后L2 的评审时长降了差不多三分之一。原因很简单评审者不用再花时间在「这个 import 怎么跨层了」这种机械问题上可以专心看设计。2.4 给仓库加一道评审前置闸门落地的时候别搞大而全先加最便宜的四道checks: scope_guard: desc: 单次提交改动文件数上限 max_files: 25 size_guard: desc: 单次提交改动行数上限超过要求拆分 max_changed_lines: 600 layering: desc: 基于目录的分层依赖检查 rules: - from: src/domain/** forbid: [src/infra/**, src/web/**] - from: src/app/** forbid: [src/web/**] test_pairing: desc: 新增公开函数必须有对应测试 when: src/**/*.py require: tests/**size_guard这条我特别推荐。有人会问改动大就一定要拆吗我的回答是对评审者而言拆开是为了让每一份 diff 都能在注意力耗尽之前被完整理解。这不是形式主义是有认知科学依据的——人一次能同时处理的要素数量有限超过就靠猜。配合一个提交模板强制填写「改了什么、为什么改、怎么验证」能把评审的来回沟通减少一大截。模板字段别超过五个多了没人填。3. 全栈开源人形与「大脑」融资同周出现意味着什么3.1 全栈开源这四个字的分量日报里提到的一个全栈开源人形项目和另一个做机器人「大脑」的团队拿到新一轮融资出现在同一周。这两件事放在一起看很有意思一个在往下铺底座一个在往上做智能软硬两端同时发力。「全栈开源」这个词被用得很滥得拆开看看到底开了什么。真正有价值的全栈至少覆盖五层层次具体内容开源了能干什么不开源的痛点机械与硬件结构图纸、物料清单、关节与驱动器选型自己攒一台按需改尺寸只能买整机贵且不能改固件与通信电机驱动、总线协议、时钟同步能做底层调试和替换全程黑盒出问题没法查控制栈全身控制、状态估计、步态规划能跑起来能改参数只能调参不能改逻辑仿真环境机器人模型、场景资产、物理参数在虚拟环境里练成本极低真机试错摔一次修一次训练代码策略训练管线、数据处理、权重能自己训新技能只能用人家的成品对入门者来说价值排序其实是倒过来的仿真 训练代码 控制栈 硬件 固件。原因很现实仿真不要钱、不会摔坏、可以并行跑几百个实例。我见过不少人一上来就想买硬件我一般会劝住——在仿真里把链路跑通之前买硬件基本等于买了个昂贵的摆件。3.2 「大脑」和「小脑」到底怎么分工具身智能里最容易被外行搞混的就是这两层。用一句话说大脑负责「做什么」小脑负责「怎么稳住」。大脑这一层是视觉-语言-动作模型输入是摄像头图像加一句自然语言指令输出是动作序列或者子目标。它的运行频率很低1 到 10 赫兹就够了因为语义决策本身不需要那么快。你让人去搬箱子人也不是每毫秒重新决定一次「我要搬箱子」。小脑这一层是全身控制和状态估计负责把上层给的目标翻译成每个关节的力矩或位置指令同时维持平衡。它的频率必须高500 到 1000 赫兹是常见量级。原因是对不平衡的响应窗口很短延迟一大就倒了。中间还需要一层技能库或者运动原语把「走到桌前」这种语义目标拆成「抬脚、落脚、重心转移」这些可跟踪的轨迹。这层经常被忽略但没有它大脑和小脑之间就是对不上的——大脑说「去那边」小脑问「哪个关节先动」谁也答不上来。举个具体数字感受一下带宽差大脑 5 赫兹输出一个目标小脑 1000 赫兹执行。中间差两百倍。这个比例决定了架构必须是分层的不可能用一个模型端到端从图像直接出关节力矩还保证稳定。3.3 一条最小可复现的具身链路想真正上手按这个顺序走每一步都要能单独验证别跳步第一步选仿真环境并跑通空场景。关键是确认物理引擎的步长和控制频率对得上。刚体仿真步长一般 1 毫秒控制周期 1 毫秒或 2 毫秒。如果你的策略是 50 赫兹输出中间需要一个保持器把动作维持 20 个仿真步。这一步做错后面所有训练都是在错误的时序上学的。第二步采集或生成示教数据。两条路遥操作采集质量高、慢、贵或者用脚本化的专家策略生成快、质量一般、量大。初期我建议后者先把管线跑通别一上来就搞几百小时遥操作。第三步训练策略。从简单的行为克隆开始别急着上强化学习。行为克隆的收敛信号明确出问题好定位。等基线能跑再考虑加一点在线微调。第四步做域随机化。这是 sim2real 的核心随机化的维度至少覆盖四类质量正负一成、摩擦系数正负两成、观测延迟0 到 20 毫秒、视觉光照、纹理、相机位姿小幅扰动。随机化范围宁小勿大太大策略学不出稳定行为太小真机上直接崩。第五步真机部署加安全限幅。关节速度、力矩、工作空间全部限死并且加一个独立的硬件急停。这一步绝对不能省仿真里摔倒是重启真机上摔倒是赔钱。整条链路我建议先做「固定位置的抓取放置」这一个任务别贪多。一个任务跑通你对整条链路的所有细节都会有感觉第二个任务会快很多。3.4 想入门的人该怎么排优先级按投入产出比排我的建议是这个顺序先在仿真里把一条完整的「感知到动作」链路跑通哪怕任务极其简单再补控制基础至少要能看懂全身控制在算什么然后才是硬件最后才考虑自己训大模型。很多人的误区是从大模型那头切入觉得「大脑」听起来高级。实际问题在于没有稳定的底层大脑给什么指令都是白搭。一个摇摇晃晃站不住的机器人你给它再强的视觉语言模型也没用。反过来说底层稳了上层智能哪怕很朴素也能做出可用的东西。4. 三条新闻连起来看工程重心在往哪挪4.1 从「生成能力」转向「验收能力」把三条放在一起最清晰的信号是生成能力的边际价值在快速下降验收能力的边际价值在快速上升。两年前大家比拼的是「能不能生成」现在生成已经不是瓶颈了随便一个工具都能几分钟产出一版能跑的代码。瓶颈转移到了「这一版能不能信」。IDE 变成调度台本质是在提高验收的密度——每一步都有验证不等到最后才发现错。评审成瓶颈是验收能力没跟上生成能力的直接后果。全栈开源人形也是在解决验收问题——硬件、控制、仿真全开源你才能验证到底哪一层出了问题而不是面对一个黑盒猜。这个判断对个人职业规划有直接影响。以前「写得快」是核心竞争力现在「判断得准」才是。能把一份八百行的 diff 在半小时内看出问题在哪的人价值比能一天写八千行的人高。这不是情怀是市场供需。4.2 团队层面可以马上做的三个动作第一把验证设施当一等公民建。测试、类型、契约检查、静态规则这些东西在生成提速之后价值翻倍。以前写测试是「额外工作」现在是「让整条流水线能转起来的必要投入」。我的判断标准很简单如果一个改动合进去之后你没法快速判断它有没有破坏别的地方那就说明验证设施欠账了。第二把架构约束写成可执行检查。团队口头约定「不要跨层调用」等于没约定。写成规则跑在 CI 上才是真的。这件事的投入产出比高得离谱一个成熟的规则库能把评审时长压掉三成以上而且随着时间推移收益是复利的。第三培养读 diff 的能力。这个听起来虚其实是硬技能。读 diff 和读代码是两回事读 diff 要能在脑子里还原出「改之前是什么样、改之后是什么样、中间态会不会出问题」。这个能力只能靠练建议团队里每周做一次 diff 复盘挑一份复杂的改动一起读讨论哪些地方该警惕。5. 踩坑记录与常见问题速查5.1 多智能体编排的坑坑一agent 互相覆盖。表现是两个 agent 都改了同一个配置文件后写的把先写的盖掉还看不出来。解法就是前面说的单一写者原则同一文件同一时刻只允许一个 agent 持有写锁其余排队。坑二验证函数写得太松。只检查「能不能编译」结果 agent 产出一堆能编译但逻辑错的代码。验证至少要三层语法层编译、类型、行为层相关单测、边界层改动范围是否越界。三层都过才算完成。坑三重试没有上限。一个 agent 改不对就重试重试还不对继续重试最后账单吓人。硬性设三个上限重试次数、token 预算、墙钟时间任意一个触顶就转人工。坑四任务切分粒度失当。切太粗一个任务几百行验证通不过也不知道错在哪切太细协调开销吃掉收益。五十到两百行这个区间是我试下来比较稳的。5.2 评审提速的坑坑一规则太严导致绕过。一开始就把规则设得极严结果大家提交前手动加豁免标记规则形同虚设。规则应该先松后紧先挡住最明显的几类问题让大家尝到甜头再逐步收紧。坑二把评审完全交给模型。我见过有团队让模型直接给「通过」或「不通过」结果模型对着一份有明显并发问题的代码给了通过理由是「代码风格一致」。评审的最终判断必须是人模型只能做初筛和提问。坑三只看 diff 不看上下文。复杂的改动必须结合调用方和被调用方一起看只看 diff 很容易漏掉影响面。工具上可以做一个「影响范围」视图把改动的符号的所有引用列出来。坑四大 diff 硬读。超过六百行的 diff硬读的效率极低。正确做法是要求拆分或者按文件分层读——先读接口层再读实现层最后读测试层。5.3 具身智能入门的坑坑一跳过仿真直接上真机。成本高得离谱而且很多问题在真机上根本定位不了因为你不知道是控制错了还是模型错了。坑二域随机化范围拍脑袋。范围太大策略学不出稳定行为太小真机直接崩。正确做法是先测量真机的实际参数分布按测量值加余量设定。坑三时序对不上。策略输出 50 赫兹仿真步长 1 毫秒中间忘了加保持器学出来的策略在真机上抖得像筛糠。这类问题在仿真里表现不明显上真机才暴露排查起来极痛苦。坑四一开始就追泛化。想让一个模型干所有事结果每件事都干不好。先把单一任务做到九成成功率再谈泛化。最后分享一个我自己的体会。这三条新闻看着是三个方向实际是同一件事的三个切面当产出变得廉价判断就变成稀缺品。不管是给多智能体设计验证闭环还是给评审分层还是在仿真里一步步验证控制链路做的都是同一件事——在快速产出和可靠验收之间建立可重复的通道。这个通道建得越早后面跑得越稳。我自己在这上面交过不少学费最贵的一笔是早期觉得「能跑就行」验证设施欠了一堆账等到改动速度上来之后每天都在还债。