Spring AI 1.x 系列【60】构建高效 AI Agent
文章目录
1. 什么是 LLM Agent
1.1 定义
LLM Agent(智能体) 是一个以大型语言模型(LLM)为核心决策引擎、能够自主调用外部工具、执行多步骤任务并动态调整行为的智能系统。
简单来说:如果说单个 LLM 调用是"一问一答",那么 Agent 就是让 LLM 成为"能自己动手的助手"——它不再只是回答问题,而是可以规划步骤、调用工具、反思结果、循环迭代,直到完成目标任务。
举一个现实场景的例子:
-
普通 LLM 调用:用户问"帮我查下北京明天天气",模型返回一段天气描述文本。
-
Agent 行为:用户说"如果明天北京下雨,帮我取消户外会议并通知参会人"。
- 调用天气
API获取数据 - 判断是否下雨
- 如果是,调用日历
API取消会议 - 调用邮件/消息
API通知所有人
- 调用天气
1.2 为什么 Anthropic 的研究很重要?
2024 年底,Anthropic 发表了备受关注的论文 Building Effective Agents,其核心观点颠覆了业界对 Agent 的普遍认知:
| 主流误区 | Anthropic 的洞察 |
|---|---|
Agent 越自主越好 |
对于大多数任务,预设工作流(Workflow) 比完全自主的 Agent 更可靠 |
| 框架越复杂越强大 | 简洁 + 可组合 优于复杂框架 |
一个 Agent 解决所有问题 |
应把任务分解,按需选择最合适的模式 |
这条理念与企业级应用的需求高度契合:可靠性和可维护性比炫技更重要。
💡 本文特色:所有模式均配有基于
Spring AI的Java代码实现,完整可运行示例位于 spring-ai-examples 仓库的agentic-patterns目录。
2. Agent 系统概述
Anthropic 在其研究报告 Building Effective Agents 中分享了构建高效 LLM Agent 的宝贵经验。这项研究最引人注目之处在于:它强调简洁性和可组合性,而非复杂的框架。
本文重点展示如何使用 Spring AI 的模型可移植性和结构化输出两大特性,将这些模式落地为可运行的 Java 代码。建议先阅读原论文,再配合本文的代码示例进行实践。
📌
spring-ai-examples仓库的agentic-patterns目录包含本文所有示例的完整源码。
3. Agent 系统架构:Workflow 与 Agent 的区别
原论文提出了一个重要的架构区分——两类 Agentic 系统:
3.1 Workflow(工作流)
LLM 和工具通过预定义的代码路径进行编排。系统的执行流程是确定的、可预测的。
类比:一条生产流水线 —— 每个环节做什么是事先定义好的,上一个环节的输出是下一个环节的输入。
3.2 Agent(智能体)
LLM 动态地主导自己的执行过程和工具使用。系统根据当前状态自行决定下一步做什么。
类比:一位项目经理 —— 面对一个模糊目标,自己拆解任务、决定先做什么、遇到问题自行调整方案。
3.3 关键洞见
核心洞察是:虽然完全自主的 Agent 听起来很酷,但对于定义明确的任务,Workflow 通常能提供更好的可预测性和一致性。这与企业需求完美吻合——在那里,可靠性和可维护性才是硬指标。
4. 五大核心模式
下面逐一拆解 Spring AI 实现的五种基础模式,每种模式服务于特定的使用场景。
4.1 Chain Workflow(链式工作流)
概念:将复杂任务拆解为一系列简单、可管理的步骤,按顺序依次执行。前一步的输出成为后一步的输入。

适用场景:
- 任务具有明确的顺序步骤
- 愿意用延迟换取更高的准确性
- 每一步都依赖前一步的输出
public class ChainWorkflow {
private final ChatClient chatClient;
private final String[] systemPrompts;
public String chain(String userInput) {
String response = userInput;
for (String prompt : systemPrompts) {
String input = String.format("{%s}\n {%s}", prompt, response);
response = chatClient.prompt(input).call().content();
}
return response;
}
}
设计要点:
- 每一步职责单一、聚焦
- 上一步输出自然流入下一步
- 链路易于扩展和维护
4.2 Parallelization Workflow(并行工作流)
概念:让 LLM 同时处理多个子任务,然后通过程序逻辑聚合所有结果。

适用场景:
- 处理大量相似但相互独立的条目
- 需要多个独立视角的任务
- 处理时间紧迫且任务可并行化
List<String> parallelResponse = new ParallelizationWorkflow(chatClient)
.parallel(
"Analyze how market changes will impact this stakeholder group.",
List.of(
"Customers: ...",
"Employees: ...",
"Investors: ...",
"Suppliers: ..."
),
4
);
设计要点:
- 每个并行分支完全独立,互不依赖
- 最终结果由程序聚合,而非
LLM
4.3 Routing Workflow(路由工作流)
概念:实现智能任务分发——根据输入的不同类型,将其路由到不同的专业化处理分支。

适用场景:
- 复杂任务,输入有明显的类别划分
- 不同类型的输入需要不同的专业处理
- 分类可以准确完成
@Autowired
private ChatClient chatClient;
RoutingWorkflow workflow = new RoutingWorkflow(chatClient);
Map<String, String> routes = Map.of(
"billing", "You are a billing specialist. Help resolve billing issues...",
"technical", "You are a technical support engineer. Help solve technical problems...",
"general", "You are a customer service representative. Help with general inquiries..."
);
String input = "My account was charged twice last week";
String response = workflow.route(input, routes);
设计要点:
- 分类逻辑决定后续处理路径
- 每条路由有独立的
System Prompt和专业知识
4.4 Orchestrator-Workers(编排器-工作者)
概念:一个中央编排器(Orchestrator)先分析任务,动态拆解出子任务,然后分派给多个工作者(Worker)并行执行,最后汇总结果。

适用场景:
- 复杂任务,子任务无法事先预测
- 需要不同方法或视角的任务
- 需要自适应问题解决能力
public class OrchestratorWorkersWorkflow {
public WorkerResponse process(String taskDescription) {
// 1. 编排器分析任务并确定子任务
OrchestratorResponse orchestratorResponse = // ...
// 2. 工作者并行处理子任务
List<String> workerResponses = // ...
// 3. 汇总为最终响应
return new WorkerResponse(/*...*/);
}
}
使用示例:
ChatClient chatClient = // ... 初始化 chat client
OrchestratorWorkersWorkflow workflow = new OrchestratorWorkersWorkflow(chatClient);
WorkerResponse response = workflow.process(
"Generate both technical and user-friendly documentation for a REST API endpoint"
);
System.out.println("Analysis: " + response.analysis());
System.out.println("Worker Outputs: " + response.workerResponses());
设计要点:
- 编排器负责"想",工作者负责"做"
- 子任务动态生成,非硬编码
- 三步走:分析 → 并行执行 → 汇总
4.5 Evaluator-Optimizer(评估器-优化器)
概念:引入迭代反馈循环——一个组件负责生成内容,另一个组件负责评估质量并给出改进建议,循环直到满足质量标准。

适用场景:
- 存在明确的评估标准
- 迭代改进能带来可衡量的价值提升
- 任务受益于多轮"批评-改进"循环
public class EvaluatorOptimizerWorkflow {
public RefinedResponse loop(String task) {
Generation generation = generate(task, context);
EvaluationResponse evaluation = evaluate(generation.response(), task);
return new RefinedResponse(finalSolution, chainOfThought);
}
}
使用示例:
ChatClient chatClient = // ... 初始化 chat client
EvaluatorOptimizerWorkflow workflow = new EvaluatorOptimizerWorkflow(chatClient);
RefinedResponse response = workflow.loop(
"Create a Java class implementing a thread-safe counter"
);
System.out.println("Final Solution: " + response.solution());
System.out.println("Evolution: " + response.chainOfThought());
设计要点:
- 评估与生成分离,各司其职
- 保留思维链(
chainOfThought)用于追踪演进过程 - 循环直到满足退出条件
5. Spring AI 的实现优势
Spring AI 对这些模式的实现提供了三大关键优势,与 Anthropic 的推荐高度一致:
5.1 模型可移植性
切换 LLM 供应商无需修改业务代码,只需更换 Starter 依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
5.2 结构化输出
通过 .entity() 将 LLM 的响应直接映射为类型安全的 Java 对象:
EvaluationResponse response = chatClient.prompt(prompt)
.call()
.entity(EvaluationResponse.class);
5.3 统一 API
- 跨
LLM提供商的统一接口 - 内建的错误处理和重试机制
- 灵活的
Prompt管理
6. 最佳实践
6.1 从简单开始
- 先用基础
Workflow验证可行性,再考虑引入复杂度 - 使用能满足需求的最简单模式
- 只在真正需要时才叠加更多技巧
6.2 为可靠性设计
- 实现明确的错误处理路径
- 尽可能使用类型安全的结构化响应
- 在每一步内置验证机制
6.3 权衡取舍
- 延迟 vs 准确性:并行化可以加速,但聚合逻辑增加了复杂性
- 固定工作流 vs 动态 Agent:定义明确的任务用
Workflow,开放式任务再考虑Agent - 何时并行:仅当子任务真正独立时才并行,否则串行更简单可靠
7. 未来展望
后续指南将探索如何在这些基础模式之上构建更高级的 Agent 系统:
- 模式组合(
Pattern Composition):将多种模式组合成更强大的工作流,构建发挥各模式优势的混合系统,创建能适应变化需求的灵活架构。 - 高级记忆管理(
Advanced Memory Management):实现跨对话的持久化记忆,高效管理上下文窗口,制定长期知识保留策略。 - 工具与
MCP集成(Model-Context Protocol):通过标准化接口集成外部工具,实现MCP以增强模型交互,构建可扩展的Agent架构。
8. 总结
Anthropic 的研究洞见与 Spring AI 的工程实践相结合,为构建高效的 LLM 系统提供了强大的框架。
遵循这些模式和原则,开发者能创建健壮、可维护、有效的 AI 应用,在交付真实价值的同时避免不必要的复杂性。
关键要记住:最简单的解决方案往往才是最有效的。从基础模式开始,充分理解你的使用场景,只在你确信能显著提升系统性能或能力时才引入更多复杂性。
📌 本文配套 Demo 源码位于 spring-ai-examples 仓库的
agentic-patterns目录。
🖋 译者按:本文是对
AnthropicBuilding Effective Agents 研究的Java实战化翻译与重构,所有代码示例基于Spring AI,展示了从理论研究到生产级Java代码的完整落地路径。
更多推荐


所有评论(0)