智能体代理模式(Agent Agentic Patterns)
在最近的一篇研究报告《构建高效代理》 中,Anthropic分享了关于构建高效大语言模型(LLM)代理的宝贵见解。这项研究特别有趣的地方在于,它强调 简单性和可组合性,而非复杂的框架。让我们来探索如何利用Spring AI将这些原则转化为实际的实现。
什么是智能体
"智能体" 有多种定义方式。一些用户将智能体定义为完全自主的系统,这类系统能够长时间独立运行,使用各种工具完成复杂任务。还有一些人用这个术语描述遵循预定义工作流程、指令性更强的实施方案。在Anthropic的定义当中,将所有这些变体都归类为智能系统,但在架构上对工作流程和智能体做出了重要区分:
- 工作流:指通过预定义代码路径来协调大语言模型和工具的系统。
- 智能体:则是大语言模型能够动态指导自身流程和工具使用,对完成任务的方式保持控制权的系统。
关键的一点是,虽然完全自主的代理可能很有吸引力,但对于定义明确的任务,工作流通常能提供更好的可预测性和一致性。这与企业对可靠性和可维护性至关重要的要求完美契合。接下来,我们将详细探讨这两类智能系统。
代理系统
在使用大语言模型构建应用程序时,我们建议尽可能寻找最简单的解决方案,仅在必要时增加复杂性。这可能意味着根本无需构建智能系统。智能系统通常会用延迟和成本来换取更好的任务性能,应该考虑这种权衡在何种情况下是合理的。
当确实需要增加复杂性时,对于定义明确的任务,工作流程能提供可预测性和一致性。
而当大规模需要灵活性和基于模型的决策时,智能体则是更好的选择。然而,对于许多应用程序而言,通过检索和上下文示例优化单个大语言模型调用通常就已足够。
让我们通过五个基本模式来看看Spring AI是如何实现这些概念的,每个模式都适用于特定的用例:
链式工作流
这个模式就像工厂流水线——把复杂任务拆成一个个小工序,前一道工序的结果自动传给下一道。技术实现上用了"责任链"设计模式,支持随时增加新的处理环节。

使用场景
这个实现展示了几个关键原则:
- 需要分步骤完成的复杂任务(比如先查天气再规划行程最后生成攻略)
- 宁愿多花点时间也要保证准确率(像重要文件的多级审批)
- 后一步依赖前一步的结果(就像做菜必须按洗菜→切菜→炒菜的顺序)
以下是Spring AI实现的一个实际示例:
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;
}
}
并行化工作流
这个模式就像开了多个窗口同时干活——让多个大模型同时处理任务,最后把结果汇总起来。主要有两种方式:
- 分片处理:把大任务拆成小任务,分给不同的大模型同时处理(类似分工作业)
- 投票机制:让多个大模型同时处理同一个任务,最后投票选出最佳结果(像开会讨论)

使用场景
并行化工作流模式展示了对多个大语言模型操作的高效并发处理。这种模式对于需要并行执行大语言模型调用并自动聚合输出的场景特别有用。
- 要处理一堆相似但互不干扰的任务(比如同时分析多个用户群体的数据)
- 需要多个任务独立运行(像工厂里的流水线作业)
