Agent 设计模式终极整合:六大模式合一,一套 Java 框架从开发到生产部署
ReAct、Plan-Execute、Tool Use、Reflection、Multi-Agent、Router——六篇文章拆完了六种模式但真实项目不会只用一种。这篇把整个系列收尾给你一个能直接部署的 Agent 框架。前面六篇我们拆了 ReAct、Multi-Agent、Reflection、Plan-Execute、Tool Use、Router。每种模式单独看都不复杂但真实项目不会只用一种。问题来了六种模式放在一起怎么组织代码怎么管理配置上线之后出问题怎么排查这篇把整个 Agent 系列收尾给你一个能直接部署的框架结构。整体架构长什么样先看全局。整个框架的核心思路是Router 做入口根据任务类型分发到不同策略链每个策略链内部可以组合多种模式。用户输入 → Router 分类 → 策略链执行 → 结果返回具体来说简单查询“查今天销售额”→ Router 判定 TOOL_USE → 直接调工具返回结果多步骤任务“生成周报发老板”→ Router 判定 PLAN_EXECUTE TOOL_USE → 先规划再执行执行中调工具推理任务“这段代码为什么有bug”→ Router 判定 REACT REFLECTION → 边推理边验证最后自查一遍复杂任务“分析竞品优劣势”→ Router 判定 MULTI_AGENT → 多个 Agent 分工协作这个架构的关键是Router 是唯一入口所有任务先过分类再执行。不要让用户直接指定策略——他们不知道该用什么你也不应该要求他们知道。项目结构怎么分一个完整的 Agent 框架我建议这样分模块agent-framework/├── src/main/java/com/qiutian/agent/│ ├── core/ # 核心接口和基类│ │ ├── AgentStrategy.java # 策略枚举│ │ ├── AgentContext.java # 上下文对象传递任务、历史、工具│ │ └── BaseAgent.java # 所有Agent的基类│ ├── router/ # 路由层│ │ ├── TaskRouter.java # 分类器│ │ └── RouterPrompt.java # 提示词管理│ ├── patterns/ # 六种模式实现│ │ ├── ReActAgent.java│ │ ├── PlanExecuteAgent.java│ │ ├── ToolUseAgent.java│ │ ├── ReflectionAgent.java│ │ ├── MultiAgent.java│ │ └── ChainAgent.java # 组合策略链│ ├── tools/ # 工具定义│ │ ├── DatabaseTool.java│ │ ├── EmailTool.java│ │ └── SearchTool.java│ ├── orchestrator/ # 编排层│ │ └── AgentOrchestrator.java # 统一入口│ └── config/ # 配置管理│ ├── AgentProperties.java│ └── ToolRegistry.java├── src/main/resources/│ ├── application.yml # Spring AI配置│ └── prompts/ # 提示词模板文件│ ├── react.txt│ ├── plan_execute.txt│ └── router.txt└── pom.xml为什么这么分三个原则每个模式独立一个类互不依赖。改 ReAct 不会影响 Plan-Execute加新模式不影响老模式。提示词不放代码里。放 resources/prompts/ 下面用 Spring 的 Value 加载。改提示词不用重新编译线上热更。工具单独一层。ToolRegistry 统一管理所有工具的注册和查找Agent 不直接持有工具引用而是通过 Registry 按需获取。核心代码统一编排器整个框架的入口是 AgentOrchestrator。它负责调 Router 分类然后按策略链执行Servicepublic class AgentOrchestrator { private final TaskRouter router; private final MapAgentStrategy, BaseAgent agents; private final ChainAgent chainAgent; // Spring会自动把所有BaseAgent实现注入到这个Map里 // Key是策略名Value是对应的Agent实例 public AgentOrchestrator( TaskRouter router, ListBaseAgent agentList, ChainAgent chainAgent) { this.router router; this.agents agentList.stream() .collect(Collectors.toMap( BaseAgent::getStrategy, a - a )); this.chainAgent chainAgent; } public String execute(String task) { // 1. 路由分类 ListAgentStrategy chain router.routeChain(task); // 2. 单策略直接执行 if (chain.size() 1) { BaseAgent agent agents.get(chain.get(0)); return agent.solve(task); } // 3. 多策略走链式执行 return chainAgent.solveChain(task, chain, agents); }}这里有个设计要点用 Spring 的依赖注入把所有 BaseAgent 实现自动收集到 Map 里。新增一个模式写个类继承 BaseAgent加个 Component 注解自动就进来了。不用改 Orchestrator 的代码。再看 BaseAgent 的定义// 所有Agent模式的基类public abstract class BaseAgent { protected final ChatClient chatClient; protected final ToolRegistry toolRegistry; protected BaseAgent(ChatClient chatClient, ToolRegistry toolRegistry) { this.chatClient chatClient; this.toolRegistry toolRegistry; } // 每个子类实现自己的处理逻辑 public abstract String solve(String task); // 返回这个Agent对应的策略 public abstract AgentStrategy getStrategy(); // 通用方法加载提示词模板 protected String loadPrompt(String name) { // 从resources/prompts/加载支持运行时热更 try { Path path Path.of(src/main/resources/prompts/ name); return Files.readString(path); } catch (IOException e) { throw new RuntimeException(提示词文件不存在: name, e); } }}为什么提示词从文件读而不是写死在代码里因为提示词是需要频繁调试的。你上线后发现 Router 分类不准大概率是提示词要调不是代码要改。从文件读改完重启就行不用重新编译打包。配置管理Spring AI 的配置放在 application.yml 里spring: ai: openai: api-key: ${OPENAI_API_KEY} model: gpt-4o temperature: 0.3 # Router用低温度保证分类稳定agent: router: max-retries: 2 # 分类失败重试次数 fallback-strategy: REACT # 分类失败时的兜底策略 react: max-iterations: 10 # ReAct最大循环次数 timeout-seconds: 60 # 单次执行超时 plan-execute: max-steps: 8 # 最大规划步骤数 tools: enabled: - database - email - search用 ConfigurationProperties 绑定ConfigurationProperties(prefix agent)Configurationpublic class AgentProperties { private RouterConfig router new RouterConfig(); private ReactConfig react new ReactConfig(); private PlanExecuteConfig planExecute new PlanExecuteConfig(); private ToolConfig tools new ToolConfig(); Data public static class RouterConfig { private int maxRetries 2; private AgentStrategy fallbackStrategy AgentStrategy.REACT; } Data public static class ReactConfig { private int maxIterations 10; private int timeoutSeconds 60; } Data public static class PlanExecuteConfig { private int maxSteps 8; } Data public static class ToolConfig { private ListString enabled new ArrayList(); }}为什么要抽配置因为你不同环境需要不同的参数。开发环境 max-iterations 可以设大一点方便调试生产环境要设小一点控制成本和延迟。配置外置后改 yml 不改代码。生产环境三个坑第一个坑没有超时控制ReAct 模式可能死循环Plan-Execute 可能规划出20个步骤无限执行。每个 Agent 的 solve 方法外面必须套超时public String execute(String task) { try { return CompletableFuture .supplyAsync(() - agent.solve(task)) .get(timeoutSeconds, TimeUnit.SECONDS); } catch (TimeoutException e) { // 超时后返回已有结果不要返回空 log.warn(Agent超时task: {}, task); return 处理超时请简化任务后重试; }}第二个坑没有成本监控每次 API 调用都花钱。Router 多一次分类调用ReAct 可能循环10次Multi-Agent 可能调用5个Agent。不做监控的话月底账单能吓死人。加一个简单的计数器Componentpublic class TokenCounter { private final AtomicInteger totalCalls new AtomicInteger(0); private final MapString, AtomicInteger callsByStrategy new ConcurrentHashMap(); public void record(AgentStrategy strategy) { totalCalls.incrementAndGet(); callsByStrategy .computeIfAbsent(strategy.name(), k - new AtomicInteger()) .incrementAndGet(); } public MapString, Integer getStats() { return callsByStrategy.entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e - e.getValue().get() )); }}每次 Agent 执行完调一次 record你就能看到哪种策略用得最多哪种策略成本最高。第三个坑提示词没有版本管理提示词是 Agent 的灵魂但你改了提示词之后旧版本就没了。出了问题你想回滚都不知道改了什么。最简单的办法提示词文件名带版本号router_v1.txt、router_v2.txt。配置里指定用哪个版本。改的时候新建一个版本文件不动旧的。出问题切回去就行。跑起来的效果我把这个框架用在一个企业知识库助手上。日均处理 200 多个用户提问Router 分类准确率 87% 左右。任务类型占比策略平均调用次数响应时间简单查询60%TOOL_USE1.2次2秒复杂任务30%PLAN_EXECUTE/REACT4-6次8-15秒多Agent任务10%MULTI_AGENT8-12次20-30秒日均 API 调用约 800 次成本控制在每天 15 块以内。如果不加 Router 全走 ReAct日均调用会到 2000 次以上成本翻 2.5 倍。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

