Spring AI 智能体代理模式(Agent Agentic Patterns)

AgentAgenticPatterns 简介

在最近的一篇研究报告《构建高效代理》 中,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;}
}

并行化工作流

这个模式就像开了多个窗口同时干活——让多个大模型同时处理任务,最后把结果汇总起来。主要有两种方式:

  • 分片处理:把大任务拆成小任务,分给不同的大模型同时处理(类似分工作业)
  • 投票机制:让多个大模型同时处理同一个任务,最后投票选出最佳结果(像开会讨论)

在这里插入图片描述

使用场景

并行化工作流模式展示了对多个大语言模型操作的高效并发处理。这种模式对于需要并行执行大语言模型调用并自动聚合输出的场景特别有用。

  • 要处理一堆相似但互不干扰的任务(比如同时分析多个用户群体的数据)
  • 需要多个任务独立运行(像工厂里的流水线作业)
  • 任务能快速拆解且可以并行执行(比如同时生成多个产品描述)

以下是Spring AI实现的一个实际示例,比如要分析市场变化对四类利益群体的影响,我们可以让四个大模型同时开工::

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

路由工作流

路由模式实现了智能任务分配,能够针对不同类型的输入进行专门处理,这种模式专为复杂任务设计,不同类型的输入由专门的流程处理会更好。 这个模式就像智能分诊台——能自动识别问题类型,转给最专业的处理流程。技术实现上相当于给大模型装了个智能路由器,不同的问题自动走专用通道。
在这里插入图片描述

使用场景

它使用大语言模型分析输入内容,并将其路由到最合适的专门提示或处理程序。

  • 要处理五花八门的问题类型(比如客服系统同时接咨询、投诉、技术问题)
  • 不同问题需要不同专家处理(像医院分内科/外科/急诊)
  • 需要精准分类输入内容(像快递自动分拣系统)

以下是使用路由工作流的基本示例:

@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);

协调者-执行者

这个模式就像电影拍摄现场——导演(协调者)负责分镜头,各工种(执行者)专注自己的专业领域。技术实现上采用”中央指挥部+特种部队”的架构,既保持灵活又确保可控。
在这里插入图片描述

使用场景

当你的任务像建造摩天大楼需要多方协作时:

  • 任务复杂到无法提前拆解(像应对突发事件的应急小组)
  • 需要不同专业视角(像建筑设计需要结构/水电/装修多方配合)
  • 解决方案需要动态调整(像军事行动中的实时战术变化)

实现使用Spring AI的ChatClient进行大语言模型交互,包括:

public class OrchestratorWorkersWorkflow {public WorkerResponse process(String taskDescription) {// 1. 协调器分析任务并确定子任务OrchestratorResponse orchestratorResponse = //...// 2. 工作器并行处理子任务List<String> workerResponses = //...// 3. 结果合并为最终响应return new WorkerResponse(/*...*/);}
}ChatClient chatClient = //... 初始化聊天客户端
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());

评估者-优化者

这个模式就像作家与编辑的协作——写手(生成者)负责创作初稿,编辑(评估者)逐字推敲提出修改意见。技术实现上采用”创作-反馈”循环机制,直到作品达到出版标准。

  • 生成者大语言模型:生成初始响应并根据反馈进行改进。
  • 评估者大语言模型:分析响应并提供详细的改进反馈。

在这里插入图片描述

使用场景

评估者 - 优化者模式适用于需要多轮迭代以提高质量的任务。

  • 有明确的品质标准(像学术论文需要同行评审)
  • 迭代改进能显著提升价值(像广告文案的AB测试)
  • 追求完美输出(像电影剧本的多次修订)

实现使用Spring AI的ChatClient进行大语言模型交互,包括:

public class EvaluatorOptimizerWorkflow {public RefinedResponse loop(String task) {// 1. 生成初始解决方案Generation generation = generate(task, context);// 2. 评估解决方案EvaluationResponse evaluation = evaluate(generation.response(), task);// 3. 如果通过,返回解决方案// 4. 如果需要改进,结合反馈并生成新的解决方案// 5. 重复直到满意return new RefinedResponse(finalSolution, chainOfThought);}
}ChatClient chatClient = //... 初始化聊天客户端
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());

