一个人装得下 Unix,装不下这一千个智能体|AI Engineer

中文深度整理,非逐字翻译
原始标题
Why One AI Agent Isn’t Enough (And How to Run 1,000) - CJ Avilla & Harrison Stall, Anthropic
节目 / 来源
AI Engineer
嘉宾
CJ Avilla & Harrison Stall
原始发布日期
2026-10-17
时长
约 102 分钟
内容类型
会议演讲 / 多智能体编排与工程组织
原始内容
前往原始来源 ↗

CJ Avilla 和 Harrison Stall 都是 Anthropic 的技术人员。这是 AI Engineer 上的一场演讲加现场操作。字幕里 Claude 经常被听成 Cloud,Ultra Code 前半被听成 ultra code,问答里才说成 Ultra Code。下文产品名按后文能对上的写法,对不上的读音单独标出。

CJ 的开场不是产品。1969 年,离会场大约 30 英里,Ken Thompson 在贝尔实验室。妻子带着一岁的儿子去加利福尼亚看祖父母,要一个月。他说自己有一个月,把项目切开:一周做内核,一周做编辑器,一周做汇编器,再一周做另一件。月底他有了 Unix。CJ 认为这段过程漂亮的地方是概念完整性:一个人能把整个项目装在脑子里,从头做到尾。

同一时期的对照是 IBM 的 System/360 和 OS/360,在 60 年代到 70 年代初。在那之前,IBM 的机器每次升级硬件,配套软件都要重写。OS/360 是把公司押上去的工程。餐巾纸背面的估算是大约 5000 人年,于是最多投入 1000 名工程师,看能不能在短窗口里做完。Fred Brooks 是项目经理之一,事后写成《人月神话》。其中一条组织结论是:有效的团队像外科手术队。一个主刀,周围大约 10 个专家。他举例有语言律师、副手、副驾驶。这些人都有专长,概念完整性仍在主刀一个人的脑子里。小团队可以做奇迹。他们想把同一种结构放大。

原始来源:Why One AI Agent Isn’t Enough (And How to Run 1,000) - CJ Avilla & Harrison Stall, Anthropic。中文深度整理,非逐字翻译。本文依据 YouTube 自动生成的英文字幕,专有名词和数字可能有识别误差。

星形会堵死

快进到他说的一个月前或几个月前,Linux 7.2 发布。九周,大约 2600 名开发者,来自 300 家公司。贡献方式不是一开始就这样。他让人去看 1998 年的内核邮件列表:Linus 在崩溃。有人写,补丁已经发了三次,为什么还没进内核。Linus 说自己要去休假,别再进收件箱。CJ 认为,现在编排很多智能体的人会有同样的感觉。GitHub 上堆着大量拉取请求,你坐在那里批准,你就是瓶颈。拉取请求是请别人把改动合进主线的那张单。

改结构是几年后的事。Linus 发完那条帖的第二天,Larry McVoy 写道:问题是 Linus 不规模化。他还在推销自己的商业版本控制。大约到 2002 年,Linus 承认自己不规模化。星形结构里每个人直接交给他,要改成网络:一层层信任,贡献先交给受信任的维护者审查,只有例外才浮上来。Linus 仍然是提交到主线的那个人。幻灯片左边大约 36 个角色全部汇入中心。右边每一层最多大约四个人把变更往上交。

会场稍早,Tarek 和 Gary 说过:他们有 Fable,是时候不讲道理,做更大的东西。Gary 说是时候把海洋煮开。Fable 在后文被当成审阅阶段的一种模型来用,这期没有解释它和别的模型差在哪。这期要讲的是,模型已经很强之后,怎么把它们编排成能协作的系统。

一个智能体先倒下

Harrison 把场次分成三块:什么是 Claude managed agents,什么是这套编排,然后现场动手。周五,他们在 Claude managed agents 里宣布了 flows。Claude managed agents 是 4 月交付的产品面。Flows 让 Claude 自己编排整张多智能体拓扑。拓扑指谁向谁汇报、谁和谁并行。

很多人已经在 Claude Code 里见过动态工作流。你让它去做某事,并使用 Ultra Code,它会拉起一张相当复杂的智能体网,自己编排。底下用一个 JavaScript 引擎做映射和归并一类的活动。映射是拆开分头做,归并是收回来合成。你不必事先画好分类、扇出、合成、对抗核验的图。扇出指从一个任务分出许多并行分支。你告诉它用 Ultra Code 达成目标,它按内部训练和自身能力去编排。

单个智能体在没那么野心的任务上就会先倒下。数字他标明是随手一挥:单个智能体跑大约一小时。协调者加花名册是他们多智能体的第一版,一个协调者下面只有一层、各自做具体任务的智能体,能跑久一点。动态工作流是他们用来对付难题的结构:嵌套、并行、互相作用的一组智能体。开场他把这组说成可以任意复杂。后文有人问嵌套有几层,答案把「任意」收了回去。

用户那边的主题是:大家在手写多智能体 harness。一百个里面有一个在两小时后死掉,容器怎么重启,整张图的状态怎么接上,并不简单。一个智能体要盯着比如 60 个下属,和 Linus 一样有上限。还得能检查这张图:是逐个节点去问,还是一切都经过协调者。字幕写成 Opus 4 5 之后有个说法:人把笔记本开一条缝,免得 Claude Code 停掉,在公园里一直按批准。他们认为,要做更大的题,这种盯法不够。

主智能体自己写阶段

Claude managed agents 是一套 API。你定义智能体,基本上是技能、工具和 MCP 服务器的清单。MCP 是让模型连接外部工具的协议。然后在一个会话里把这个智能体实例化。会话是一次要它去干实事的请求。状态存在 API 资源里,用一份持久的事件日志实时看。

5 月他们交付过多智能体的第一版。你得定义主智能体可以拉起的每一个子智能体,并监听每个智能体所在的线程。他用操作系统做类比:进程下面有线程,每个线程有自己的上下文,共享状态通常靠来回发消息。API 支持,但并不轻。上周五的动态工作流,他们认为好用得多。主智能体负责写计划。例子是把一百万行的单一代码库从 Python 迁到 Rust。计划出来之后,它按自己的判断在不同阶段拉起和关掉智能体,完成一块块可以核验的工作。你不用自己管这些连接。阶段可以是先读文件,拉起一群探索智能体。后面的阶段由它自己订。他说这些智能体现在比他当场能想的计划更聪明。

跑起来时有一条事件流,实时看到所有智能体在做什么,也可以按智能体查看。可以在会话开始前设预算,避免烧掉大量 token。Token 是计量模型用量的单位。方向不对,可以用 API 打断。

和 Claude Code 的差别,他强调这是要嵌进你自己的应用、内部流程或持续集成的 API,不是坐在终端前。持续集成是每次改动都自动跑检查的流水线。用户会把这些东西放在日程上,听 webhook。Webhook 是一件事发生时主动通知你的回调。GitHub 上的例子是后面的漏洞猎人。

现场演示收成几件能核对的配置。股票观察清单,模型写的是 Claude Opus 5.5,类型字段是 multi-agent 2026-10-01,再加一段系统提示,规定人设。环境是给 Claude 操作的一台计算机。他说过去大约 10 或 12 个月,他们一直在做这件事:给 Claude 一台计算机,它就强得多。演示里的代码是苹果、英伟达、亚马逊、JPM、XOM、COST。他跳到更早的一次会话,说那次每一步大约六个并发智能体。数量会按任务复杂度增减。

代码侧,启用方式是传入多智能体配置,再给主智能体发第一件事:跑一个工作流。默认它会当场创造需要的子智能体。也可以预先配置,比如专门看 Yahoo Finance、某些新闻源,或美国证监会的 Edgar 网站。还可以给自定义技能、MCP、在环境里跑的自定义工具。环境可以是你自己的沙箱,跑在自己的基础设施上。沙箱是隔离出来的运行环境。

