1. 简介
多智能体架构是人工智能领域实现复杂和创新解决方案的新趋势。其中,“智能体交接”(Agents Handoff)是一种备受关注的架构模式。
在本文中,我们将探讨一种开发这种多智能体架构的方法,并通过Langgraph4j+Spring AI实现一个完整的多智能体。
1.1 什么是多智能体架构
多智能体系统由多个相互交互的智能体组成,每个智能体都被设计为执行特定任务,它们可以独立运作,也可以协同合作以实现共同目标。多智能体架构的本质在于智能体之间的协调与通信,以确保复杂过程的无缝执行。
1.2 什么是智能体交接
智能体交接指的是将控制权和数据(上下文)从一个智能体转移到另一个智能体的机制,从而实现任务的连续高效执行。在需要不同专业知识或需要将任务分配给多个智能体以优化性能的场景中,这一概念至关重要。
1.2 如何实现智能体交接
使用函数调用(也称为工具)作为实现智能体交接技术的手段。函数调用在AI模型中充当智能体的支柱,使它们能够调用特定函数、共享数据并协同执行任务。通过利用函数调用,开发人员可以设计出能够动态交互的智能体,这些智能体能够响应环境中的变化,并实时适应新信息。
下图展示了ReAct智能体的架构,突出了函数调用在该框架中所扮演的角色:
Action即智能体
鉴于大型语言模型(LLM)能够根据其输入制定清晰明确的行动计划,那么如果这些行动背后是由另一个智能体驱动的呢?下面是一个展示这一点的示意图。
这意味着:如果我们描述一个行动(action)的功能,比如智能体(agent)的能力,我们就可以依靠该action的执行计划,通过利用其基础设施来执行action并收集结果,从而自动实现智能体交接。
多个Actions作为智能体
我们可以不断地迭代添加新的行为作为智能体,从而构建复杂的多智能体场景。
在Langgraph4j项目中已经开发出了一个参考实现。Langgraph4j提供了一个内置的ReACT智能体(也称为AgentExecutor),该实现已被扩展以支持智能体交接(Agents’ handoff)架构。
主要类包括AbstractAgentExecutor,它将一个AgentExecutor与一个Function结合起来,以及AgentHandoff,它通过添加将AbstractAgentExecutor的实现集成到其工具链中的能力,增强了AgentExecutor的功能。
接下来,我们将完成这样一个案例:
用户输入需要购买的商品 ===》 调用商品服务智能体 ===》 调用支付结算智能体 ===》 结束
2.实战案例
2.1 定义商品市场智能体
该智能体专门用来提供查询商品的。
public class AgentMarketplace extends AbstractAgentExecutor<AgentMarketplace.Builder> { static class Tools { record Product(@JsonPropertyDescription("商品名称") String name, @JsonPropertyDescription("商品价格") double price) { } @Tool(description = "从商品市场中查询商品") Product searchByProduct(@ToolParam(description = "要查询的商品名称") String product) { // 这里是你的逻辑,我们这里为了演示直接返回一个Product return new Product("Spring Boot3实战案例200讲", 70D) ; } } // 定义智能体 public static class Builder extends AbstractAgentExecutor.Builder<AgentMarketplace.Builder> { // 构建智能体 public AgentMarketplace build() throws GraphStateException { this.name("marketplace") // 智能体描述 (工具描述) .description("商品市场智能体, 获取商品相关的信息") .parameterDescription("") .defaultSystem(""" 你是负责在商品市场上提供商品信息 """) .toolsFromObject(new Tools()) ; return new AgentMarketplace(this); } } public static Builder builder() { return new Builder(); } protected AgentMarketplace(Builder builder) throws GraphStateException { super(builder); }}
2.2 定义支付智能体
当从上面的商品市场智能体获取到对应的商品以后,会继续调用支付智能体进行支付操作。
public class AgentPayment extends AbstractAgentExecutor<AgentPayment.Builder> { static class Tools { record Transaction(@JsonPropertyDescription("购买的商品名称") String product) { } @Tool(description = "购买商品并进行付款") Transaction submitPayment(@ToolParam(description = "购买的商品名称") String product, @ToolParam(description = "商品的价格") double price, @ToolParam(description = "支付账号") String account) { System.err.printf("准备使用: %s账号, 购买图书: 《%s》| %s%n", account, product, price) ; return new Transaction("Spring Boot3实战案例200讲") ; } } public static class Builder extends AbstractAgentExecutor.Builder<AgentPayment.Builder> { public AgentPayment build() throws GraphStateException { this.name("payment") // 智能体描述 (工具描述) .description("支付智能体, 购买并进行支付") // agent输入描述(工具参数描述) .parameterDescription("与付款相关的所有购买信息") .defaultSystem(""" 你是提供支付服务的智能体 """) .toolsFromObject(new Tools()) ; return new AgentPayment(this); } } public static Builder builder() { return new Builder(); } protected AgentPayment(Builder builder) throws GraphStateException { super(builder); }}
2.3 配置智能体交接
接下来,我们要将上面的两个智能体进行配置。
@Configurationpublic class AgentHandoffConfig { @Bean CompiledGraph<State> graph(ChatModel chatModel) throws Exception { AgentMarketplace agentMarketplace = AgentMarketplace.builder() .chatModel(chatModel) .build(); AgentPayment agentPayment = AgentPayment.builder() .chatModel(chatModel) .build(); return AgentHandoff.builder() .chatModel(chatModel) .agent(agentMarketplace) .agent(agentPayment) .build() .compile(); }}
2.4 测试
@RestController@RequestMapping("/agents")public class AgentController { private final CompiledGraph<State> graph ; public AgentController(CompiledGraph<State> graph) { this.graph = graph; }
@GetMapping public ResponseEntity<?> chat(String prompt) { Optional<State> result = graph.invoke(Map.of( "messages", new UserMessage(prompt))) ; String ret = result.flatMap(state -> { state.messages().forEach(message -> { System.out.println(message) ; System.err.println("----------------------------") ; }) ; return state.lastMessage() ; }) .map(Content::getText) .orElseThrow() ; return ResponseEntity.ok(ret) ; }}
测试结果
控制台输出
按照顺序执行了我们的智能体。
2.5 改进
使用MCP服务器作为智能体,由于智能体依赖工具来将任务交接给另一个智能体,因此可以结合采样功能使用MCP服务器,为智能体提供适合交接架构的支持
最后
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。
与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】

AI大模型系统学习路线
在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。
但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。
AI大模型入门到实战的视频教程+项目包
看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
海量AI大模型必读的经典书籍(PDF)
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
600+AI大模型报告(实时更新)
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
AI大模型面试真题+答案解析
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