2026这6款硬核降AI率平台大起底,一键让AIGC率直逼绝对安全线!

2026这6款硬核降AI率平台大起底,一键让AIGC率直逼绝对安全线!

步入 2026 年,学术圈的风向早已彻底改变。曾经让无数学生焦头烂额的查重焦虑,如今已不再是最大的威胁。随着 AI 检测技术的迅猛升级,高校对论文的审查标准也愈发严苛。现在的论文不仅要避开重复率陷阱,更要在 AI 痕迹上做到滴水不…

2026/10/17 19:44:08 阅读更多 →
SpringBoot旅游管理系统架构设计与性能优化实战

SpringBoot旅游管理系统架构设计与性能优化实战

1. 项目背景与核心价值旅游行业近年来呈现爆发式增长,传统旅行社和OTA平台都面临着业务数字化升级的迫切需求。这个基于SpringBoot的旅游管理系统正是针对这一市场需求而设计的轻量级解决方案。我在实际开发中发现,中小型旅游企业特别需要一套既能快速部…

2026/10/16 17:25:10 阅读更多 →
Kali Linux下dirsearch安装与Web目录扫描实战指南

Kali Linux下dirsearch安装与Web目录扫描实战指南

1. 项目概述:为什么我们需要一个趁手的目录扫描器?在渗透测试或者安全评估的初期阶段,信息收集的广度和深度直接决定了后续攻击面的宽度。很多时候,一个暴露在公网的Web应用,其真正的风险并不在首页,而是隐…