观察清单如果只用一个智能体,它会尽力看每只股票,但会在后面那三件事上吃力。用 flows,扫描阶段把清单拆开,一只股票交给一个扫描智能体,上下文隔离,不被其他股票和其他搜索结果影响。审阅也是自己的隔离上下文。他们用单智能体和 flows 都跑过。多数情况下,flows 贵得多,也更能把细节找全。贵多少,幻灯片上的对照字幕没有读出数字。

还可以按阶段分配测试时计算。测试时计算指推理时多花的计算,不是训练时花的。扫描阶段可以用 Haiku,他称为快而省的模型,比如每只股票两个 Haiku 去扫。审阅阶段改用 Fable,每只股票两个或三个,把细节看深。阶段按你愿意花的钱胀和缩。重要任务他建议配一套评测,确认 flows 在做你要的事。评测是用来量做得好不好的题。

控制台里的观察清单是模板之一。有些模板从周日晚上起,随 Claude Code 和 Claude API 技能一起打包。他常用 Claude Code 驱动这套 API,底下的命令行叫 Ant CLI。他们对初始提示做了实验:开头越含糊、越让 Claude 自己发挥,效果越好。先说一只股票一个智能体、去扫描、你在找什么,让它先把流程搭出来,再微调。

现场还发了额度。他记得 Max 的 5 倍档大约每月 100 美元 API 额度,Teams 最高 500 美元,另外这次实验再给 50 美元。Max 那一档他说的是自己的印象。本周刚宣布,Max 和团队订阅可以连带一些 API 额度。

有人问,Claude Code 里的 Claude API 技能是跑在本机,还是跑在 managed agents 里。答案是:技能和 Claude Code 按你的设置跑在本机或云上,那是另一套系统。它再通过 API 去创建智能体、会话和其他资源。插件里的技能等组件,今天已经能落进 API 的资源字段。把一条工作流打包成插件分发出去,今天不行。他也不知道以后会不会开箱即用。可以把运行中生成的提示存成文本,放进 Claude Code,他说会相当接近。

问答末尾把两个名字对齐了。Ultra Code 是你坐在笔记本前、在终端里直接用 Claude Code 的那一次。Managed agents 里的 flows,是把同一套方法收成 API:一件要重复做的事,按日程触发,或挂进你的产品。他们说,flows 就是把 Ultra Code 推广到这一层之后的东西。

共享的是文件系统

子智能体之间没有一条 API,让你命令 A 给 B 发某段载荷。它们共享一个文件系统。工作流需要通信时,就用文件系统来回传。你能看见的是消息发送和接收的事件,不能强制某一个去给另一个发。

上下文的隔离是另一件事。每个智能体生在自己的会话线程里,在数据库里是分开的上下文窗口。他说明,默认这些上下文窗口不会经由文件系统泄漏。每个智能体还有自己的系统提示,可以你来写,也可以让 Claude 写,用来维持分开的人设。消息事件可以用来看,中间那层有没有对下属做你不想要的事。

有人问,共享文件系统能不能在物理上隔开。今天的办法是写进提示:只在某一子集的目录里干活。目录路径没有权限层。他说这看起来有用,也许会带回去做。追问能不能用钩子。钩子是 Claude Code 里、在工具调用前后插入检查的机制。Managed agents 里不完全是钩子。他们有工具权限:智能体要读文件时,按你的配置可能得向你的系统申请。你可以看是哪个智能体在读、读的是哪条路径,不该给就拒绝。他举的路径是 /mount/fubar。

以前的协调者加花名册,对子智能体数量有限制,数字他没说。Flows 现在,他说自己以为是 1000 个智能体。主智能体还可以同时开多个 flow,或一个做完再开下一个。他周五启动了一个用 1000 个智能体做操作系统的 flow,想在现场给大家看,没做完。已经跑了大约 85 小时,三四条 flow 进去了,还在做。提示很短:Ken Thompson 一周做出 Unix,你做一个 Unix 兼容、带 Python 解释器的操作系统;用 flows,可以大胆,最多 1000 个智能体。他给了一个 GitHub 仓库。上次查看大约有 1000 次提交。他让文档组在每条 flow 结束时用 Sonnet 5.5 把这一阶段写下来,自己去仓库看。也可以打断会话,告诉它方向错了。输出目录里的文件,可以通过他们称为 V1 files 的 API 下载。不能做的是:把第一条计划拦腰插进一步,只重跑后面的步骤。中途有了新信息,今天的做法是打断,交给主智能体。主智能体握着流程走到哪的状态,可以再开一条,把新信息和已有历史都算进去。

