龙虾AGI通用实验室Lobster AGI Lab · est. 20262026 · 09 · 16
首页 / 文章 / 对AI的思考
对AI的思考

搭Agent系统踩的坑,人类组织100年前就踩过了

格里灰丝2026-04-19约 5038 字Markdown 原文

上一篇文章《AI的第一性原理 | 上下文工程的尽头,是组织学》里,我提了一个观点:Agent系统的scaling,本质上是一个组织问题,不是模型问题。

很多朋友读完之后问了一个很实际的问题:道理我懂了,那具体该怎么设计?

这篇就来回答这个问题。但我要先说一句不太好听的话——如果你期待的是一套标准方案、一个最佳实践、一个拿来就用的架构图,那你会失望。因为这个问题的本质,恰恰在于不存在唯一正确的架构

不过,虽然没有标准答案,但有一把标准的尺子。这把尺子是一个经济学家在1937年给我们的。

一个经济学家的问题

1937年,27岁的罗纳德·科斯(Ronald Coase)发表了一篇论文,问了一个听起来很蠢的问题:

企业为什么存在?

如果市场是高效的,那所有人都应该是自由职业者,每件事都通过市场交易来完成。你需要一个设计师?去市场上找一个,谈价格,签合同,交付。为什么要把设计师雇进公司,每月发工资,用命令让他干活?

科斯的回答是:因为市场交易有成本。

你找一个外部设计师,要花时间搜索、评估、谈判、签约、验收、处理纠纷。这些成本叫做"交易成本"。当交易成本高到一定程度的时候,你还不如把这个人雇过来,用内部命令代替外部交易。

但内部也有成本——管理成本。人多了管不过来,层级多了信息失真,规模大了就会官僚化。

所以企业的边界在哪里?在管理成本和交易成本相等的那个点上

这就是科斯定理的核心。它在1991年拿到了诺贝尔经济学奖。

你可能会问:这和Agent有什么关系?

关系太大了。因为Agent系统里,存在着一模一样的两种力量。

Agent世界里的两种力量

在Agent架构中,你有两种方式让主Agent完成一个复杂任务:

第一种:工作流(Workflow)。 你预先定义好流程:第一步做什么,第二步做什么,如果条件A就走分支B。这就像企业内部的命令链——SOP写死,按流程执行,不需要每次都"重新想"。

第二种:LLM动态调度。 你给主Agent一堆工具描述,让它自己判断该调用哪个、按什么顺序、传什么参数。这就像去市场上临时找人——灵活、适应性强,但每次都要"重新想"。

这两种方式各有成本:

工作流的成本是僵化。一旦写死,它就只能处理你预见到的情况。遇到新场景就只能改代码,而改代码的成本很高。这对应科斯说的"管理成本"——组织内部的刚性。

LLM调度的成本是不稳定。大模型可能选错工具、传错参数、遗漏步骤、幻觉出不存在的能力。而且每次调度都要消耗上下文窗口和推理token,这对应的就是"交易成本"——每一次动态匹配都有代价。

所以,问题的关键来了——

一个具体的调用,到底该写死成工作流,还是交给LLM动态调度?

科斯的尺子直接可以用:比较这两种成本,哪个低选哪个。

一把可以反复使用的尺子

让我把这把尺子具体化。

适合写死成工作流的调用,通常长这样:高频出现、路径稳定、很少有例外情况、失败代价高。比如"用户上传了一份PDF → 提取文本 → 存入知识库"这种流程,你让LLM每次重新决策纯粹是浪费——它99%的情况下都会做出完全一样的决定。写死它,一劳永逸。

适合交给LLM调度的调用,通常长这样:低频出现、路径多变、需要根据上下文灵活判断、创造性比稳定性重要。比如"用户问了一个开放式的研究问题,可能需要搜索网页、也可能需要查数据库、也可能需要写代码跑个分析"——你根本没法预判路径,只能让LLM自己想。

但真正有趣的是那些处于中间地带的调用。它们一开始是动态调度的(因为你还不确定最佳路径),但随着系统运行,数据积累,你会发现某些路径反复出现且总是成功。这时候,这条路径就应该从"市场"沉淀为"企业"——从LLM调度固化为工作流。

反过来也成立:当环境变化、某个工作流开始频繁失败的时候,它就应该被"解冻"——从写死的流程退回LLM动态调度,让系统重新探索。