结论

Anthropic的研究见解与Spring AI的实际实现相结合,为构建有效的基于大语言模型的系统提供了强大的框架。通过遵循这些模式和原则,开发人员可以创建健壮、可维护且高效的AI应用程序,在避免不必要复杂性的同时提供真正的价值。

关键是要记住,有时最简单的解决方案就是最有效的。从基本模式开始,彻底了解你的运用场景,只有在复杂性能显著提高系统性能或功能时才进行设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Vue3 与 exceljs 实现自定义导出 Excel 模板

在开发中&#xff0c;我们需要常常为用户提供更多的数据录入方式&#xff0c;Excel 模板导出与导入是一个常见的功能点。本文将介绍如何使用 Vue3、exceljs 和 file-saver 实现一个自定义导出 Excel 模板&#xff0c;并在特定列添加下拉框选择的数据验证功能。 技术选型 excelj…

git 命令之-git cherry-pick

今天得到一个通知&#xff0c;这个业务版本里面部分已经开发但还没测试的内容要新开一个分支提交&#xff0c;但是我已经有几个提交上去了&#xff0c;难道只能一个一个文件复制到新的分支吗&#xff1f;我不&#xff0c;我找到了这个git命令&#xff0c;可以解决我的困惑&…

浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)

目录 6-3 输入格式: 输出格式: 输入样例: 输出样例: 6-4 输入格式: 输出格式: 输入样例: 输出样例: 6-5 输入格式: 输出格式: 输入样例: 输出样例: 6-6 输入格式: 输出格式: 输入样例: 输出样例: 6-3 第6章-3 列表或元组的数字元素求和 分数 20 全屏浏览 切换布局 作者 陈春晖 …

【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter2 小程序核心

1 尺寸单位和样式 1.1 创建小程序项目-纯净环境 // 该删的删掉。 1.2 尺寸单位 # 小程序内 手机屏幕大小可能不一样&#xff0c;使用px像素就会出现样式问题 --> 小程序统一了整个宽度&#xff0c;即750rpx&#xff0c;屏幕一半则是375rpx -->因此不管什么手机都可以…

攻防世界逆向刷题笔记(新手模式9-1?)

bad_python 看样子是pyc文件损坏了。利用工具打开&#xff0c;发现是MAGIC坏了。搜下也没有头绪。 攻防世界-难度1- bad_python - _rainyday - 博客园 python Magic Number对照表以及pyc修复方法 - iPlayForSG - 博客园 看WP才知道36已经提示了pyc版本了。参考第二个文章&am…

mysql ACID 原理

序言&#xff1a;ACID 是一组数据库设计原则&#xff0c;他是业务数据和关键业务程序的可靠性保障。 1、atomicity&#xff08;原子性&#xff09; 依赖如下能力 autocommit commit rollback2、一致性 2.1 double write buffer 1、定义&#xff1a;double write buffer 是…

WebStorm 高效快捷方式全解析

作为前端开发的黄金搭档&#xff0c;WebStorm 凭借强大的功能和高度可定制的快捷键体系&#xff0c;成为众多开发者提升编码效率的利器。本文基于 IntelliJ IDEA 的快捷键体系&#xff08;WebStorm 作为 JetBrains 家族成员&#xff0c;快捷键逻辑高度一致&#xff09;&#xf…

基于 STM32 的农村污水处理控制系统设计与实现

摘要 针对农村污水处理自动化程度低、运维成本高的问题,本文设计了一种基于 STM32 单片机的污水处理控制系统。系统通过多传感器实时监测水质参数,结合 PID 控制算法实现污水处理全流程自动化,并集成远程监控功能,满足农村地区低成本、易维护的需求。 一、硬件系统设计 …

自动生成md文件以及config.mjs文件-vitepress

效果&#xff1a; config.mjs文件 import {defineConfig} from vitepress import hljs from highlight.js/lib/core import javascript from highlight.js/lib/languages/javascript import xml from highlight.js/lib/languages/xml import {ref} from "./cache/deps/vue…

Tailwind css实战,基于Kooboo构建AI对话框页面(二)