有人问,加智能体会不会像加人一样,协调成本上升、边际收益下降。他说没有一个漂亮的数字,这块研究很新。他不会惊讶,以后能算出每多一个子智能体的能力曲线。他愿意说的是:同样 100 个智能体,用 flows 会更好,因为上下文之间有组织、有隔离,阶段之间有门。无限循环和级联错误,靠预算避免会话跑飞。此外,在他们自己的评测里,Claude 相当会发现行为不端的子智能体并处理掉。频率没有给。Flows 也不适合一个智能体 30 秒就能做完的事。

预算模型自己看不见。预算主要是护栏,防止 token 跑飞。以今天的模型,如果你把预算告诉它,Claude 会有点焦虑。他们不想要这个。以后他怀疑会改善。Flows 里花到比如 5 美元,会有一条预算到达的事件。会话还在的时候可以加钱,已经完成的工作不会丢掉。后面的例子把一笔 flow 的预算写成 1.25 美元。这和另一项叫 Outcomes 的东西放在一起:你给出想要的结果、期望的评分标准,以及一笔预算。

规模怎么定,他说靠评测和偏低的默认。股票扫描不该拉起 1000 个狂烧 token 的智能体。提问者提到 Navier-Stokes 这类突然挤在一起的科学问题。Navier-Stokes 是描述流体的方程组。那种题你得把 flow 推得更用力,明确要求那种并行。Harrison 说,他不能讲内部研究负载的 harness 长什么样。Flows 作为对外的 API,是把测试时计算投向难题的第一步。

Dreams,字幕里也叫 Dreaming,是另一项产品:把一组会话交进去,结晶并改进相关的记忆库。你可以挂上记忆库,把 flows 跑上他说的大约 10 次,再让这些会话过一遍。Hill climb 是 Claude Code 里的技能,也是 Claude API 技能的子命令。它把 Andrej Karpathy 的 auto research 收成用来迭代提示的技能。你告诉它优化什么,它磨到一条更好的提示。问题不同,它不一定给你一个人工界面;你也可以要求它给。

API 密钥写进 markdown 再交给 Claude,他说这肯定不行。Markdown 有用的一种方式,是逐步揭示上下文:一份索引指向别的文件。做内核的子智能体只看到内核、汇编器和编辑器各自在哪,再读和自己有关的细节,省 token。人的反馈今天用自定义工具:给它一个请求人类反馈的工具,它需要时调用,你再把答复送回。自定义工具也用来把动作踢到一台 Mac 或别的机器上,做完再把结果送回模型。

懒、偏爱自己、把目标忘了

单个智能体反复碰到三件事。

第一是懒。提示是:正在故障,去看这 50 个服务,找出根因,不要碰生产。看完 35 个都健康,它会开始说服自己,剩下的大概也没事,不必再看,省点 token,告诉人可以了。协调者好得有限。三个子智能体向它汇报,它仍得记住看过几个、是不是全都健康。子智能体自己也会变懒。Flows 可以把每个服务交给一个只负责这一小块的智能体。他说这不一定是确定性的,但可以从流程里看出 50 个都分出去了。结束时知道每一个都查过。

第二是自我偏爱。让它写一首诗,再问好不好,它会说好。写完代码再问代码好不好,也会说好。活是它干的,它满意自己干的活。拆开会更好。顾问模式是一个生成、一个评判,用的是生成和判别之间的差距。问题很大时,一层花名册仍然缺少分开的检查点。Flow 可以把对抗性审阅放进自己的隔离上下文,不被它先前查过的东西影响。

