本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

在 Anthropic 最新研究论文 构建有效的智能体 中,团队分享了关于大型语言模型(LLM)智能体开发的重要洞见。这项研究的独特价值在于其推崇简约性与可组合性,而非复杂框架。以下探讨如何通过 Spring AI 实现这些原则:

Agent Systems

虽然模式描述和图表源自 Anthropic 的原版论文,但我们将重点介绍如何利用 Spring AI 的模型可移植性和结构化输出特性来实现这些模式。建议先阅读原始论文。

spring-ai-examples 代码库中的 agentic-patterns 目录包含后续示例的所有实现代码。

智能体系统

该研究论文对两类智能体系统作出重要架构区分:

  1. 工作流系统(Workflows):通过预定义代码路径编排 LLM 和工具(例如规范性系统)

  2. 智能体系统(Agents):LLM 动态自主控制流程及工具使用

核心观点在于:尽管全自主智能体看似吸引人,但工作流系统能为明确任务提供更优的可预测性和一致性。这完全契合企业对可靠性和可维护性的关键需求。

以下展示 Spring AI 通过五大基础模式实现这些概念,每个模式对应特定场景:

1. 链式工作流

链式工作流模式践行了 “化繁为简” 的原则,将复杂任务拆解为更易管理的步骤。

提示词链式工作流

适用场景:

  • 具有明确顺序步骤的任务

  • 愿以延迟换取更高准确率

  • 每个步骤依赖前序步骤输出

以下是 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;
    }
}

该实现体现以下关键原则:

  • 每个步骤职责单一明确

  • 前序步骤输出作为后续步骤输入

  • 链式结构易于扩展和维护

2. 并行工作流模式

LLM 可并行处理多个任务,并通过编程方式聚合输出结果。

并行工作流

适用场景:

  • 处理大批量相似但独立的条目

  • 需要获取多视角独立分析的任务

  • 处理时效要求高且可并行化的任务

List<String> parallelResponse = new ParallelizationWorkflow(chatClient)
    .parallel(
        "Analyze how market changes will impact this stakeholder group.",
        List.of(
            "Customers: ...",
            "Employees: ...",
            "Investors: ...",
            "Suppliers: ..."
        ),
        4
    );

3. 路由工作流

路由模式实现智能任务分发,支持针对不同输入类型的专业化处理。

路由工作流

适用场景:

  • 含明确输入分类的复杂任务

  • 需差异化处理的多样化输入

  • 可确保分类准确性的情况

@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. 协调工作流

协调工作流

适用场景:

  • 子任务无法预先确定的复杂任务

  • 需多方法或多视角处理的任务

  • 需要适应性解决问题的场景

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(/*...*/);
    }
}

用例:

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. 评估优化模式

评估优化模式

适用场景:

  • 存在明确评估标准

  • 迭代优化能带来可衡量的提升

  • 需多轮评审改进的任务

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 = // ... 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 的建议:

模型可移植性

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

结构化输出

EvaluationResponse response = chatClient.prompt(prompt)
    .call()
    .entity(EvaluationResponse.class);

一致性 API

  • 统一接口支持多种大语言模型提供商

  • 内置错误处理与自动重试机制

  • 灵活的提示词管理功能

最佳实践与建议

从简单入手:

  • 先构建基础工作流,再逐步增加复杂度

  • 采用满足需求的最简模式

  • 仅在必要时添加复杂功能

为可靠性而设计:

  • 实现清晰的错误处理机制

  • 尽可能采用类型安全的响应格式

  • 在每个环节内置验证流程

权衡考量:

  • 平衡延迟与准确性

  • 评估并行处理的适用场景

  • 在固定工作流与动态智能体间择优选择

未来工作方向

这些指南将持续更新,逐步探讨如何构建更高级的智能体 — 将基础模式与复杂功能有机结合:

模式组合:

  • 融合多种模式构建更强大的工作流

  • 开发能发挥各模式优势的混合系统

  • 打造可适应需求变化的弹性架构

高级智能体记忆管理:

  • 实现跨对话的持久化记忆存储

  • 高效管理上下文窗口

  • 开发长期知识保留策略

工具与模型上下文协议(MCP)集成:

  • 通过标准化接口调用外部工具

  • 应用 MCP 协议增强模型交互能力

  • 构建可扩展的智能体架构

总结

Anthropic 的研究洞见与 Spring AI 工程实践的结合,为构建高效的大语言模型系统提供了强大框架。

遵循这些模式与原则,开发者能够创建稳健、可维护且高效的 AI 应用,在避免过度复杂化的同时实现真正价值。

关键在于始终牢记:最简单的解决方案往往最有效。从基础模式出发,深入理解应用场景,仅当复杂化能显著提升系统性能或能力时,才进行相应演进。