文章 / 创意应用

Writing

创意应用|让智能体跑一夜,人只做减法

2026-10-14创意应用企业治理建筑施工

目录 展开 / 收起
  1. 一、只给结果,不给步骤
  2. 二、把规矩写成入职手册
  3. 三、六项里留下两项:否决标准才是硬货
  4. 四、另一半答案:持久执行不该塞进编排层
  5. 五、迁移:把这件事放到一个项目部里
  6. 来源与说明

每家公司都有几件“说不清卡在哪”的事。工期一拖再拖,资料一返再返,会上谁都能指出一处问题,但没人能说清根因在哪一步;等真有人花两周查出来,改动的牵扯面又大到不敢动。困难不在没人肯干,在于这类问题横向躺在整条链路里,人的注意力撑不住那么长的上下文,而组织又不放心把这么长一段交给看不到底的过程。

谷歌云工程师 Bo Yang 十月十三日的做法正是冲着这个两难来的:让 Gemini 4 Argon 无人值守跑了十一个小时,去优化自家的开源智能体开发框架 ADK。结果不是“AI 自己改好了代码”,而是它提出六项改动,人审掉四项,留下两项,长会话下的框架开销降了约 40%。这份复盘的价值在那四项否决里。

一、只给结果,不给步骤

第一轮设定刻意做得很素:不给任何仓库专属指令,只发一段话——让 ADK 在任何智能体上都不带来明显的额外开销,启动时、长会话里、多智能体和工作流场景下都是;模型收到的内容和公开接口保持不变;每处改动都要配一个能抓住回归的测试。

接下来两小时发生的事值得记下来。第 7 分钟,Argon 写好了一份基准脚本;此后的 70 分钟它一直在测量和读代码,一行 ADK 源码都没改;然后才动手,并且确实找对了两处真瓶颈——会话拷贝和包导入。这个顺序恰好是人类工程师做不彻底的那一半:人通常忍不住先改再看。

第一轮的产出暴露了另一半问题。因为不知道 ADK 团队怎么审代码,它给鉴权模型挂了个自定义钩子,悄悄改掉公开的 JSON 结构;自己写的快速拷贝漏了模拟事件的边界;只跑了附近的 216 个单元测试;提交说明里也没写前后数字。四处毛病没有一处是能力问题,全是不知道规矩。

二、把规矩写成入职手册

第二轮只加了两件事。一是把维护者的规范写进仓库里的 .agents/skills 目录,用谷歌自己的说法,像给新员工的入职手册。结构很克制:每个技能开头只有一个简短的 SKILL.md 索引,具体规则放在 references 目录按需读取,不把整本手册每轮都塞进上下文。Argon 晚上九点十一分开跑时的动作是,先读 visibility.md 里的私有模块命名规则和 imports.md 里的懒加载检查,然后才动手改代码。

这个设计里藏着一个判断:规矩不是提示词,是资产,要能被版本管理、被评审、被不同智能体复用,也能按需加载而不是每次全量灌进去。企业里对应的东西一直存在,只是大多躺在某份文件或某个老工程师的脑子里,从没为了“被机器读”而重排过结构。

第二件是打开 Antigravity 的 /goal 模式,让目标在上下文压缩之后不丢,智能体能一直跑到任务完成,并在结束前开一个不合并的合并请求、附上前后数字。这两句话改变了产出形态:从“改了一些代码”变成“一份可被评审的提案”。

三、六项里留下两项:否决标准才是硬货

合并请求跨 32 个文件提出六项优化,留下两项解决的是真瓶颈。

会话历史那一项:ADK 每一步开跑都要装载对话历史,原实现先把整段历史深拷贝一遍,再筛出调用方真正要的事件,哪怕只是列出会话、不带事件,也要先拷一遍。改成先过滤再拷贝,并用一个能保留共享字典与测试替身、不会在循环引用上打转的快速拷贝替换通用深拷贝。重型依赖那一项:import google.adk 原本会把实时音视频、链路追踪、Web 服务框架一并拉进来,哪怕你只用最基础的文本智能体。

懒加载这一项的波折最能说明框架与应用的分工。直接删掉顶层导入,16892 个开源测试全部通过,但谷歌内部有 25 个测试目标失败了——它们正是把替身打在这些模块属性上。最终上线方案用惰性模块访问器,让重型包在真正用到时才加载,同时保证每个公开属性在测试期望的位置依然可被替换。能不能改,不只由测试是否变绿决定,还由有多少下游依赖了你没打算公开的东西决定。