2026/10/17 15:37:08 阅读更多 →

最新新闻

SteamOS 安装到 AMD 新显卡:RX 9060 XT 性能发挥实战指南

SteamOS 安装到 AMD 新显卡:RX 9060 XT 性能发挥实战指南

最近不少朋友在讨论 SteamOS 装到普通 PC 上的玩法,尤其是搭配 AMD 新卡的组合。有位朋友跟我说,他在一台整机配置并不算高的机器上装好 SteamOS,显卡是 RX 9060 XT,进游戏后的流畅度比想象中要好很多。这里说的“低配”&#xff…

2026/10/18 2:06:55 阅读更多 →
Oracle 11.2.0.1 补丁安装四道生死门与三重验证法

Oracle 11.2.0.1 补丁安装四道生死门与三重验证法

简介:本资源是一份面向Oracle数据库运维工程师与DBA的实战型补丁管理指南,聚焦Oracle 11.2.0.1版本的补丁安装全流程,解决企业环境中常见补丁部署不规范、回滚困难、验证缺失等痛点。文档以清晰步骤覆盖安装前环境检查与全量备份、OPatch工具…

2026/10/18 2:06:55 阅读更多 →
CAD2024安装教程源码:静默安装与彻底卸载脚本实践

CAD2024安装教程源码:静默安装与彻底卸载脚本实践

简介:这份资源面向零基础到进阶的机械设计学习者与工程师,提供CAD2024机械版的下载与安装指引,帮助用户在自己的电脑上顺利部署并运行这款专业计算机辅助设计工具。压缩包共3个文件,以inscode项目配置、html页面和gitignore忽略规…

2026/10/18 2:06:55 阅读更多 →
GrADS气象绘图入门:安装、ctl数据描述与脚本批量出图

GrADS气象绘图入门:安装、ctl数据描述与脚本批量出图

简介:这份资源是面向气象、环境及科研数据分析初学者的GrADS绘图软件入门文档,帮助零基础用户完成软件安装并掌握基本绘图命令。GrADS作为自由软件,支持Windows与Unix平台,可处理经纬度、层次、时间构成的4D格点或离散数据&#x…

2026/10/18 2:06:55 阅读更多 →
加速度传感器能测哪些物理量?从原理到工程选型实测指南

加速度传感器能测哪些物理量?从原理到工程选型实测指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:06:55 阅读更多 →
FPGA研发工程师核心技能与学习路径全解析

FPGA研发工程师核心技能与学习路径全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:05:55 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →