主题
构建高效的智能体
在最近一份研究发布 Building Effective Agents 中,Anthropic 分享了关于构建高效大语言模型(LLM)智能体的宝贵洞见。让这项研究尤为有趣的是,它强调简单与可组合,胜过复杂的框架。让我们来探索这些原则如何借助 Spring AI 的特性,转化为实际的实现。
虽然各模式的描述与图取自 Anthropic 的原始发布,我们将聚焦于如何用 Spring AI 面向模型可移植性与结构化输出的特性来实现这些模式。我们建议先读原始论文。
spring-ai-examples 仓库中的 agentic-patterns 目录包含以下所有示例的代码。
智能体系统
该研究发布对智能体系统的两类做出了一项重要的架构区分:
- 工作流(Workflows):LLM 与工具经由预定义代码路径编排的系统(例如规范式系统)
- 智能体(Agents):LLM 动态指挥自身进程与工具使用的系统
关键的洞见是:尽管完全自主的智能体看似诱人,但对界定良好的任务,工作流常常提供更好的可预测性与一致性。这与对可靠性和可维护性有刚性要求的企业需求高度契合。
让我们通过五种基础模式来审视 Spring AI 如何实现这些概念,每种都服务于特定的用例:
1. 链式工作流
链式工作流模式体现了把复杂任务拆解为更简单、更可控步骤的原则。
何时使用:
- 有清晰顺序步骤的任务
- 当你想用延迟换取更高准确性时
- 当每一步都建立在上一步输出之上时
下面是来自 Spring AI 实现的一个实用示例:
java
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;
}
}这一实现展示了若干关键原则:
- 每一步都有聚焦的职责
- 一步的输出成为下一步的输入
- 该链易于扩展与维护
2. 并行化工作流
LLM 可以同时处理任务,并以编程方式聚合它们的输出。
何时使用:
- 处理大量相似但彼此独立的条目
- 需要多个独立视角的任务
- 当处理时间关键且任务可并行时
java
List<String> parallelResponse = new ParallelizationWorkflow(chatClient)
.parallel(
"Analyze how market changes will impact this stakeholder group.",
List.of(
"Customers: ...",
"Employees: ...",
"Investors: ...",
"Suppliers: ..."
),
4
);3. 路由工作流
路由模式实现了智能的任务分派,为不同类型的输入提供专门的处理。
何时使用:
- 有截然不同输入类别的复杂任务
- 当不同输入需要专门处理时
- 当分类能被准确处理时
java
@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);4. 编排者-工作者
何时使用:
- 无法预先预测子任务的复杂任务
- 需要不同方法或视角的任务
- 需要自适应问题求解的情形
java
public class OrchestratorWorkersWorkflow {
public WorkerResponse process(String taskDescription) {
// 1. Orchestrator analyzes task and determines subtasks
OrchestratorResponse orchestratorResponse = // ...
// 2. Workers process subtasks in parallel
List<String> workerResponses = // ...
// 3. Results are combined into final response
return new WorkerResponse(/*...*/);
}
}用法示例:
java
ChatClient chatClient = // ... initialize 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());5. 评估者-优化者
何时使用:
- 存在清晰的评估标准
- 迭代式改进带来可衡量的价值
- 任务能从多轮批评中获益
java
public class EvaluatorOptimizerWorkflow {
public RefinedResponse loop(String task) {
Generation generation = generate(task, context);
EvaluationResponse evaluation = evaluate(generation.response(), task);
return new RefinedResponse(finalSolution, chainOfThought);
}
}用法示例:
java
ChatClient chatClient = // ... initialize 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());Spring AI 的实现优势
Spring AI 对这些模式的实现提供了若干与 Anthropic 建议契合的好处:
模型可移植性
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>结构化输出
java
EvaluationResponse response = chatClient.prompt(prompt)
.call()
.entity(EvaluationResponse.class);一致的 API
- 跨不同 LLM 服务商的统一接口
- 内建的错误处理与重试
- 灵活的提示词管理
最佳实践与建议
从简单起步
在增加复杂度之前先以基本工作流开始
使用能满足你要求的最简单模式
仅在需要时才增添精巧
为可靠性而设计
实现清晰的错误处理
尽可能使用类型安全的响应
在每一步都内建校验
权衡取舍
在延迟与准确性之间平衡
评估何时使用并行处理
在固定工作流与动态智能体之间抉择
未来工作
这些指南将持续更新,以探索如何构建把这些基础模式与精巧特性相结合的更高级智能体:
模式组合
- 组合多个模式以创造更强大的工作流
- 构建能发挥每种模式所长的混合系统
- 创建能适应不断变化的要求的灵活架构
高级智能体记忆管理
- 跨对话实现持久记忆
- 高效管理上下文窗口
- 发展长期知识保留的策略
工具与模型上下文协议(MCP)集成
- 通过标准化接口利用外部工具
- 实现 MCP 以增强模型交互
- 构建可扩展的智能体架构
结论
Anthropic 的研究洞见与 Spring AI 的实际实现相结合,为构建高效的、基于 LLM 的系统提供了一个强大的框架。
遵循这些模式与原则,开发者能创造出健壮、可维护且有效的 AI 应用,在交付真实价值的同时避免不必要的复杂度。
关键是要记住:有时最简单的方案就是最有效的。从基本模式开始,彻底理解你的用例,仅当复杂度能切实改善系统性能或能力时才增添它。