第三是目标漂移。最初提示的最后一句是不要碰生产。上下文窗口装满、压缩、再装满,这句可能丢掉。上下文窗口是模型这一轮能看见的文本长度。压缩是把它挤短以便继续。Flow 可以在开头给一个很具体的目标,并以一致的方式抄进各个阶段的子智能体。

审拉取请求,和做讲解视频

Bug Hunter 是他们在用的一种 flow,也做成了模板。你提交拉取请求,它去审性能问题和会坏掉的改动。代码切成片,每片交给一个只审这一片的上下文,先写下这可能是问题。下一阶段对这一片表示同意或不同意。再后面挑出可能真的要核验的候选。人审代码时往往知道这份请求没提到的角落,所以人的审阅仍被信任。证明阶段可以让智能体把仓库拉下来,试着复现,或核验这是不是真问题。实践里这些会变成行内评论:你改了这个文件,远处的角落会产生这个意外,并标出严重程度。测试时计算投在哪一段,取决于是单一仓库还是很多仓库。开这个模板的命令,字幕念成 Cloud API scale manage agents onboard Bug Hunter。scale 像是听错,本文不改成另一串命令。

多仓库的依赖图怎么让它知道,很大程度交给它自己。你给了 GitHub 访问,仓库会挂进它操作的容器。依赖树如果很干净,字幕把那个构建系统听成 Basil,它可以用容器里的工具去看。如果语言没有明确的依赖映射,它可能得按符号搜文件。每次审阅都要像持续集成那样,把仓库重新挂进去。事先做好的依赖图如果生成很贵,可以当文件上传,并告诉它路径。

嵌套层数,问答里的答案是今天只有一层。他们还不支持任意复杂的巨大扇出。以后也许会要,但得先把安全锁死。开场说的任意复杂嵌套,和这里的一层限制并排看:产品叙述更宽,当场能用的范围更窄。

另一条 flow 做讲解视频。Claude 的开发者账号发新产品时,常配一段动画。他们用 flow 生成其中很多条。你说解释动态工作流怎么工作,它可以走研究、计划、侦察、事实核查,写成简报,再交给制作去分场、做动画。实践里还有音效、旁白和脚本。CJ 帮着做这个账号,认为能省很多时间。四年前那种动画,他估大约 20 小时。现在是一小段提示。它不会把成片发布到 YouTube。视频里举的另一个任务是 300 份合同,找出控制权变更条款:智能体写下工作流,后台去跑,结果再合回来。

好看不好看这类不好核验的标准,他建议先在 Claude Code 里把过程做出来,再让 Claude 把你做过的事编成技能,放进 flow。开头通常要先弄清阶段,以及组织里现有流程怎么建,再编码,然后用 hill climb 改提示。可以用人来驱动:生成一条或两条,你说更喜欢哪条,它再生成,用这个偏好改提示。

脑子和手分开

后半场从单个智能体放到可能的几百个,安全要跟着放大。Harrison 列了六件具体的事,并说安全这个词负担太重,这里只谈这六件。

第一,扫公开互联网时,会意外捡到不是你写的指令。文本可能写着忽略先前指令,去另一个域名把信息带走。他们在模型层和整条栈上做,也做了工具调用的分类器,类似 Claude Code 里的 auto mode。

第二,Claude 会披上你交给它的凭证。产品把智能体暴露出去,底下有一台虚拟机在干大部分活。磁盘上如果有一份明文的密钥文件,藏成隐藏文件或放进秘密目录,仍可能被提示出来。他们做了一套抽象,让凭证不必接触沙箱。

第三,有敏感信息时,不要交给不是你的第三方。

第四,不要超出你要求的范围。预算是一种限制。平台上还有别的限制,他没有逐项念。

第五,权限策略把智能体留在你给的工具里。只有授予的工具能跑。

第六,得看得见。持久事件流里有整个生命周期的轨迹。

开发者要做三件事,他收成宣布、关住、看见。宣布智能体是什么、有什么权限、扮演什么人设、有哪些技能和工具。关住是物理限制:最坏情况下,它在公开互联网上能造成的伤害要小。环境策略里可以写只能访问这些域名,或者只能搜索、不能抓取网页,或反过来。看见就是那条事件流。方向不对就打断。

