收藏备用|大模型应用演进3阶段(React/Multi-agent+Spring AI Alibaba实战)
本文详细拆解大模型应用的三大演进阶段从基础组件构建、工作流编排到自主Agent落地重点剖析React模式与Multi-agent模式的核心逻辑及实现原理。结合Spring AI Alibaba框架手把手演示Java如何快速实现简单Multi-agent框架对比手写框架与成熟框架的差异给出清晰的技术选型建议。最后通过实战案例完整呈现Plan-Execute模式的实现流程总结开发效率提升技巧与上下文工程的核心关注点适合小白入门、程序员进阶学习建议收藏备用一、前言不久前Spring AI和Spring AI Alibaba都迎来了新版本的发布首次在框架层面支持了Multi-agent 编排能力看到官方示例中的ReactAgent构建代码以及其“10 行代码就可以启动并运行一个智能体应用”的宣传决定试一试。结果花了5个小时把线上正在运行的Multi-agent框架基本重新实现了一遍且功能基本一致带来的感受的确不错。本文将从Agent的核心模式React、Planning出发给出基于Spring AI Alibaba的简单实现示例帮助读者理解Multi-agent系统的核心模式和实现原理认识手写框架与成熟框架的关键差异为技术选型提供参考依据二、大模型应用的三个演进阶段2.1 第一阶段构建组件核心告诉模型它能做什么这个阶段我们用大模型来简单代码生成快速生成样板代码。问题解答技术问题的快速咨询如用idealab搭建答疑机器人。文本处理摘要、归类如利用模型能力进行相似类目聚合等。2.2 第二阶段工作流核心告诉模型它该怎么做结合特定的业务场景将多个步骤串联起来形成一个工作流这种方式能够处理更复杂的任务但问题也随之而来流程固定每个步骤都是预定义的缺乏灵活性错误处理困难某个环节出错整个流程就会中断无法自主决策不能根据中间结果动态调整后续步骤2.3 第三阶段自主Agent核心告诉模型我想做什么它自主决策这个阶段我们主要关注1.Agent定义Agent LLM Planning Memory ToolOpenAI Lilian Weng。即Agent在LLM之上还带有任务规划、记忆和环境交互能力。2.ReAct 模式使得Agent 具备了思考-行动的能力。3.Multi-agent 协作让不同专业的 Agent 可以相互配合解决单个Agent无法完成的复杂任务。这个阶段遇到的最大挑战就是如何设计一个自主Agent。主流的AI框架、工具和活跃的社区讨论等都以python主导作为java开发者只能通过“多看多学”来汲取经验这里我们主要就是参考了OpenManus的实现思路并将其核心理念用 Java 进行了复刻。但是其核心的browser use等相关的Tool并不是我们需要的。三、React 模式3.1 React模式执行流程1.Reasoning推理分析当前状态决定下一步做什么2.Acting行动执行具体的动作如调用工具、查询数据3.Observing观察获取工具执行结果评估任务完成情况4.循环迭代根据行动结果继续推理直到完成任务3.2 代码示例/** * ReAct 智能体推理(Reasoning) 执行(Acting) 循环模式 */ public abstract classAbstractReactAgentextendsAbstractAgent { /** * 主执行流程 */ Override public Result execute(Context context){ // 循环执行 ReAct 流程 for (int i 0; i maxRetryTimes; i) { currentLoop i; // 第一步Reasoning推理 if (!reasoning(context)) { continue; // 推理失败重试 } // 第二步Acting执行 Result result act(context); // 如果任务完成退出循环 if (result.isCompleted()) { return result; } } return finalResult; } /** * 推理阶段让 LLM 思考并决策 */ private boolean reasoning(Context context){ // 1. 构建提示词包含历史对话、可用工具等 currentPrompt buildPrompt(context); // 2. 调用 LLM llmResponse callLLM(currentPrompt, availableTools); // 3. 解析 LLM 响应 toolCalls extractToolCalls(llmResponse); textResponse extractText(llmResponse); // 4. 判断是否有有效输出 return hasToolCalls || hasTextResponse; } /** * 执行阶段调用工具并获取结果 */ private Result act(Context context){ // 情况1没有工具调用直接返回文本 if (toolCalls.isEmpty()) { return Result.completed(textResponse); } // 情况2执行工具调用 try { // 执行工具 toolResult executeTools(toolCalls); // 更新记忆将工具结果加入对话历史 updateMemory(toolResult); // 检查是否可以终止 if (canTerminate(toolCalls)) { return Result.completed(toolResult); } // 继续下一轮循环 return Result.inProgress(toolResult); } catch (Exception e) { return Result.error(e.getMessage()); } } /** * 构建提示词由子类实现 */ protected abstract Prompt buildPrompt(Context context); /** * 更新记忆由子类实现 */ protected abstract voidupdateMemory(String toolResult); }问题1.消息历史管理如何正确维护对话历史哪些消息应该保留2.工具注册如何优雅地注册和管理工具3.RAG集成缺少RAG相关处理4.错误处理工具执行失败如何处理5.循环控制如何判断任务是否真正完成6.扩展性扩展较差开发者可定制的空间小部分改动需要修改主链路。3.3 Spring AI Alibaba如何实现ReactAgentSpring AI Alibaba在框架层面提供ReactAgent的标准实现开发者可以开箱即用最重要的就是其清晰的构建模式、灵活的扩展机制使得新人上手没有太大门槛基本不需要顾虑上面手写框架面临的问题而且核心组件的构建是基于Spring AI的使得我们原有的工具接入成本极低。使用方式ReactAgent reactAgent ReactAgent.builder() .name(agentName) //模型对象spring-ai的ChatModel .model(chatModel) //系统提示词 .systemPrompt(systemPrompt) //工具列表spring-ai的ToolCallback .tools(Lists.newArrayList(tool1, tool2,..)) //流程定制interceptors .interceptors(Lists.newArrayList(interceptor1,..)) //扩展机制hooks .hooks(Lists.newArrayList(hook1, hook2,..)) //短期记忆内存实现 .saver(new MemorySaver()) //输出格式化 .outputType(outputTypeClass) .build(); AssistantMessage response reactAgentWrapper.call(今天苏州天气怎么样); String textContent response.getText();模型ModelReactAgent接受的Model是一个ChatModel它是Spring AI API被设计为一个简单且可移植的接口用于与各种 AI 模型交互允许开发者在不同模型之间切换时只需最少的代码更改。工具(Tools)Tools是Agent执行操作的组件一般会利用大模型的Function Call能力ReactAgent接受的Tools是ToolCallback也是Spring AI API对于之前使用Spring AI的工程基本可以做到无缝切换。记忆管理Memory记忆部分都是由Graph框架的能力来实现主要分为短期记忆会话记忆利用框架的Checkpointers机制通过和会话机制结合可以实现和大模型的多轮对话。框架内置了RedisSaver、MongoSaver等实现也可以自定义实现其他更适合的存储。长期记忆跨会话的记忆继承Store接口框架内置了RedisStore、MongoStore等几种实现支持跨会话的数据存储。检索增强RAGSpring AI Alibaba提供了一系列的RAG组件包括文本的分割、向量转化、向量存储及检索等且支持多种向量数据库的读写。同时结合工具扩展开发者也可以实现各种Agentic RAG。推荐直接使用百炼的RAG服务结合下面的扩展机制动态的扩充我们的上下文。扩展机制Hooks 和 Interceptors 使得开发者可以在Agent、Model、Tool等执行的前后进行自定义扩展是实现上下文工程的有效手段官方的示意图表达的十分清晰框架内置了一些Hooks和Interceptors包括消息压缩当消息tokens超过阈值后做一个简单的消息摘要。模型调用限制限制模型调用次数以防止无限循环或过度成本。提示词编辑特定场景下动态地增加、删除或修改提示词。工具调用限制限制工具的调用次数防止无限循环等。…结合扩展机制可以为Agent增加各种自定义能力包括对模型、工具调用的日志、监控、内容审核等。实现原理Spring AI Alibaba项目架构包含三层依次是Spring AI - Graph - Agent FrameworkGraph是一个轻量级的工作流编排框架Agent Framework可以认为是在Graph的基础上提供的Agentic API提供了开箱即用的ReactAgent和Multi-agent实现同时围绕上下文工程提供智能体能力的扩展。对于简单的需求你可以仅通过Agent Framework就能轻松的交付而了解Graph则可以帮助你构建出更多样的智能体。以ReactAgent为例它实际上就是一系列 Nodes执行单元 在 Edges边 的连接下通过 OverAllState 进行数据传递以形成一个有向无环图DAG。四、Multi-agent4.1 Multi-agent模式Spring AI Alibaba支持以下Multi-agent模式Tool CallingSupervisor Agent将其他Agent作为工具调用通过AgentTool封装就可以将一个ReactAgent变为一个工具。Handoffs当前Agent将控制权转移给另一个Agent框架提供了几种内置实现顺序执行Sequential Agent、并行执行Parallel Agent、路由LlmRoutingAgent。4.2 Spring AI Alibaba内置的Multi-agent实现顺序执行Sequential AgentSequentialAgent sequentialAgent SequentialAgent.builder() .name(sequentialAgent) .description() .subAgents(List.of(agent1, agent2)) .build(); OptionalOverAllState result sequentialAgent.invoke(); //可以根据outputKey获取对应Agent的结果并行执行Parallel AgentParallelAgent parallelAgent ParallelAgent.builder() .name(parallelAgent) .description() .mergeOutputKey(merged_results) .subAgents(List.of(agent1, agent2, agent3)) .mergeStrategy(new ParallelAgent.DefaultMergeStrategy()) .build(); OptionalOverAllState result parallelAgent.invoke(); Object mergedResults state.value(merged_results).get();4.3 利用FlowAgent 自定义Multi-agent核心还是围绕Graph的工作流框架来定制流程如下五、实战用Spring AI Alibaba实现Plan-Execute模式5.1 流程示意5.2 实现思路1.整体分为三个阶段1规划由PlanningAgent生成可执行的步骤2执行分步骤选取ReactAgent并执行3总结由SummaryAgent将上面每个步骤的内容聚合分析给出总结性的结论。2.每个Agent实现都是ReactAgent。3.合理的利用Function Call比如生成计划和步骤以及每个步骤使用的Agent。4.步骤之前需要进行上下文和状态传递下一个Agent需要感知环境信息。5.用合理的方式将上面的流程编排在一起。5.3 实现方案5.3.1 手动编排示例代码/** * Plan-Execute 模式简化示例 * 核心思想先规划Plan再执行Act最后总结Summarize */ publicclassSimplifiedPlanningCoordinator { /** * Plan-Execute 模式的主入口 * * param laiContext 上下文信息 * return 完整的规划和执行结果 */ public Planning execute(Context context){ // 第一阶段Planning - 生成执行计划 Planning planning generatePlanning(context); // 第二阶段Acting - 按计划执行步骤 executeSteps(planning, context); // 第三阶段Summarizing - 汇总结果 summarize(planning, context); return planning; } /** * 阶段一生成执行计划 * 根据用户输入由 AI 生成结构化的执行步骤 */ private Planning generatePlanning(Context context){ // 步骤1: 创建 Planning Agent // 这个 Agent 的职责是分析用户需求并制定执行计划 ReactAgent planningAgent reactAgentFactory.createReactAgent( context, planning // Agent 名称 ); // 步骤2: 构建 Planning Prompt // 提示词中包含用户需求、可用的 Agent 列表、当前时间等信息 String planningPrompt buildPlanningPrompt(context); // 步骤3: 调用 Planning Agent // Agent 会分析需求然后主动调用 PlanningTool 来创建计划 UserMessage userMessage new UserMessage(planningPrompt); AssistantMessage response planningAgent.call(userMessage); // 步骤4: 获取生成的计划 // PlanningTool 已经将计划保存到上下文中了 Planning planning getPlanningFromContext(context); return planning; } /** * 阶段二按计划执行各个步骤 * 这是 Act 阶段每个步骤由特定的 Agent 负责执行 */ privatevoidexecuteSteps(Planning planning, Context context){ ListPlanningStep steps planning.getSteps(); // 顺序执行每个步骤 for (PlanningStep step : steps) { // 1. 获取该步骤对应的 Agent String agentName step.getAgent(); ReactAgent agent reactAgentFactory.createReactAgent( context, agentName // Agent 名称 ); // 2. 构造该步骤的执行提示词 UserMessage userMessage buildStepPrompt(step, context); // 3. 调用 Agent 执行 AssistantMessage response agent.call(userMessage); // 4. 保存执行结果 step.setResult(response.getText()); step.markAsCompleted(); } } /** * 阶段三汇总所有步骤的执行结果 * 由专门的总结 Agent 将各步骤结果整合成最终答案 */ privatevoidsummarize(Planning planning, Context context){ // 1. 收集所有步骤的执行结果 String allStepsResults collectAllResults(planning); // 2. 构造总结提示词包含所有步骤的执行结果 UserMessage summaryPrompt buildSummaryPrompt(allStepsResults, context); // 3. 调用总结 Agent 生成最终结果 ReactAgentWrapper summaryAgent createSummaryAgent(); AssistantMessage finalResult summaryAgent.call(summaryPrompt); // 4. 保存最终结果 context.setFinalResult(finalResult.getText()); } /** * 构建 Planning Prompt * 这是让 AI 能够制定好计划的关键 */ private String buildPlanningPrompt(Context context){ // 1. 获取所有可用的 Agent 配置 ListAgentConfig availableAgents getAvailableAgents(context); // 2. 构建 Agent 信息描述 StringBuilder agentsInfo new StringBuilder(可用的 Agent 列表\n); for (AgentConfig agent : availableAgents) { agentsInfo.append(- Agent 名称: ).append(agent.getName()).append(\n); agentsInfo.append( 描述: ).append(agent.getDescription()).append(\n); agentsInfo.append( 擅长: ).append(agent.getCapabilities()).append(\n\n); } // 3. 组装完整提示词 String prompt String.format( 你是一个任务规划专家。请根据用户的需求制定详细的执行计划。 用户需求 %s %s 请使用 PlanningTool 创建执行计划。计划应该 1. 将复杂任务分解为多个可执行的步骤 2. 为每个步骤分配最合适的 Agent 3. 确保步骤之间的依赖关系合理 4. 步骤描述要清晰具体 , context.getUserInput(), agentsInfo.toString() ); return prompt; } // ... 辅助方法省略 ... private UserMessage buildStepPrompt(PlanningStep step, Context context){ return null; } private String collectAllResults(Planning planning){ return null; } private UserMessage buildSummaryPrompt(String results, Context context){ return null; } private ReactAgent createSummaryAgent(){ return null; } } /** * Planning Tool 简化示例 * 这是一个供 AI 调用的工具用于创建执行计划 */ publicclassSimplifiedPlanningToolimplementsToolFunctionInterfaceSimplifiedPlanningTool.PlanInput, String { Override public String getDescription(){ return用于创建和管理任务执行计划的工具; } /** * Tool 的核心逻辑 * 当 AI 决定使用这个工具时会调用此方法 */ Override public String apply(PlanInput input, ToolContext context){ // 1. 根据 AI 生成的计划内容创建 Planning 对象 Planning planning createPlanningFromInput( context, input.getTitle(), input.getSteps() ); // 2. 将计划保存到上下文中供后续执行使用 savePlanningToContext(planning); // 3. 返回结果给 AI告知计划已创建 return执行计划已创建完成; } /** * Tool 的输入参数定义 * AI 会按照这个结构生成 JSON 参数 */ publicstaticclassPlanInput { ToolParam(description 计划的标题) private String title; ToolParam(description 计划步骤列表) private ListStepInput steps; // getters and setters... } /** * 单个步骤的定义 */ publicstaticclassStepInput { ToolParam(description 步骤的任务描述) private String guide; ToolParam(description 执行该步骤的 Agent 名称) private String agent; // getters and setters... } // ... 辅助方法 ... }5.3.2 基于Graph工作流框架来编排Plan-Execute 三阶段 DAG 拓扑__START__ → PlanningNode → ExecutionNode → SummaryNode → __END__类图关系FlowAgent ▲ │ PlanActAgent ──uses──▶ PlanActGraphBuildingStrategy │ │ │ ├──creates──▶ StateGraph │ │ │ ├──adds──▶ PlanningNode (ReactAgent) │ ├──adds──▶ ExecutionNode (NodeAction) │ └──adds──▶ SummaryNode (ReactAgent) │ └──uses──▶ PlanActTool (Function Calling)示例代码PlanActAgentpublicclassPlanActAgentextendsFlowAgent { privatefinal ChatModel chatModel; privatefinal MapString, ReactAgent availableAgents; privatefinal PlanActTool planningTool; ... protectedPlanActAgent(PlanActAgentBuilder builder) throws GraphStateException { super(builder.name, builder.description, builder.compileConfig, builder.subAgents); this.chatModel builder.chatModel; this.availableAgents builder.availableAgents; this.planningTool builder.planningTool; ... } publicstatic PlanActAgentBuilder builder(){ returnnew PlanActAgentBuilder(); } Override protected StateGraph buildSpecificGraph(FlowGraphBuilder.FlowGraphConfig config) throws GraphStateException { config.setChatModel(this.chatModel); config.customProperty(availableAgents, this.availableAgents); config.customProperty(planningTool, this.planningTool); ... return FlowGraphBuilder.buildGraph(PlanActGraphBuildingStrategy.STRATEGY_TYPE, config); } publicstaticclassPlanActAgentBuilderextendsFlowAgentBuilderPlanActAgent, PlanActAgentBuilder { private ChatModel chatModel; private MapString, ReactAgent availableAgents; private PlanActTool planningTool; publicPlanActAgentBuilder(){ } public PlanActAgentBuilder chatModel(ChatModel chatModel){ this.chatModel chatModel; returnthis; } public PlanActAgentBuilder availableAgents(MapString, ReactAgent availableAgents){ this.availableAgents availableAgents; returnthis; } public PlanActAgentBuilder planningTool(PlanActTool planningTool){ this.planningTool planningTool; returnthis; } Override protected PlanActAgentBuilder self(){ returnthis; } Override protectedvoidvalidate(){ ... } Override public PlanActAgent build() throws GraphStateException { this.validate(); returnnew PlanActAgent(this); } } }PlanActGraphBuildingStrategypublicclassPlanActGraphBuildingStrategyimplementsFlowGraphBuildingStrategy { publicstaticfinal String STRATEGY_TYPE PLAN_ACT; privatestaticfinal String PLANNING_NODE planning; privatestaticfinal String EXECUTION_NODE execution; privatestaticfinal String SUMMARY_NODE summary; Override public StateGraph buildGraph(FlowGraphBuilder.FlowGraphConfig config) throws GraphStateException { validateConfig(config); StateGraph graph new StateGraph(config.getName(), config.getKeyStrategyFactory()); ChatModel chatModel config.getChatModel(); PlanActTool planActTool (PlanActTool) config.getCustomProperty(planningTool); MapString, ReactAgent availableAgents (MapString, ReactAgent) config.getCustomProperty(availableAgents); // 将PlanActTool转换为ToolCallback ToolCallback planningToolCallback FunctionToolCallback .builder(planActTool.getName(), planActTool) .description(planActTool.getDescription()) .inputType(planActTool.getInputType()) .inputSchema(planActTool.getParameters()) .build(); // 1. 创建Planning Agent - 负责制定执行计划 ReactAgent planningAgent ReactAgent.builder() .name(PLANNING_NODE) .model(chatModel) .systemPrompt(buildPlanningSystemPrompt(availableAgents)) .tools(planningToolCallback) .build(); // 2. 创建Execution Node - 负责执行计划中的各个步骤 ExecutionNode executionNode new ExecutionNode(EXECUTION_NODE, availableAgents); // 3. 创建Summary Agent - 负责汇总执行结果 ReactAgent summaryAgent ReactAgent.builder() .name(SUMMARY_NODE) .model(chatModel) .systemPrompt(buildSummarySystemPrompt()) .build(); // 添加节点到图 FlowGraphBuildingStrategy.addSubAgentNode(planningAgent, graph); graph.addNode(EXECUTION_NODE, node_async(executionNode)); FlowGraphBuildingStrategy.addSubAgentNode(summaryAgent, graph); // 添加边构建线性工作流 graph.addEdge(__START__, PLANNING_NODE); graph.addEdge(PLANNING_NODE, EXECUTION_NODE); graph.addEdge(EXECUTION_NODE, SUMMARY_NODE); graph.addEdge(SUMMARY_NODE, __END__); return graph; } Override public String getStrategyType(){ return STRATEGY_TYPE; } Override publicvoidvalidateConfig(FlowGraphBuilder.FlowGraphConfig config){ ... } /** * 构建规划阶段的系统提示词 */ private String buildPlanningSystemPrompt(MapString, ReactAgent availableAgents){ StringBuilder prompt new StringBuilder(); prompt.append(我是一个任务规划专家基于用户输入创建一个合理的计划包含清晰的步骤来完成任务); prompt.append(每个步骤使用一个Agent来完成。\n\n); prompt.append(可用的Agent信息如下\n); int index 1; for (Map.EntryString, ReactAgent entry : availableAgents.entrySet()) { prompt.append(Agent).append(index).append(); prompt.append(entry.getKey()).append( - ); prompt.append(entry.getValue().description()).append(\n); index; } prompt.append(\n请使用PlanActTool工具创建执行计划。); return prompt.toString(); } /** * 构建总结阶段的系统提示词 */ private String buildSummarySystemPrompt(){ return # 角色 你是一个能够回应用户请求的AI助手你需要根据这个分步骤的执行计划的执行结果 进行信息汇总、提取关键信息给出总结性的结论。 ; } }PlanExecutionNodepublicclassExecutionNodeimplementsNodeAction { privatefinal String nodeId; privatefinal MapString, ReactAgent availableAgents; publicExecutionNode(String nodeId, MapString, ReactAgent availableAgents){ this.nodeId nodeId; this.availableAgents availableAgents; } Override public MapString, Object apply(OverAllState state) throws Exception { // 从state中提取Planning对象 Planning planning extractPlanningFromMessages(state); // 异常校验 ... // 用户原始输入 String userInput extractUserInput(messages); // 执行每个步骤 ListMapString, String stepResults new ArrayList(); StringBuilder accumulatedContext new StringBuilder(); accumulatedContext.append(用户请求).append(userInput).append(\n\n); for (PlanningStep step : planning.getSteps()) { String agentName step.getAgentName(); ReactAgent agent availableAgents.get(agentName); if (agent null) { // Agent不存在判断是否需要继续 ... } // 构建执行消息包含步骤指引和之前的执行结果 messages (ListMessage) state.value(messages).orElse(new ArrayList()); ListMessage contextMessages new ArrayList(messages); String stepPrompt buildStepPrompt(step, accumulatedContext.toString()); UserMessage stepMessage new UserMessage(stepPrompt); contextMessages.add(stepMessage); // 记录步骤执行结果 MapString, String stepResult new HashMap(); stepResults.add(stepResult); try { // 执行Agent AssistantMessage response agent.call(contextMessages); String result response.getText(); //填充stepResult ... } catch (Exception e) { // 执行出错记录错误并继续 ... } //手动更新状态 ... // 累积上下文 accumulatedContext.append(步骤 ).append(step.getStepIndex()) .append( ().append(agentName).append()\n) .append(任务).append(step.getStepGuide()).append(\n) .append(结果).append(result).append(\n\n); } // 返回执行结果 MapString, Object result new HashMap(); result.put(step_results, stepResults); result.put(execution_summary, accumulatedContext.toString()); // 将执行摘要添加到消息列表供Summary节点使用 ListMessage newMessages new ArrayList(messages); newMessages.add(new UserMessage(按照计划所有步骤的执行结果如下\n accumulatedContext.toString())); result.put(messages, newMessages); return result; } /** * 构建步骤执行提示词 */ private String buildStepPrompt(PlanningStep step, String context){ StringBuilder prompt new StringBuilder(); prompt.append(请执行以下任务\n); prompt.append(step.getStepGuide()).append(\n\n); if (!context.isEmpty()) { prompt.append(背景信息\n); prompt.append(context); } return prompt.toString(); } }使用PlanActAgent示例publicclassPlanActAgentExample { publicvoidusePlanActAgent(String userQuery){ // 1. 首先注册PlanAct策略 PlanActStrategyRegistrar.register(); // 2. 创建可用的Agent映射 MapString, ReactAgent availableAgents new LinkedHashMap(); // 翻译专家Agent ReactAgent translationAgent ReactAgent.builder() .name(翻译专家) .model(chatModel) .systemPrompt(你是一个专业的翻译专家能够准确地在中英文之间进行翻译。) .description(专业的翻译专家能够准确地在中英文之间进行翻译。) .build(); availableAgents.put(Agent1, translationAgent); // 天气专家Agent ReactAgent weatherAgent ReactAgent.builder() .name(天气专家) .model(chatModel) .systemPrompt(你是一个天气专家能够提供天气相关的信息和建议。) .description(天气专家能够提供天气相关的信息和建议。) //查询天气的工具 .tools(weatherTool) .build(); availableAgents.put(Agent2, weatherAgent); // 交通专家 ReactAgent trafficAgent ReactAgent.builder() .name(交通专家) .model(chatModel) .systemPrompt(你是一个交通专家能够提供交通相关的信息和建议。) .description(交通专家能够提供交通相关的信息和建议。) //查询交通的工具 .tools(trafficTool) .build(); availableAgents.put(Agent3, trafficAgent); // 3. 创建规划工具 PlanActTool planningTool new PlanActTool(); // 4. 创建PlanActAgent PlanActAgent planActgent PlanActAgent.builder() .name(plan_act_agent) .description(一个使用Plan-Execute模式的智能代理) .chatModel(chatModel) .availableAgents(availableAgents) .planningTool(planningTool) .compileConfig(CompileConfig.builder().build()) .subAgents(availableAgents.values().stream().collect(Collectors.toList())) .build(); AssistantMessage response agent.invoke(userQuery); } }注意点1.FlowGraphBuildingStrategy.addSubAgentNode(agentXXX, graph)其添加的Node实例是AgentSubGraphNode该Node默认返回的是流式数据框架层在更新overallState时对于流式数据和非流式数据是有差异的前者只会保留本次的lastData这个场景下带来的影响是planning节点的过程消息会丢失包括llm首次返回结果、工具执行结果等。如果你希望保留这个过程数据可以自己构建NodeAction。2.ExecutionNode内部多个ReactAgent的执行状态没有更新到ParentState上只返回了最终的结果那么SummaryAgent就只能获取ExecutionNode的结果作为输入当你需要这个过程数据时那么可以在内部执行过程手动更新状态或者直接在ExecutionNode的结果里填充过程数据。3.如果需要会话记忆BaseCheckpointSaver在Agent创建的时候需要手动初始化在FlowAgent实现中可以通过compileConfig配置。优点实际上Graph编排与手动编排在代码量上并无显著差异。但对我们而言采用Graph工作流框架的核心价值在于统一的抽象层PlanActAgent被封装为标准的Multi-agent实现可以像使用ReactAgent一样便捷地创建和调用。协作友好性在多人协作项目中团队成员对Multi-agent的实现模式和功能边界有了统一认知降低了沟通成本。可扩展性基于这套标准化框架可以快速扩展出适配特定业务场景的Multi-agent变体。AI-Coding友好在既定的模式下扩展更多的Multi-agent实现用AI来实现非常高效。六、总结开发效率的飞跃5小时 VS 5天本文标题提到的5小时 VS 5天这个对比虽然看起来很有冲击力但必须坦诚地说明几点前提条件经验积累的差异第一次实现时踩过的坑、积累的经验在第二次实现时都成为了宝贵的财富代码复用的优势Tool等核心组件都是在原有基础上改写或复用而非完全从零开始因此这个对比更多是想说明选对框架和方法论能够显著降低Multi-agent系统的实现门槛。即使是首次接触有了Spring AI Alibaba的加持开发效率也能得到不错的提升。从提示词到上下文工程自主Agent以及Multi-agent场景下开发者需要从单纯的提示词调优转为对上下文工程的关注包括但不限于工具调用结果的上下文整合包括工具结果的标准化、大结果的外部存储及检索机制。上下文的动态检索与注入可以是静态的RAG和Agentic RAG也可以是文件检索工具等。上下文的裁剪与优先级管理包括摘要、评分机制、总结等。ps双刃剑。记忆系统的分层管理短期记忆、长期记忆等。智能体间的上下文共享与传递机制Multi-agent协作的关键在于智能体之间如何高效共享与隔离信息。Planning不是银弹因地制宜选择架构很多Multi-agent的案例都会强调Planning的重要性但在实际业务场景中并不是所有问题都需要复杂的规划能力固定流程的场景如果业务流程本身就是确定的比如订单处理、审批流程使用固定的Agent编排反而更加高效可控ReAct的适用性对于需要一定自主性但又不需要复杂规划的场景可以从子节点入手使用ReAct模式提升Agent的决策能力混合架构的价值在实践中有些业务场景用 固定流程 局部ReAct的混合架构往往是最优解如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2026 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2476126.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!