文章翻译自www.anthropic.com/engineering…
我们是如何构建多智能体研究系统的
发布于 2025 年 6 月 13 日
我们的研究功能采用多个 Claude 智能体,更高效地探索复杂主题。在此,我们分享构建该系统时遇到的工程挑战以及获得的经验教训。
Claude 如今具备研究能力,能够通过网络、谷歌工作空间以及各种集成工具开展搜索,进而完成复杂任务。
这个多智能体系统从原型到投入生产的过程,让我们在系统架构、工具设计和提示工程方面收获了关键经验。多智能体系统由多个智能体(能自主循环使用工具的大语言模型)组成,它们相互协作。我们的研究功能包含这样一个智能体:它会根据用户的查询来规划研究流程,然后借助工具创建可同时搜索信息的并行智能体。多智能体系统在智能体协作、评估和可靠性方面带来了新的挑战。
本文将详细阐述对我们有效的原则,希望这些原则能对您构建自己的多智能体系统有所帮助。
多智能体系统的优势
研究工作涉及的是开放性问题,提前预测所需步骤极为困难。探索复杂主题的路径具有内在的动态性和路径依赖性,因此无法硬编码固定的路径。人们进行研究时,往往会根据发现不断调整方法,顺着调查中出现的线索深入探究。
这种不可预测性使得人工智能智能体特别适合研究任务。研究需要具备灵活性,以便在调查过程中转向或探索相关的关联内容。模型必须能自主进行多轮操作,根据中间发现来决定研究方向。线性的、一次性的流程无法完成这些任务。
搜索的本质是压缩:从海量语料中提取见解。子智能体通过在各自的上下文窗口中并行运作,同时探索问题的不同方面,然后为主要研究智能体浓缩最重要的信息,从而促进这种压缩过程。每个子智能体还实现了关注点分离 —— 拥有独特的工具、提示和探索轨迹,这减少了路径依赖性,有助于开展全面、独立的调查。
当智能达到一定阈值后,多智能体系统成为提升性能的关键方式。例如,在过去 10 万年里,尽管人类个体的智能有所提升,但在信息时代,人类社会的能力呈指数级增长,这得益于我们的集体智慧和协作能力。即便是具备通用智能的智能体,单独运作时也会面临局限,而智能体群体能完成的任务要多得多。
我们的内部评估显示,多智能体研究系统在广度优先查询方面表现尤为出色,这类查询需要同时探索多个独立方向。评估发现,以 Claude Opus 4 作为主导智能体、Claude Sonnet 4 作为子智能体的多智能体系统,在内部研究评估中的表现比单一智能体 Claude Opus 4 高出 90.2%。比如,当被要求找出标普 500 信息技术板块所有公司的董事会成员时,多智能体系统通过将任务分解给子智能体来找到正确答案,而单一智能体系统由于采用缓慢的顺序搜索,未能找到答案。
多智能体系统之所以有效,主要是因为它们能投入足够的 “令牌” 来解决问题。在我们的分析中,三个因素解释了 BrowseComp 评估(测试浏览智能体定位难寻信息的能力)中 95% 的性能差异。我们发现,令牌使用量本身就解释了 80% 的差异,另外两个解释因素是工具调用次数和模型选择。这一发现验证了我们的架构合理性,即通过在具有独立上下文窗口的智能体之间分配工作,增加并行推理的能力。最新的 Claude 模型在令牌使用效率上有很大提升,升级到 Claude Sonnet 4 带来的性能提升,比将 Claude Sonnet 3.7 的令牌预算增加一倍还要显著。对于超出单一智能体能力范围的任务,多智能体架构能有效提升令牌使用规模。
但多智能体系统也有缺点:实际上,这些架构会快速消耗令牌。我们的数据显示,智能体的令牌使用量通常是聊天交互的约 4 倍,而多智能体系统的令牌使用量约是聊天的 15 倍。从经济可行性角度来看,多智能体系统所处理的任务,其价值必须足够高,以弥补性能提升所增加的成本。此外,有些领域要求所有智能体共享相同的上下文,或者智能体之间存在众多依赖关系,这类领域目前并不适合多智能体系统。例如,大多数编码任务的真正可并行化任务比研究任务少,而且大语言模型智能体在实时协作和向其他智能体委派任务方面还不够出色。我们发现,多智能体系统在以下任务中表现出色:需要大量并行处理的高价值任务、信息超出单一上下文窗口的任务,以及需要与众多复杂工具交互的任务。
研究系统的架构概述
我们的研究系统采用多智能体架构,遵循 “协调者 - 工作者” 模式,由一个主导智能体协调整个过程,同时将任务委派给专门的子智能体,这些子智能体并行运作。
实际运行中的多智能体架构: 用户查询流经主导智能体,主导智能体创建专门的子智能体,并行搜索不同方面的信息。
当用户提交查询时,主导智能体会对其进行分析,制定策略,并生成子智能体来同时探索不同的方面。如上图所示,子智能体充当智能过滤器,通过反复使用搜索工具收集信息(在本例中是关于 2025 年的人工智能智能体公司),然后将公司列表返回给主导智能体,以便主导智能体整理出最终答案。
传统的检索增强生成(RAG)方法采用静态检索。也就是说,它们会获取与输入查询最相似的一组信息片段,并利用这些片段生成响应。相比之下,我们的架构采用多步骤搜索,动态查找相关信息,根据新发现进行调整,并分析结果以形成高质量的答案。
流程 diagram 展示了我们多智能体研究系统的完整工作流程。 当用户提交查询时,系统会创建一个 “首席研究员” 智能体,该智能体进入迭代研究过程。“首席研究员” 首先思考研究方法,并将其计划保存到 “内存” 中以保存上下文,因为如果上下文窗口超过 200,000 个令牌,就会被截断,而保留计划至关重要。然后,它会创建专门的子智能体(此处显示两个,但数量可以是任意的),并为其分配特定的研究任务。每个子智能体独立进行网络搜索,通过交错思考评估工具结果,并将发现返回给 “首席研究员”。“首席研究员” 综合这些结果,决定是否需要进一步研究 —— 如果需要,它可以创建更多的子智能体或调整策略。一旦收集到足够的信息,系统就会退出研究循环,并将所有发现传递给 “引用智能体”,该智能体处理文档和研究报告,确定引用的具体位置。这确保所有观点都能正确归因于其来源。最后,带有完整引用的研究结果会返回给用户。
研究型智能体的提示词工程与评估
多智能体系统与单智能体系统存在关键差异,其中包括协作复杂度的急剧上升。早期的智能体会出现各种错误,比如为简单查询生成 50 个子智能体、无休止地在网上搜索不存在的来源,以及用过多的更新信息干扰彼此。由于每个智能体都由提示词引导,因此提示词工程是我们改进这些行为的主要手段。以下是我们在提示智能体时总结的一些原则:
-
换位思考智能体的思路:要迭代优化提示词,就必须理解它们产生的效果。为了做到这一点,我们利用控制台构建了模拟环境,使用与系统中完全相同的提示词和工具,然后一步步观察智能体的工作过程。这直接揭示了各种失败模式:智能体在已经获得足够结果的情况下仍继续工作、使用过于冗长的搜索查询,或者选择了错误的工具。有效的提示词设计依赖于建立对智能体准确的心智模型,这能让最具影响力的改进点变得清晰可见。
-
教会协调者如何委派任务:在我们的系统中,主导智能体将查询分解为子任务,并向子智能体描述这些任务。每个子智能体都需要明确的目标、输出格式、关于使用工具和来源的指导,以及清晰的任务边界。如果没有详细的任务描述,智能体可能会重复工作、留下信息空白,或者无法找到必要的信息。我们一开始允许主导智能体给出简单、简短的指令,比如 “研究半导体短缺问题”,但发现这些指令往往过于模糊,导致子智能体误解任务,或者与其他智能体进行完全相同的搜索。例如,一个子智能体研究 2021 年的汽车芯片危机,而另外两个则重复研究 2025 年当前的供应链,没有进行有效的分工。
-
根据查询复杂度调整工作量:智能体很难判断不同任务所需的适当工作量,因此我们在提示词中嵌入了缩放规则。简单的事实查找只需要 1 个智能体,进行 3-10 次工具调用;直接比较可能需要 2-4 个子智能体,每个进行 10-15 次调用;而复杂的研究可能需要 10 个以上分工明确的子智能体。这些明确的指导方针帮助主导智能体高效分配资源,避免在简单查询上过度投入,这是我们早期版本中常见的失败模式。
-
工具设计与选择至关重要:智能体与工具的接口和人机接口同样关键。使用合适的工具能提高效率 —— 而且往往是必不可少的。例如,一个智能体在网上搜索只存在于 Slack 中的信息,从一开始就注定会失败。由于 MCP 服务器让模型能够访问外部工具,这个问题变得更加复杂,因为智能体会遇到各种前所未见的工具,其描述质量参差不齐。我们为智能体提供了明确的启发式规则:例如,先检查所有可用工具、使工具的使用与用户意图匹配、在进行广泛的外部探索时使用网络搜索,或者优先使用专门工具而非通用工具。糟糕的工具描述可能会让智能体走上完全错误的道路,因此每个工具都需要有明确的用途和清晰的描述。
-
让智能体自我改进:我们发现 Claude 4 模型可以成为出色的提示词工程师。当给它们一个提示词和一种失败模式时,它们能够诊断智能体失败的原因并提出改进建议。我们甚至创建了一个工具测试智能体 —— 当给它一个有缺陷的 MCP 工具时,它会尝试使用该工具,然后重写工具描述以避免失败。通过数十次测试该工具,这个智能体发现了关键的细微差别和漏洞。这种改进工具易用性的过程使得使用新描述的后续智能体的任务完成时间减少了 40%,因为它们能够避免大多数错误。
-
先广后窄:搜索策略应该模仿专家的研究方式:先探索整体情况,再深入细节。智能体通常会默认使用过长、过于具体的查询,导致返回的结果很少。为了 counteract 这种倾向,我们提示智能体先使用简短、宽泛的查询,评估可用信息,然后逐步缩小关注范围。
-
引导思考过程:扩展思考模式能让 Claude 在可见的思考过程中输出更多令牌,可作为一个可控的草稿区。主导智能体利用思考来规划其方法,评估哪些工具适合该任务、确定查询复杂度和子智能体数量,并定义每个子智能体的角色。我们的测试表明,扩展思考改进了指令遵循度、推理能力和效率。子智能体也会进行规划,然后在工具返回结果后使用交错思考来评估质量、识别差距并优化下一个查询。这使得子智能体在适应任何任务时都更加有效。
-
并行工具调用改变速度和性能:复杂的研究任务自然涉及探索多个来源。我们早期的智能体执行顺序搜索,速度非常慢。为了提高速度,我们引入了两种并行化方式:(1)主导智能体并行启动 3-5 个子智能体,而不是串行;(2)子智能体并行使用 3 个以上的工具。这些变化将复杂查询的研究时间缩短了高达 90%,使研究功能能在几分钟内完成更多工作,而不是几小时,同时覆盖的信息比其他系统更多。
我们的提示词策略侧重于灌输良好的启发式规则,而非僵化的规则。我们研究了熟练的人类如何处理研究任务,并将这些策略编码到提示词中 —— 比如将难题分解为更小的任务、仔细评估来源质量、根据新信息调整搜索方法,以及识别何时应注重深度(深入研究一个主题)与广度(并行探索多个主题)。我们还通过设置明确的护栏来主动减轻意外副作用,防止智能体失控。最后,我们专注于建立具有可观测性和测试用例的快速迭代循环。
智能体的有效评估
良好的评估对于构建可靠的人工智能应用至关重要,智能体也不例外。然而,评估多智能体系统面临独特的挑战。传统评估通常假设人工智能每次都会遵循相同的步骤:给定输入 X,系统应遵循路径 Y 以产生输出 Z。但多智能体系统并非如此。即使起点相同,智能体也可能采取完全不同但有效的路径来实现目标。一个智能体可能搜索 3 个来源,而另一个可能搜索 10 个,或者它们可能使用不同的工具找到相同的答案。由于我们并不总是知道正确的步骤是什么,通常无法仅检查智能体是否遵循了我们预先规定的 “正确” 步骤。相反,我们需要灵活的评估方法,判断智能体是否达成了正确的结果,同时遵循了合理的过程。
-
立即开始用小样本进行评估:在智能体开发的早期,由于存在大量容易解决的问题,改动往往会产生显著影响。一个提示词的微调可能会将成功率从 30% 提高到 80%。在这种效果规模下,只需几个测试用例就能发现变化。我们从大约 20 个代表实际使用模式的查询开始。测试这些查询通常能让我们清楚地看到改动的影响。我们经常听说人工智能开发团队推迟创建评估,因为他们认为只有包含数百个测试用例的大型评估才有用。然而,最好立即开始小规模测试,用几个例子进行评估,而不是等到能够构建更全面的评估再开始。
-
大语言模型作为评判者的评估在做好的情况下具有可扩展性:研究输出很难通过编程方式评估,因为它们是自由形式的文本,很少有单一的正确答案。大语言模型非常适合给输出评分。我们使用一个大语言模型评判者,根据评分标准中的标准评估每个输出:事实准确性(主张是否与来源一致?)、引用准确性(引用的来源是否与主张匹配?)、完整性(是否涵盖了所有要求的方面?)、来源质量(是否优先使用主要来源而非质量较低的次要来源?)以及工具效率(是否在合理次数内使用了正确的工具?)。我们尝试用多个评判者评估每个部分,但发现用一个提示词让单个大语言模型输出 0.0-1.0 的分数和通过 / 失败等级是最一致的,也与人类判断一致。当评估测试用例有明确答案时,这种方法特别有效,我们可以让大语言模型评判者简单地检查答案是否正确(例如,它是否准确列出了研发预算前三名的制药公司?)。使用大语言模型作为评判者使我们能够大规模评估数百个输出。
-
人类评估能发现自动化评估遗漏的内容:测试智能体的人员会发现评估用例遗漏的边缘情况。这些包括对不常见查询的幻觉答案、系统故障,或微妙的来源选择偏差。在我们的案例中,人类测试者注意到我们早期的智能体总是选择经过 SEO 优化的内容农场,而不是权威性高但排名较低的来源,如学术 PDF 或个人博客。在我们的提示词中添加来源质量启发式规则帮助解决了这个问题。即使在自动化评估的时代,手动测试仍然至关重要。
多智能体系统具有涌现行为,这些行为并非通过特定编程产生。例如,对主导智能体的微小改动可能会不可预测地改变子智能体的行为。要取得成功,需要理解交互模式,而不仅仅是单个智能体的行为。因此,这些智能体的最佳提示词不仅仅是严格的指令,更是定义分工、解决问题方法和工作量预算的协作框架。要做到这一点,需要精心设计提示词和工具、完善的启发式规则、可观测性以及紧密的反馈循环。详见我们 Cookbook 中的开源提示词,其中包含我们系统中的示例提示词。
生产可靠性与工程挑战
在传统软件中,一个漏洞可能会导致功能失效、性能下降或系统中断。而在智能体系统中,微小的变化会引发大规模的行为改变,这使得为需要在长期运行过程中维持状态的复杂智能体编写代码变得异常困难。
智能体是有状态的,且错误会不断累积。智能体可以长时间运行,在多次工具调用过程中保持状态。这意味着我们需要稳定地执行代码,并在过程中处理错误。如果没有有效的缓解措施,轻微的系统故障都可能对智能体造成灾难性影响。当错误发生时,我们不能简单地从头重启:重启不仅成本高昂,还会让用户感到沮丧。因此,我们构建了能够从智能体发生错误时的状态恢复运行的系统。我们还利用模型的智能来妥善处理问题:例如,当工具出现故障时,告知智能体并让其自行调整,这种方法的效果出奇地好。我们将基于 Claude 构建的 AI 智能体的适应性与确定性保障(如重试逻辑和定期检查点)相结合。
调试需要新的方法。智能体会做出动态决策,即使使用完全相同的提示词,在不同运行之间也具有非确定性。这让调试工作变得更加困难。例如,用户会报告智能体 “找不到明显存在的信息”,但我们却无法查明原因。是智能体使用了糟糕的搜索查询?选择了劣质的信息来源?还是遇到了工具故障?添加完整的生产追踪功能后,我们得以诊断智能体失败的原因,并系统性地解决问题。除了标准的可观测性之外,我们还监控智能体的决策模式和交互结构 —— 所有这些都不会监控单个对话的内容,以保护用户隐私。这种高层次的可观测性帮助我们诊断根本原因、发现意外行为并修复常见故障。
部署需要精心协调。智能体系统是由提示词、工具和执行逻辑构成的高度有状态网络,几乎会持续运行。这意味着每当我们部署更新时,智能体可能处于其运行过程中的任何阶段。因此,我们需要防止本意良好的代码变更破坏现有的智能体。我们不能同时将所有智能体更新到新版本。相反,我们采用 “彩虹部署”(rainbow deployments)的方式,在新旧版本同时运行的情况下,逐步将流量从旧版本切换到新版本,以避免干扰正在运行的智能体。
同步执行会造成瓶颈。目前,我们的主导智能体同步执行子智能体,在继续下一步之前会等待每组子智能体完成任务。这简化了协调工作,但在智能体之间的信息流中造成了瓶颈。例如,主导智能体无法引导子智能体,子智能体之间无法协作,而且整个系统可能会因为等待单个子智能体完成搜索而陷入停滞。异步执行将能够实现更多的并行性:智能体可以同时工作,并在需要时创建新的子智能体。但这种异步性在子智能体的结果协调、状态一致性和错误传播方面带来了挑战。随着模型能够处理更长、更复杂的研究任务,我们预计性能提升将足以证明这种复杂性是值得的。
结论
在构建 AI 智能体时,最后一公里往往占据了旅程的大部分。在开发人员机器上能运行的代码库,需要经过大量工程改造才能成为可靠的生产系统。智能体系统中错误的累积性意味着,对于传统软件来说只是小问题的情况,却可能让智能体完全失控。一个步骤的失败可能导致智能体探索完全不同的路径,从而产生不可预测的结果。基于本文所述的所有原因,原型与生产之间的差距往往比预期的更大。
尽管存在这些挑战,多智能体系统已被证明在开放式研究任务中具有重要价值。用户表示,Claude 帮助他们发现了未曾考虑过的商业机会、规划复杂的医疗选择、解决棘手的技术漏洞,并且通过发掘他们独自无法找到的研究关联,节省了多达数天的工作时间。通过精心的工程设计、全面的测试、注重细节的提示词和工具设计、稳健的运营实践,以及对当前智能体能力有深刻理解的研究、产品和工程团队之间的紧密协作,多智能体研究系统能够大规模可靠地运行。我们已经看到这些系统正在改变人们解决复杂问题的方式。
一张 Clio 嵌入图展示了目前人们使用研究功能的最常见方式。最主要的用例类别包括:跨专业领域开发软件系统(10%)、开发和优化专业及技术内容(8%)、制定业务增长和 revenue 生成策略(8%)、辅助学术研究和教育材料开发(7%),以及研究和验证有关人员、地点或组织的信息(5%)。
致谢
本文作者:杰里米・哈德菲尔德、巴里・张、肯尼斯・连、弗洛里安・舒尔茨、杰里米・福克斯和丹尼尔・福特。这项工作反映了 Anthropic 公司多个团队为研究功能的实现所付出的集体努力。特别感谢 Anthropic 的应用工程团队,他们的奉献精神将这个复杂的多智能体系统推向了生产阶段。我们也非常感谢早期用户的宝贵反馈。
附录
以下是关于多智能体系统的一些其他杂项提示。
对多轮次状态突变智能体的终态评估。评估在多轮对话中修改持久状态的智能体存在独特挑战。与只读研究任务不同,每一个动作都可能改变后续步骤的环境,形成传统评估方法难以处理的依赖关系。我们发现专注于终态评估而非逐轮分析是有效的。不评判智能体是否遵循了特定流程,而是评估它是否达成了正确的最终状态。这种方法承认智能体可能会找到通往同一目标的替代路径,同时仍能确保它们交付预期结果。对于复杂工作流,可将评估拆分为多个离散检查点,在这些检查点上应发生特定的状态变化,而非尝试验证每一个中间步骤。
长周期对话管理。生产环境中的智能体经常会参与长达数百轮的对话,这需要精心的上下文管理策略。随着对话的延长,标准的上下文窗口会变得不足,因此需要智能压缩和记忆机制。我们实施了这样的模式:智能体在进入新任务前,会总结已完成的工作阶段,并将关键信息存储到外部记忆中。当接近上下文限制时,智能体可以生成具有干净上下文的新子智能体,同时通过精心的交接保持连贯性。此外,它们可以从记忆中检索已存储的上下文(如研究计划),而不会在达到上下文限制时丢失之前的工作。这种分布式方法可防止上下文溢出,同时在长时间交互中保持对话的连贯性。
子智能体输出至文件系统以减少 “电话游戏” 效应。对于某些类型的结果,子智能体的直接输出可以绕过主协调者,从而提高保真度和性能。不要求子智能体通过主导智能体传递所有信息,而是构建工件系统,让专门的智能体能够创建独立持久的输出。子智能体调用工具将其工作存储到外部系统中,然后向协调者传递轻量级引用。这可防止在多阶段处理中出现信息丢失,并减少因通过对话历史复制大型输出而产生的令牌开销。这种模式特别适用于结构化输出(如代码、报告或数据可视化),在这些情况下,子智能体的专用提示词比通过通用协调者过滤能产生更好的结果。
写在最后
我最近正在使用一个很好用的Claude code镜像:
aicodemirror
加上点com,就可使用,填写我的码5OTTEB还可以获得额外额度,快来试试。