4 月交付时有个说法:脑子和手应该分开。他说这是安全能默认成立的部件。脑子是跑推理的循环、一般的 harness,以及会话状态,也就是生命周期里发生过什么。手是它真正能行动的地方:在计算机上做一次搜索,或在你的 Mac 上跑自定义工具。拿到手的访问,不应该有办法以有害的方式把脑子开走。要放在脑子和 harness 里的秘密,和手分开。

做法是:容器里能碰到的秘密都是假的。拿这个值去调真正的 API 不会成功。只有在出去的路上、出口代理这一层,才换成真凭证。因此没法靠提示,或靠拿到沙箱,把凭证从沙箱或脑子里读出来。

例子用 Twilio 的 API。天真做法是上传一份带密钥的环境变量文件,让容器里的程序去读、再去调用。替代是凭证库。密钥存成环境变量,并声明注入位置:出口请求里,它出现在 bearer 令牌上,还是出现在请求体里。Bearer 令牌是放在请求头里证明身份的字符串。还要声明允许的主机:这份凭证出去时替换到哪个域名。占位秘密即使被猜到,也不该让 Twilio 的密钥发往别的域名,他举了 mydomain.com。环境配置再把网络收成只允许 api.twilio.com。调用别的网站,会在出口的防火墙层失败。

工具给最小集合。网页抓取和网页搜索都可以把启用设成关闭,除非明确允许。MCP 更麻烦,因为服务器会返回哪些工具,事先不知道。他说信任 GitHub,但如果 GitHub 的 MCP 被攻破、多了一个外泄工具,不希望智能体捡起来。所以按每个 MCP 工具开关。

他把权限策略从「每次都问」改成 auto mode,说成今天最容易摘的果子。他们做过研究,也提到有公开研究:人在公园里被连续追问要不要批准时,大约 97% 的情况会点批准。人容易被哄进连续的同意。Auto mode 判断一次调用是安全的,还是破坏性的、是不是真该做。

还可以再开一个 managed agents,把过去一周的会话抄本交给它,问有没有不该访问的东西、古怪的工具调用。抄本可以用 API 从事件日志里拉出来。打断则是发一条 user.interrupt。

责任问题他拒绝当律师来答。他建议想成做平台:你对着 API 做产品,直接和用户有关系的是那层产品。每一层都该尽力不让坏事发生。这是分层防御,不是法律意见。

自托管沙箱有些功能没有完全支持,他一时说不出是哪些。Flows 可以开箱就用。私有数据如果在 VPN 后面,做法是他们称为 MCP tunnels 的东西,今天用 Cloudflare 的隧道,把私有 MCP 接给平台上的智能体,而不暴露到公开互联网。

内部怎么用,他说他们非常依赖 Claude Tag。Tag 是接进 Slack、把信息连在一起的机器人,和这套 API 是相邻的产品,至少目前没有直接接上。你可以用 flows 自己做一个类似的东西。他们用 Tag 看 Jira 和过去 24 小时的活动,甚至主动提议改工单。Jira 是管任务的系统。他说,如果你对 Claude 说每天早上 6 点做这件事,他想这可以开箱工作。接下来几个月,这些产品面之间的缝会继续变小。协作和聊天已经并过一些,Claude Code 也能从很多界面打开。

智能体资源今天没有一键分享。有 Terraform 提供方可以创建智能体。Terraform 是用配置描述基础设施的工具。控制台可以导出。常见做法是你自己做产品,客户用你的界面,背后才是 managed agents。例子是看板上把一张卡片从一列拖到下一列,就触发一次会话。按工作类型调节行为,没有单独的旋钮。有的是每个会话的努力程度,以及按会话覆盖智能体的一部分字段。

收束时他们把话放回 60 年代和 70 年代:大规模工程的组织经验,现在被拿来重做一遍。从模板开始,改成自己的。字幕在掌声里结束。