被否掉的四项各有各的理由,而这四条理由本身比留下来的两项更值得抄走:

  • 一个多智能体事件缓存让合成基准快了 17%,但依赖弱引用,一旦垃圾回收后复用了同一块内存地址,就可能跨会话返回陈旧数据——收益在合成里,风险在真实里。
  • 一处链路追踪检查读了 OpenTelemetry 实现里的私有字段,依赖库一次小版本升级就可能让它静默失效。
  • 一次会话历史格式化的重写,把核心代码路径改得更难读,在团队留出的端到端基准上却没换来时延变化。
  • 一个工作流事件回放的查找索引,额外状态复杂度只服务合成回放测试。

最终合并 22 个文件、17 个新测试函数,提交说明写着“这些改动由 Argon 生成”。谷歌对这套分工的概括只有一句:智能体探索,维护者做减法。

对照
留下
否掉
先过滤再拷贝,换掉通用深拷贝
弱引用缓存,可能跨会话给陈旧数据
重型依赖改成按需加载
读第三方库的私有字段
公开属性保持可被打补丁
核心路径更难读却没换来时延变化
长会话开销降约 40%
只服务合成回放的索引

四、另一半答案:持久执行不该塞进编排层

Pydantic 创始人 Samuel Colvin 十月十三日的文章从相反方向补了一块。结论是图库是个错误,代码本身就是图:靠类型提示拿到类型安全,靠 async 拿到并行执行,而图 API 存在类似 CAP 定理的取舍——类型安全、并行、快照三者不可兼得。他们找了很久能同时保住类型和快照的接口,每个版本要么退化成一堆 reducer 注解,要么需要没人受得了的泛型,于是 pydantic-graph V2 移除了持久化模块,持久执行交给专门的引擎(Temporal、DBOS、Prefect、Restate 等)。

关键在于 Temporal 绕开这个三角的方式:它不快照应用状态,只记录每个活动完成时的结果,恢复时重跑代码把状态重建出来,“三次更新里有几次已经发生”由重新执行代码来回答。被打断的活动可能跑两次,而活动边界正是你、而不是运行器,声明哪些操作会碰到外部世界、重跑是否安全的地方。他们的沙箱解释器 Monty 在没有 Temporal 的环境里用同一套答案:解释器不持有套接字、文件描述符和线程,每个并行分支都是宿主在等的宿主函数,所以暂停那一刻,解释器自身连同堆与调用栈是几 KB 的一致值,可在另一个进程里接着跑。合并状态在代码里只是 a, b = await gather(fa(), fb()) 这样一行,有类型、有顺序,因为是你自己写的。

多智能体编排上,Pydantic AI 的 Harness 是这么落地的:每个子智能体是一个 async 函数,编排器只拿到一个 run_workflow 工具,模型写的就是这段编排代码;脚本先按子智能体签名做类型检查,拼错的函数名或类型不对的参数在任何子智能体启动前就被拒掉。两份材料放在一起看才有意思:谷歌那份解决敢不敢让它跑一整夜,Pydantic 这份解决跑一整夜的状态怎么恢复、断点在哪由谁声明。指望一个流程图框架顺手把这两件事都办了,正是很多智能体项目上线后最难收拾的地方。

步骤一夜跑之前要备好的四样东西
1
目标式指令
说清要什么结果,不写步骤,写明边界
2
可版本化的规矩
短索引加按需读取的规则文件
3
能自动跑的确定性检查
ADK 那一万多个测试是前提
4
一张否决清单
收益在合成里、依赖私有字段、牺牲可读性、引入脆弱状态

五、迁移:把这件事放到一个项目部里

施工企业对应的场景不难找。某个分部分项的验收资料反复返工,问题不在哪一张表,而在资料从班组到项目部再到监理的流转里有一步总在等;要查清是哪一步,得有人连续跟上一两周,还得有权翻各部门的台账。让智能体做这件事的诱惑很大,阻力也同样大:没人敢把跨部门台账交给一个跑了半天的黑箱。