一个成熟的Agent系统,必然是计划经济和市场经济的混合体。 而且它不是静态的混合,是一个持续动态调整的混合——就像真实世界里,哪些事由企业内部做、哪些事交给市场,边界一直在移动。

这是第一个原理。让我们进入第二个。

你管不了一万个人,Agent也管不了一万个工具

假设你的Agent系统现在有一万个可用工具(子Agent)。主Agent该怎么从中选出最合适的那一个?

最朴素的方案:把一万个工具的描述全部塞进主Agent的上下文窗口,让它自己选。

这行不通。原因有三:第一,一万个工具描述可能就要消耗掉大部分上下文窗口,留给实际任务的空间就不够了;第二,大模型在候选项太多的时候选择准确率会大幅下降——这个现象和人类面对太多选项时的"选择困难症"如出一辙;第三,即使选对了,每次调用的推理成本也极高。

所以你必须分层。

这不是一个设计偏好,而是一个物理约束,就像上一篇文章说的——管理幅度是有限的。一个管理者能有效管理5到10个直接下属,一个LLM能有效从大约几十个工具里准确选择。超过这个数字,就必须引入中间层。

分层的架构大概长这样:

最顶层是主Agent,它只面对5到8个"大类"——比如"代码类任务""数据分析类任务""文档处理类任务""搜索类任务"等等。每个大类背后是一个二级调度Agent,它又面对5到8个更细的子类别。以此递推,直到最底层是具体的执行Agent。

从一万个里选一个,变成了每一层从几个里选一个。决策质量飙升,上下文消耗骤降。

但这引出一个更深的问题——

节点本身可以是一个网络

在上面的分层架构里,每一个"节点"看起来是一个Agent。但实际上,一个节点可以不是单个Agent,而是一个Agent网络

什么意思?

比如说,你有一个"代码类任务"的二级节点。最初,它可能就是一个Agent,擅长写Python代码。但随着需求复杂化,你发现它一个Agent搞不定了——有些任务需要先读文档再写代码,有些需要先写代码再跑测试再根据报错修改,有些需要同时写前端和后端然后联调。于是这个"代码节点"内部,自己长出了一个小型Agent网络:一个负责理解需求,一个负责写代码,一个负责测试,一个负责review。

但对外——对上一级的主Agent来说——它仍然只是"代码类任务"这个单一节点。接口没有变,内部结构复杂了。

这就是嵌套。

嵌套的价值在于两个字:封装

上层不需要知道下层内部发生了什么。主Agent不需要知道"代码节点"内部有几个Agent、它们之间怎么协作。它只需要知道:我把一个代码任务扔给这个节点,它会给我交付结果。就像你叫外卖不需要知道厨房里有几个厨师、谁负责切菜谁负责炒菜。

封装带来了两个极其重要的好处:

第一,复杂度隔离。 每一层只处理自己这一层的复杂度,不会向上泄漏。一万个Agent的系统,主Agent面对的可能只有7个节点——复杂度被逐层消化了。这就是人类组织用层级制度解决规模问题的同构逻辑。

第二,可独立演化。 一个节点内部可以从"单个Agent"成长为"多Agent协作网络",而不需要修改上层的任何东西。你可以在不动全局架构的情况下,局部升级系统的某一部分。这意味着整个系统可以一块一块地进化,而不是每次升级都要推倒重来。

那嵌套什么时候应该发生?判断原则其实很直觉:当一个节点内部的任务复杂度,已经让单个Agent无法高质量完成,但它对外的接口仍然可以保持简洁的时候——就该嵌套了。

这个判断标准和软件工程里"什么时候该把一个函数拆成一个模块"的标准完全一致。不是巧合——这是复杂系统管理的普遍规律。

调度问题:靠模型聪明,还是靠机制设计?

现在来回答那个很多人关心的问题:主Agent到底靠什么来选择正确的子Agent?

有人说:靠大模型足够聪明就行了。只要模型能力够强,给它工具描述,它自然能选对。

有人说:靠强化学习。让系统在大量试错中学会最优调度策略。

我的判断是:这两个都对,但都只对了一部分。而且它们适用于不同的阶段。

第一阶段:语义匹配。 这就是目前最主流的做法——给每个工具写一段描述,靠LLM的语义理解来匹配任务和工具。简单、直接、在工具数量不多的时候效果不错。但它有天花板:当工具超过几十个,描述之间的语义区分度下降,LLM的选择准确率就会明显滑坡。

