Skip to content
Spring AI 文档版本 2.1.0-SNAPSHOT 源快照 6b308d48 更新于 2026-10-16

构建高效的智能体

在最近一份研究发布 Building Effective Agents 中,Anthropic 分享了关于构建高效大语言模型(LLM)智能体的宝贵洞见。让这项研究尤为有趣的是,它强调简单与可组合,胜过复杂的框架。让我们来探索这些原则如何借助 Spring AI 的特性,转化为实际的实现。

虽然各模式的描述与图取自 Anthropic 的原始发布,我们将聚焦于如何用 Spring AI 面向模型可移植性与结构化输出的特性来实现这些模式。我们建议先读原始论文。

spring-ai-examples 仓库中的 agentic-patterns 目录包含以下所有示例的代码。

智能体系统

该研究发布对智能体系统的两类做出了一项重要的架构区分:

  1. 工作流(Workflows):LLM 与工具经由预定义代码路径编排的系统(例如规范式系统)
  2. 智能体(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 应用,在交付真实价值的同时避免不必要的复杂度。

关键是要记住:有时最简单的方案就是最有效的。从基本模式开始,彻底理解你的用例,仅当复杂度能切实改善系统性能或能力时才增添它。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。