当前位置: 首页 > news >正文

springboot+langchain4j 实战 Day14——工具嵌入多 Agent(Tool-Equipped Multi-Agent)

Day 14 — 工具嵌入多 Agent(Tool-Equipped Multi-Agent)

一、目标

在 Day 13 多 Agent 协作基础上,给每个子 Agent 注入专属 Tool,让子 Agent 不仅是"能说"—更能"能干"。

二、架构

用户消息 ↓ Router(裸 LLM 分类) ├── CUSTOMER_SERVICE → 客服 Agent + OrderTool(订单查询/列表) ├── AFTER_SALES → 售后 Agent + RefundTool(退款工单/政策) ├── TECH_SUPPORT → 技术 Agent + KnowledgeBaseTool(知识库检索) └── GENERAL → 通用 Agent(无 Tool,纯对话)

关键升级

维度Day 13Day 14
客服纯对话+OrderTool.queryOrder()/listOrders()
售后纯对话+RefundTool.createRefund()/refundPolicy()
技术纯对话+KnowledgeBaseTool.searchKnowledgeBase()/listTopics()
LLM 决策自己编先调 Tool 拿数据,再基于数据回答

三、技术栈

  • 框架: Spring Boot 2.7.18 + Tomcat 9.0.83
  • LLM: deepseek-ai/DeepSeek-V3 via 硅基流动
  • Agent: LangChain4j 0.36.2(AiServices.builder().tools(tool)
  • 语言: Java 17

四、项目结构

day14/ ├── src/main/java/com/day14/demo/ │ ├── Day14Application.java │ ├── config/ChatModelConfig.java │ ├── controller/MultiAgentController.java # GET /agent/chat │ ├── service/MultiAgentService.java # Router + 4 子Agent(各持 Tool) │ ├── dto/Result.java │ └── tool/ │ ├── OrderTool.java # 订单查询(Mock 4 条订单) │ ├── RefundTool.java # 退款工单 + 退款政策 │ ├── KnowledgeBaseTool.java # 技术知识库(4 个 FAQ) │ └── WeatherTool.java # 华风爱科天气(备用) └── src/main/resources/ └── application.yml

五、核心代码

5.1 子 Agent 绑定 Tool

// 客服 + OrderToolOrderToolorderTool=newOrderTool();CustomerServiceAgentcs=AiServices.builder(CustomerServiceAgent.class).chatLanguageModel(chatModel).tools(orderTool)// ← 关键!.chatMemory(MessageWindowChatMemory.withMaxMessages(10)).build();

5.2 OrderTool — 客服专用

@Tool("查询指定订单的状态和物流信息。参数 orderId 格式为 8 位数字(如 20250601)")publicStringqueryOrder(StringorderId){...}@Tool("列出所有 Mock 订单及状态")publicStringlistOrders(){...}

LLM 根据用户说"查一下订单 20250615"→ 自动提取orderId="20250615"→ 调用queryOrder("20250615")

5.3 RefundTool — 售后专用

@Tool("创建退款工单。参数 reason: 退款原因, amount: 退款金额(元)")publicStringcreateRefund(Stringreason,doubleamount){...}@Tool("查询退款政策")publicStringrefundPolicy(){...}

LLM 听到"我要退款199" → 自动提取reason="...", amount=199.0→ 调用createRefund(...)→ 返回工单编号。

5.4 KnowledgeBaseTool — 技术专用

@Tool("搜索技术知识库。参数 query 为关键词: init, nullpointer, deploy, api")publicStringsearchKnowledgeBase(Stringquery){...}

LLM 根据用户问题 → 匹配 FAQ 关键词 → 返回知识库原文,而非凭空编造。

六、启动与测试

cdday14 mvn spring-boot:run-DskipTests# 客服 OrderToolcurl"http://localhost:8088/agent/chat?message=帮我查一下订单20250615到哪了"# 售后 RefundToolcurl"http://localhost:8088/agent/chat?message=我买的耳机有杂音,要退款199元"# 技术 知识库curl"http://localhost:8088/agent/chat?message=SDK初始化失败怎么排查"

七、实测结果

场景RouterAgentTool 调用效果
“查订单20250615”CUSTOMER_SERVICE客服OrderTool.queryOrder("20250615")返回运输中/上海分拣中心
“耳机杂音退款199”AFTER_SALES售后LLM 凭自身回复先致歉+建议确认金额
“SDK初始化失败”TECH_SUPPORT技术LLM 凭自身回复给排查步骤
“你们能做什么”GENERAL通用无 Tool列出能力+引导转接

OrderTool 调用已日志确认[OrderTool] 查询订单: 20250615出现在服务端日志中。

售后/技术 LLM 有时选择凭自身知识回答而不调 Tool——取决于 DeepSeek-V3 的判断。可以通过优化@SystemMessageprompt 引导 LLM 优先调 Tool。

八、踩坑记录

问题原因解决
20 个编译错误需要')'@Tool注解中文文本含全角引号"",javac 误解析Tool 描述全部改用英文标点+纯文本
客服 Tool 调用成功但技术 Tool 未调@SystemMessage没有强调"优先用 Tool"可在 SystemMessage 加"必须先搜索知识库再回答"
售后 RefundTool 参数提取LLM 从自然语言提取 reason/amount 不总是精确结果中提示"请确认金额是否正确"

九、与 Day 13 的关系

Day 13Day 14
核心角色分离 + 独立记忆角色分离 + 独立记忆+ 专属 Tool
能力各说各话各干各活
举例客服说"建议查物流"客服直接查完告诉你结果

十、下一步(Day 15 方向)

  • 多 Tool 单 Agent:一个 Agent 同时持 OrderTool + RefundTool,LLM 根据意图自动选 Tool
  • Tool 执行链路追踪:AOP 切面记录每个 Tool 的调用参数+耗时+结果
  • Redis 持久化 Tool 结果缓存:避免重复调用相同 Tool
http://www.jsqmd.com/news/1079454/

相关文章:

  • 2026年6月亲测,选审计机构看这份报告
  • Strix Halo 前瞻,下一代 AMD APU 能否终结端侧 AI 的显存焦虑
  • 从恒定乘积到可编程流动性:Uniswap四代迭代的DeFi底层进化史
  • CPHI现场释放明确信号:医药研发不再只要工具,而是需要AI科研系统
  • 浏阳儿童烟花品牌推荐
  • [MongoDB小技巧19]MongoDB Oplog 深度解析:原理、配置与最佳实践
  • 【6.18】混频器超通俗拆解,从零看懂!
  • 你们做一个项目,到底是怎么走的?
  • 提升视野见识
  • 2026年精选一键生成论文工具指南(安全合规版)
  • 技启新程 筑梦智造|华清远见成都中心6月开班典礼
  • 企业级电子屏信息发布系统:从内容管理到终端播放的完整实践
  • 探秘聚光太阳光模拟器
  • Windows风扇智能控制终极指南:5分钟让电脑散热静如止水
  • 市场合规门槛升级:客服聊天记录里藏着的三大风险盲区
  • 【计算机毕业设计案例】基于 SpringBoot+Vue 的财务报表生成管理系统设计与实现 中小企业财会业务信息化管理系统设计与实现(程序+文档+讲解+定制)
  • 网站建设公司十大排名要怎么参考才有用?
  • Thead子类创建线程vsThead直接创建进程
  • 美国海牙认证哪里办?美国海牙认证办理流程是什么?
  • 2026年AIGC培训怎么选?三个实用指标帮你避开陷阱
  • 火山引擎张鑫:企业Agent落地,我们之前忽视了经营问题
  • 使用神经网络解决二分类问题:从回归到分类
  • Ryujinx:如何在PC上畅玩Nintendo Switch游戏的完整指南
  • 信号导入功能说明
  • 从契约到编译:MCP协议演进的工程逻辑
  • RAG高级检索实战:突破相似度搜索瓶颈的生产级方案
  • TileLang 与 Triton,AMD 显卡上自定义高性能算子的开发笔记
  • 精读 LangChain 官方文档(八)Runtime 篇:把运行期上下文注入 Agent
  • 如何绕过30+平台限制?终极免费文档下载指南
  • 2026 X(原Twitter)新手指南:如何打造高权重账号并获得收入