1. 什么是 LLM Agent

1.1 定义

LLM Agent智能体) 是一个以大型语言模型(LLM)为核心决策引擎、能够自主调用外部工具、执行多步骤任务并动态调整行为的智能系统。

简单来说:如果说单个 LLM 调用是"一问一答",那么 Agent 就是让 LLM 成为"能自己动手的助手"——它不再只是回答问题,而是可以规划步骤、调用工具、反思结果、循环迭代,直到完成目标任务。

举一个现实场景的例子:

  • 普通 LLM 调用:用户问"帮我查下北京明天天气",模型返回一段天气描述文本。

  • Agent 行为:用户说"如果明天北京下雨,帮我取消户外会议并通知参会人"。

    1. 调用天气 API 获取数据
    2. 判断是否下雨
    3. 如果是,调用日历 API 取消会议
    4. 调用邮件/消息 API 通知所有人

1.2 为什么 Anthropic 的研究很重要?

2024 年底,Anthropic 发表了备受关注的论文 Building Effective Agents,其核心观点颠覆了业界对 Agent 的普遍认知:

主流误区 Anthropic 的洞察
Agent 越自主越好 对于大多数任务,预设工作流(Workflow 比完全自主的 Agent 更可靠
框架越复杂越强大 简洁 + 可组合 优于复杂框架
一个 Agent 解决所有问题 应把任务分解,按需选择最合适的模式

这条理念与企业级应用的需求高度契合:可靠性可维护性比炫技更重要。

💡 本文特色:所有模式均配有基于 Spring AIJava 代码实现,完整可运行示例位于 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 目录。

📖 原始论文:Building Effective Agents — Anthropic

🖋 译者按:本文是对 Anthropic Building Effective Agents 研究的 Java 实战化翻译与重构,所有代码示例基于 Spring AI,展示了从理论研究到生产级 Java 代码的完整落地路径。

更多推荐