可复用的关系有三条。给目标不给步骤,这在企业里甚至更自然——“把这个分项的平均返工次数从三次降到一次,不得改变任何对外报送格式”,本来就是领导会说的话。把规矩做成技能文件:ADK 那份手册里有私有模块命名、懒加载检查这类能被机器核对的规则;企业里的工艺标准、资料清单、签字权限同样可以整理成一份短索引加分项细则。那份否决清单几乎可以直接翻成企业版四行:收益只体现在内部指标上的不采信、依赖别家系统未公开字段的不采信、让人更难核对的不采信、引入脆弱中间状态的不采信。

成立条件必须说清。ADK 敢让模型跑一夜,前提是一万多个能自动跑的单元测试,以及一份团队留出的、模型没见过的基准。企业里对应的是台账、校验规则和历史样本能不能自动跑一遍;没有这层,无人值守就只是无人负责。必须重做的部分同样明显:代码的规矩能被测试直接判对错,施工的规矩里大量是经验性的——现场条件、工艺顺序、季节性风险——判不了,所以技能文件里除了“要做什么”,还得写清“哪些判定必须回到人”以及由谁签字。权限那层有现成参照:Workday 与 Anthropic 十月十三日宣布的互通里,所有动作沿用客户已有的权限、审批与审计控制,管理员接入一次,不新建权限模型。智能体进的是现有流程里已有的岗位权限,不是新设一个岗位。

可以马上试两件小的。挑一个反复返工的资料环节,把它当性能瓶颈处理:写一条目标式指令,配一份不超过三页的规则索引,让它跑一个晚上,看它提出几条、你能明确否掉几条——否决得越具体,说明规矩写得越到位。二是把否决清单做成四行固定字段,每次评审逐行填,填不出理由的不算数。

再往前一步,是把技能文件本身当成产物。总部下发一版索引与分项细则,项目部使用中回填本地差异与例外,回填按季度回到总部评审,通过的合并进下一版。规矩从此不再是每年修订一次的文件,而是有版本、有差异记录、有责任人签字的活物——这也正是谷歌那份合并请求留下的形状:不是模型写了代码,是组织把“什么算好”这件事,做成了一份能被反复引用和推翻的东西。

注意
无人值守的前提不是模型够强,而是检查够密、规矩够具体、否决有人签。三者缺一,跑一整夜只是把错误放大一整夜。

来源与说明

[1]: Optimizing a 200,000-line Python codebase overnight with Gemini 4 Argon(两轮设置、六项改动、四项否决理由与基准数字)—— Google Developers Blog / 2026-10-13 (https://developers.googleblog.com/optimizing-a-200000-line-python-codebase-overnight-with-gemini-4-argon/) [2]: 同一篇复盘的完整正文(第一轮时间线、规范文件与内部测试目标失败细节)—— World Programming 转载 / 2026-10-13 (https://www.worldprogramming.org/posts/optimizing-a-200000-line-python-codebase-overnight-with-gemini-4-argon-u3t1fr) [3]: google/adk-python 仓库的 .agents/skills 布局(技能索引与 references 按需读取的结构)—— GitHub / 2026-10-13 (https://github.com/google/adk-python/tree/main/.agents/skills) [4]: Argon 优化 ADK 的合并提交(文件数、测试函数数与提交说明)—— GitHub / 2026-10-13 (https://github.com/google/adk-python/commit/1754b3eeb6cdb2c16e3b30619a12066623df132e) [5]: The code is the graph(图库取舍、V2 移除持久化、Temporal 与 Monty 的机制)—— Pydantic / 2026-10-13 (https://pydantic.dev/articles/the-code-is-the-graph) [6]: Durable AI Agent Frameworks Compared: One Run, Four Stacks(Pydantic AI 把耐久执行交给外部引擎的口径)—— Developers Digest / 2026-10-09 (https://www.developersdigest.tech/blog/durable-ai-agent-frameworks-compared-2026) [7]: AI agent frameworks compared: LangGraph, CrewAI, AutoGen, and more(Pydantic AI 的耐久能力依赖外部平台的说明)—— Arize / 2026-10-13 (https://arize.com/guides/ai-agent-handbook/agent-frameworks) [8]: Pydantic AI: Typed Agents for Every Model(Harness、Monty 与耐久执行目录的内部结构)—— PyShine / 2026-10-13 (http://pyshine.com/pydantic-ai) [9]: Workday and Anthropic Connect Claude to Sana HR and Finance Agents(沿用既有权限与审计控制的表述)—— Unite.AI / 2026-10-13 (https://www.unite.ai/workday-and-anthropic-connect-claude-to-sana-hr-and-finance-agents/)

← 全部文章