基于上篇内容&#xff0c;添加交互逻辑&#xff0c;实现一个伪聊天功能的对话框效果&#xff1a; Tailwind css实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;一&#xff09;-CSDN博客 在前期文章中&#xff0c;我们完成了 AI 对话框的静态页面搭建。本文将聚焦交互…

Conda:环境移植及更新1--使用conda-pack

更多内容&#xff1a;XiaoJ的知识星球 目录 一、使用conda-pack1.安装 conda-pack2.移植整个 Anaconda 环境3.移植单个虚拟环境4.验证是否生效 在相同Linux设备上移植Miniconda3&#xff08;Anaconda3同理&#xff09;常用方法有。 使用conda-pack&#xff1a;使用conda-pack工…

树莓派超全系列教程文档--(50)如何查找树莓派的IP地址

如何查找树莓派的IP地址 找到您的Raspberry Pi的IP地址桌面命令行引导输出网络管理器使用mDNS解析 raspberrypi.local检查路由器的设备列表使用 nmap 查找设备使用智能手机应用程序查找设备 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 找到您…

如何优化 MySQL 存储过程的性能?

文章目录 1. 优化 SQL 语句避免全表扫描减少子查询&#xff0c;改用 JOIN避免 SELECT 2. 合理使用索引3. 优化存储过程结构减少循环和临时变量避免重复计算 4. 使用临时表和缓存5. 优化事务处理6. 分析和监控性能7. 优化数据库配置8. 避免用户自定义函数&#xff08;UDF&#…

尚硅谷redis7 47-48 redis事务之理论简介

47 redis事务之理论简介 什么是事务 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入 能干什么&#xff1f; 一个队列中&#xff0c;一次性、顺序性、排他性的执行一系列操作 redis事务vs数据库事务 …

Nginx 在四大核心场景中的应用实践与优化

一、Nginx 核心应用场景深度解析 1. HTTP 服务器&#xff1a;静态资源的高性能承载者 Nginx 作为 HTTP 服务器时&#xff0c;凭借轻量级架构和高效的事件驱动模型&#xff0c;成为静态资源服务的首选方案。 核心能力与场景 静态文件高效处理&#xff1a;直接响应 HTML、CSS…

亚当·斯密思想精髓的数学建模与形式化表征

亚当斯密思想精髓的数学建模与形式化表征 摘要&#xff1a;本文运用数学建模方法对亚当斯密的经济与伦理思想进行形式化表征。通过分工的规模经济模型和市场均衡条件展现《国富论》中"看不见的手"原理&#xff1b;采用扩展效用函数与合作博弈均衡解释《道德情操论》…

FastDFS集群部署与性能优化实战

目录 一、介绍 二、FastDFS原理 三、FastDFS部署 1.资源清单 2.修改主机名 3.安装libfastcommon&#xff08;tracker01、tracker02、storage1、storage2&#xff09; 4.安装编译FastDFS&#xff08;tracker01、tracker02、storage1、storage2&#xff09; 5.配置tracker…

学习心得(14--16)

模板&#xff1a; 前端的页面单独存在模板当中 jinja2 &#xff1a;模板语法 保持前端页面不变的情况下&#xff0c;返回内容给前端做法&#xff1a; 写一个data&#xff0c;并在return中的render_template中&#xff0c;写上datadata 使用时&#xff0c;要将templa…

stm与51单片机哪个更适合新手学

一句话总结 51单片机&#xff1a;像学骑自行车&#xff0c;简单便宜&#xff0c;但只能在小路上骑。 STM32&#xff1a;像学开汽车&#xff0c;复杂但功能强&#xff0c;能上高速公路&#xff0c;还能拉货载人&#xff08;做复杂项目&#xff09;。 1. 为啥有人说“先学51单片…

Web安全测试-文件上传绕过-DVWA

Web安全测试-文件上传绕过-DVWA 很多网站都有上传资源(图片或者文件)的功能&#xff0c;资源上传后一般会存储在服务器的一个文件夹里面&#xff0c;如果攻击者绕过了上传时候的文件类型验证&#xff0c;传了木马或者其他可执行的代码上去&#xff0c;那服务器就危险了。 我用…