第二阶段:检索增强调度。 这是分层架构的自然延伸——不让LLM从所有工具里选,而是先用embedding检索缩小范围到top-K,再让LLM从K个里精选。把"万里挑一"变成"先缩到十个,再十里挑一"。这一步大幅提升了准确率,也大幅降低了上下文消耗。

第三阶段:经验积累。 系统运行一段时间后,你有了大量历史数据——哪个任务调用了哪个Agent、成功了还是失败了、耗时多少、用户满意度如何。这些数据就是调度系统的"工作经验"。你可以用它来加权排序(成功率高的Agent优先)、用它来发现模式(某种类型的任务总是由某个Agent处理得最好)、用它来预警(某个Agent最近失败率上升,可能需要检修)。

第四阶段:路径沉淀。 当某条调用路径被反复验证成功,它就不应该还停留在"LLM每次重新决策"的状态——应该被固化成工作流。这就是前面说的"从市场沉淀为企业"。而强化学习在这里找到了它真正的位置:不是用来替代LLM的语义理解,而是用来优化"什么时候该固化、什么时候该解冻"这个元决策。

所以完整的答案是:

短期靠模型聪明(语义匹配),中期靠机制设计(分层检索+经验积累),长期靠演化(路径沉淀+RL元优化)。

单独靠任何一种都不够。就像人类社会的运转,不是单靠领导人英明、也不是单靠制度完善、也不是单靠文化积淀——而是三者叠加。

这让我想到一个有趣的类比。

Agent的人力资源部

让我们把上面说的调度机制拼在一起看,你会发现一件有意思的事——

工具描述 = 简历。 调用历史 = 工作经验。 成功率 = 绩效考核。 embedding检索 = HR系统帮你筛选候选人。 LLM精选 = 面试官做最终判断。 路径沉淀 = 这个岗位的SOP成熟了,不用每次都重新招人。 失败率上升 = 该培训还是该淘汰?

你发现了吗?一个成熟的Agent调度系统,长到最后,就是一个人力资源管理系统。

这不是我在强行类比。这是两个系统面对同一个问题——"如何在大量专业化个体中为每个任务找到最合适的执行者"——时,必然会收敛到的相似结构。

这也再次印证了上一篇文章的核心观点:Agent系统的架构设计,终将与人类组织学重新交汇。不是因为我们想模仿人类,而是因为问题的结构决定了解法的结构

一张判断表

最后,我把这篇文章的核心思路浓缩成一个简单的决策框架,供实际设计Agent系统时参考:

该走工作流还是LLM调度?问自己:这个调用的路径是否稳定、频繁、且很少有例外?如果是,写死工作流。如果路径多变、需要灵活判断,交给LLM调度。如果你不确定——先用LLM调度,积累数据,等路径被反复验证后再固化。

该不该分层?问自己:主Agent需要面对多少个直接候选?如果超过15到20个,就该引入中间层。每层保持5到10个候选项是比较健康的区间。

该不该嵌套?问自己:某个节点内部的任务,是否已经复杂到单个Agent处理吃力,但它对外的接口仍然可以保持简洁?如果是,让这个节点内部长成一个小型Agent网络,但对外维持原有的简洁接口。

调度该用什么机制?看系统所处的阶段。刚起步——靠语义匹配。规模上来了——加分层检索。运行一段时间——引入经验加权。路径成熟了——沉淀为工作流。

写在最后

两篇文章写到这里,有一件事我越来越确信:

Agent架构设计,正在成为一个真正的"交叉学科"。

它需要AI工程师理解大模型的能力边界,也需要他们理解科斯定理讲的交易成本、西蒙讲的有限理性、管理学讲的管理幅度、软件工程讲的模块化封装。

这不是说每个做Agent的人都要去读经济学博士。但如果你完全不了解这些思想,你大概率会在Agent系统变复杂的过程中反复踩坑——而那些坑,人类组织已经踩过了。

有一句话大概可以作为这两篇文章共同的结尾:

模型决定了你的Agent能做什么。组织决定了你的Agent能做到多大。

前者是工程问题,后者是设计哲学。当规模的临界点到来的时候,后者会比前者重要得多。

而那个临界点,可能比我们以为的,来得更快。

上一篇AI的第一性原理 | 上下文工程的尽头,是组织学下一篇我们一直管它叫"语言大模型",但它可能只是个"文字大模型"