写在前面
2026年3月31日,AI圈炸了。Anthropic的Claude Code因npm打包失误,超51万行TypeScript源代码意外暴露在公网,近2000个文件、59.8MB的source map让全球开发者得以一窥这款爆款AI编程工具的完整架构。彼时我的RAG项目正面临一个老问题:用户问复杂问题时,单次检索+生成的模式总是答非所问。我一直在琢磨“多个Agent如何配合”这件事,却苦于没找到成熟的参考实现。这次泄露像一扇突然打开的窗——看完源码分析后,我不再纠结,直接动手写了一套多Agent调度实验代码。今天把这扇窗推开,带你看看顶级AI Agent的架构长什么样,以及如何把它的设计精髓移植到自己的项目中。
一、事件回顾:51万行代码,一场“史诗级乌龙”
2026年3月31日,Anthropic向npm推送 Claude Code v2.1.88版本时,因发布流程缺乏内容检查,无意中将一个用于内部调试的59.8MB JavaScript source map文件打包进了公开发布的npm包中。这份文件完整映射了Claude Code超过51万行TypeScript源码,包含近2000个文件,完整暴露了这款AI编程工具的运行时架构、工具系统、多Agent编排逻辑以及44个尚未发布的功能特性。
安全研究员Chaofan Shou在X平台率先披露后,GitHub上fork数在数小时内飙升至4万多,代码已在社区永久留存。攻击者借势建立伪造仓库,以“解锁版”为诱饵散布Vidar信息窃取程序,开发者面临双重安全威胁。
更有讽刺意味的是,Anthropic事后用DMCA投诉下架GitHub上的代码,却因“无差别攻击”误删了数千个合法仓库。
对于AI开发者来说,这次泄露同样是双重馈赠——它把一整套经过生产验证、专为Agentic工作流设计的架构图纸,摊开在了所有人面前。
二、架构拆解:Claude Code的多Agent循环调用如何设计
2.1 总体架构:Agentic Harness——Agent的“操作系统”
泄露代码揭示了一个核心概念:Agentic Harness——包裹在LLM外围的完整软件层,告诉模型如何使用工具、执行安全管控、编排工作流。业界逐渐达成的共识是:LLM本身正在商品化,真正的竞争壁垒在于编排层的工程化程度。
Claude Code的Agentic Harness包含超过25个bash安全验证器、沙箱边界设定、多层次权限验证体系、任务系统与依赖图(用于并行执行)、工作树隔离机制、上下文压缩与内存蒸馏系统。
2.2 Agent循环调用的核心模式
模式一:Orchestrator-Worker(单Agent循环 + 子Agent分发)
这是Claude Code最核心的Agent循环架构——ReAct范式的一次工业化升级。一个中央Orchestrator Agent不断循环推理当前任务状态,决定下一步行动。当任务涉及不同专业领域时,Orchestrator动态生成子Agent(Subagent),分配到隔离的上下文中执行,结果汇总后回到主循环。
Spring AI官方博客将这种模式称为Subagent Orchestration——通过Task工具让主Agent在运行时决定委托给哪个专业子Agent,每个子Agent在独立的上下文窗口中运行,防止跨任务干扰。每个子Agent可以用不同的LLM模型——简单任务分配给轻量级模型,复杂分析则路由到推理能力更强的大模型。
谷歌DeepMind研究证实,结构化编排器-工作者模式能将单Agent的性能提升90.2%,而无结构的“一袋Agent”架构则让误差放大17倍。
模式二:ReAct——单Agent的自我循环
ReAct(Reasoning + Acting)是目前Agent推理的标准模式,让Agent在“思考→行动→观察→总结”的迭代循环中逼近目标。
为什么需要循环?将RAG流水线中的“检索”从一次性步骤升级为Agent的刻意行动。Agent可以用RAG检索知识,发现不够用就主动切到联网搜索,再不行就请求确认。单次RAG只能返回一个答案,而Agent通过循环能够自主规划下一步行动。
AgentScope Java的ReActAgent封装了这一范式,支持思考→行动→观察的异步迭代,并允许开发者在执行过程中实时介入和打断——传统Agent一旦启动就“放飞自我”,而实时介入机制相当于给Agent装上了“刹车”。
模式三:KAIROS——常驻后台的“隐形Agent”
泄露代码中被引用150多次的KAIROS feature flag格外引人注目。它代表Claude Code的常驻“守护进程”能力——即使用户不主动输入,Agent也能在后台持续运行:夜间“记忆蒸馏”——将零散观察合并、修剪不一致状态、重写模糊记录为确定性断言;监听GitHub webhook事件;按cron周期主动刷新知识。
记忆系统设计同样精巧:MEMORY.md作为“指针索引”常驻上下文,具体项目知识按主题拆分存储,Agent在执行关键操作前再次核对真实代码库,将自身记忆视为“可错提示”而非绝对真理。
Agent还能通过fork子Agent执行后台任务,避免污染主推理线程。这种设计对构建企业的长期记忆系统和跨会话状态持久化具有重要参考价值。
2.3 多工具协同与工具系统
泄露源码显示超过40个完全构建但尚未全部公开的工具模块,覆盖文件读写、Bash执行、子Agent生成、浏览器自动化等能力。近50000行代码的QueryEngine.ts核心推理文件负责思维链调度与任务规划。工具定义通过标准化接口注入给LLM——也就是MCP协议所做的事。
ROMA学术框架提出了递归任务分解的四角色分工:Atomizer决定任务是否分解、Planner规划执行步骤、Executor执行子任务、Aggregator聚合中间结果——被证明能将长时推理精度提升约10个百分点。
三、如何应用到自己的RAG项目
3.1 明确Agent与RAG的协作范式
传统RAG是检索 → LLM的静态流水线。引入Agent循环后,检索变成多轮动态决策过程中的一个可复用工具。Agent-RAG协作有如下范式:
单Agent + ReAct循环:Agent主动评估检索结果是否充足,决定是否需要再次检索或换用其他策略
Orchestrator-Worker:主Agent将“对比A和B”拆分为多个检索子任务并行执行,Worker各自检索不同文档片段,主Agent汇总对比
混合工具调用:Agent在同一问题中串联RAG检索、联网搜索、数据库查询等多种工具
迭代优化:生成答案后Agent自我评估——准确率不够高?附带引用不够充分?调用二次检索工具补充
3.2 实验代码:基于AgentScope的RAG Agent
下面是我在Java项目中实际调试可运行的Agent + RAG Demo代码,基于马老师(Spring AI Alibaba)调研时推荐的AgentScope Java框架。
import com.alibaba.agentscope.core.ReActAgent; import com.alibaba.agentscope.tool.Toolkit; import com.alibaba.agentscope.rag.RagTool; import com.alibaba.agentscope.vector.FaissVectorStore; public class RAGAgentDemo { public static void main(String[] args) { // 1. 构建向量库(可以用你已有的RAG代码逻辑) FaissVectorStore vectorStore = FaissVectorStore.builder() .embeddingModel(new QwenEmbeddingModel()) .build(); // 2. 将RAG检索封装为Agent Tools Toolkit toolkit = new Toolkit(); toolkit.registerTool(new RagTool(vectorStore)); // 检索知识库 toolkit.registerTool(new WebSearchTool()); // 联网搜索 toolkit.registerTool(new DocumentAnalyzeTool()); // PDF分析 // 3. 构建ReAct Agent(单Agent + 循环) ReActAgent agent = ReActAgent.builder() .name("RAGAssistant") .sysPrompt("你是一个知识助手。回答问题前请先检索内部知识库。" + "如果内部知识不足,切换到联网搜索。检索结果必须附带引用。") .model(new QwenChatModel("qwen-max")) .toolkit(toolkit) .maxIterations(5) // 防止无限循环 .build(); // 4. 执行带循环的任务 AgentResponse response = agent.call( "分析一下2025年Q4新能源汽车销量排名,附数据来源" ); // 5. 观察Agent执行过程 for (TraceStep step : response.getTrace()) { System.out.println("Step: " + step.getThink()); // 看到了什么? System.out.println("Action: " + step.getAct()); // 做了什么? System.out.println("Observe: " + step.getObserve()); // 拿到了什么? } System.out.println("Final Answer: " + response.getAnswer()); // 自动附带检索来源引用 } }AgentScope的实时介入能力让Agent在跑偏时能被人为打断——在生产环境中至关重要。关键在于Agent会先调用RAG检索内部知识,评估后发现不够,调用联网搜索补充,最后生成整合答案——全程不给开发硬编码每一步,把“行动-观察-再行动”的控制权交给Agent。
3.3 RAG项目演进路线图
结合阿里云AgentScope team提出的“单智能体优先”原则,我规划的演进路径如下:
阶段1(当前):标准RAG + 基础LangChain Chain——用户问题→向量检索→LLM生成。单轮问答基本够用
阶段2:单Agent + ReAct循环 + RAG工具化——将检索封装为Tool,Agent自主决定何时检索、何时多轮追问。参考WeKnora开源项目的ReAct Agent设计。Agent能回应“不够详细,再查更多资料”
阶段3:Orchestrator + Worker子Agent + 多源工具——主Agent自动拆解复杂问题为多个检索子任务并行执行,Worker分别搜索不同文档片段,主Agent汇总对比产出报告
阶段4:长时记忆 + KAIROS风格后台——跨会话记忆:Agent记住用户偏好的回答风格、常用筛选条件,夜间做“记忆蒸馏”压缩冗余信息,第二天直接延续上次对话状态
四、如何应用到传统Java项目
4.1 Java生态的Agent框架选型
好消息是,Java生态在2026年已有多款成熟的Agent框架可供选择:
4.2 用Spring AI搭建Subagent并行处理流程
// 基于Spring AI Alibaba 1.1.2.0 import com.alibaba.cloud.ai.graph.ReactAgent; import com.alibaba.cloud.ai.graph.agent.*; public class ParallelRAGExample { public static void main(String[] args) { // 并行Agent:多个检索Worker同时执行 ParallelAgent parallelAgent = ParallelAgent.builder() .addSubAgent(new RagWorker("pdf_rag", pdfVectorStore)) .addSubAgent(new RagWorker("web_rag", webSearchTool)) .addSubAgent(new RagWorker("db_rag", sqlVectorStore)) .build(); // 顺序Agent:先并行检索 → 再汇总生成 SequentialAgent workflow = SequentialAgent.builder() .addAgent(parallelAgent) // 多个Worker并行检索 .addAgent(new AggregatorAgent()) // 汇总所有结果 .build(); AgentResponse response = workflow.call( "分析今年Q2、Q3的销售数据," + "对比去年同期的增长趋势" ); } }4.3 构建企业级多Agent系统的设计原则
先单智能体,后多智能体:先用ReAct Agent加几个工具,简单问题直接处理。只有遇到特定阈值才引入多智能体架构
结构化最重要:Google DeepMind已证实无拓扑结构的多Agent系统将误差放大至17倍
上下文隔离:每个Subagent在独立上下文窗口中运行——避面跨消息相互污染
分工清晰:每个Agent只做一件事——一个查销售数据、一个做环比分析、一个格式化报表,比让一个全能Agent学会所有事靠谱得多
人机协作:关键操作前添加Human-in-the-loop介入点
五、总结
Claude Code源码泄露是一次教科书级的意外“开源”。它让外界看到了顶级AI Agent的工业级架构:Agentic Harness编排层、ReAct循环、Orchestrator-Worker、KAIROS后台记忆模式、多工具MCP集成。
对正在构建Agent应用的开发者而言,几点核心启示值得记住:
LLM正在商品化,真正的长期竞争力在于编排层——工具定义、安全围栏、记忆系统和工作流逻辑的设计与工程化
先单Agent + 工具,后多Agent编排,大多数业务用ReAct Agent就够了
编排拓扑比框架选择重要,无结构的多Agent误差放大到17倍,而结构化编排能提升90%以上性能
上下文隔离是Multi-Agent的命脉,每个子Agent在独立窗口中运行+Summary压缩,将干扰降到最低
Java开发者在AI Agent时代并不落后——Spring AI、AgentScope、Embabel等Java新框架已形成完整生态
回到最初的问题:你的RAG项目需不需要引入多Agent?如果你的用户问“对比A和B产品优缺点”,RAG返回了一堆可能相关的文档片段,但Agent可以把这个问题拆解成三个专业步骤并行处理,最后生成有对比、有数据、有观点的结构化分析。这就是多Agent调用的价值。
而对于传统Java项目,Agent可以帮你做任务规划、多步工单处理、审批流自动化——有状态、可打断、可持续对话。建议从最轻量的Spring AI Agent开始尝试几步推理,再根据业务复杂度向上演进。
Claude Code的泄露揭示了大量未公开功能(包括赛博宠物BUDDY和常驻后台KAIROS)。你觉得,如果让Agent在夜间“记忆蒸馏”,你的项目能不能做到第二天自动继续昨天的推理?你在设计现代Agent时,会优先卡在哪些工程难题上?欢迎在评论区分享一下——设计一套好用的多Agent系统,总能碰到意想不到的坑。
如果这篇文章帮到了你,欢迎点赞+收藏+关注,我会持续输出AI工程化、RAG、Agent相关的高质量内容。你的支持是我创作的动力!