qinghuan
返回三条项目主线

主项目候选 · 三选一 / 业务工具调用方向

LangChain4j 客服 Agent

把“帮我取消订单”做成受控、可追踪的业务操作

这是起点最小的一条:先读懂查单和取消两个工具,再加入真实登录身份、服务端确认和数据库记录。范围小,更容易把一次失败从头到尾讲清。

中等;原创改造后有深度核对 2026-09-29

先固定版本和学习范围

JDK 17 · Spring Boot 3.4.2 · LangChain4j starters 1.20.0-beta30

打开本轮固定源码 · 项目仓库

提交 7540de0d1293af376881eba26256d7980a27f4f3

仓库许可证标识:Apache-2.0。本页介绍所读版本,未保证未来版本保持相同行为。

开始前要会

  • Spring Boot、登录鉴权与数据库事务
  • 会写 mock 测试
  • 知道模型返回工具名和参数,再由应用执行
环境、模型费用和额外服务
  • 真实对话默认调用OpenAI gpt-4o-mini,需要可用API key和网络;不承诺免费额度。
  • 本地ONNX嵌入和内存向量库无需单独托管向量库;首次构建需要下载依赖。
  • 10个现有IT都会调用模型;judge断言还会追加模型请求。

已经在源码中读到

一次任务大致怎样走

  1. 用户提出查单 / 取消
  2. 检索业务政策
  3. 模型选择工具和参数
  4. 服务端验证身份与许可(待改造)
  5. 执行并核对业务结果

提示词会要求确认

源码要求取消前向用户确认,但未建立独立的服务端审批记录。模型说“已确认”不能代替业务授权。

有检索与测试示例

有本地政策文档检索、5000 Token 对话窗口,以及 10 个 IT 测试;这些 IT 调用真实模型,部分评判还会增加模型请求。

需要自己补齐或验证

这些能力不能直接写成“已实现”

  • 客户端会话标识与登录用户的绑定、持久审批、审计和业务幂等都要自己实现。
  • 客服示例没有直接接入 agentic 教程里的可恢复工作流;读过教程不等于本项目已经具备该能力。
  • 默认 mvn test 不会自动覆盖以 IT 命名的这组测试;必须检查实际选中数,真实模型测试也需要额度。
  • 演示数据含固定日期。建立自己的可重复测试数据和可控时钟,避免日期变化改变政策判断。

建议改造 · 不是原仓库成绩

把原项目变成自己的项目

按顺序完成最小闭环,再增加难度。只把真正实现并测过的部分写进简历;如果声明支持恢复或并发,就补对应的故障实验。

01

把确认变成服务端许可

为取消提案生成 approvalId,绑定用户、订单、参数摘要与过期时间;批准接口使用数据库状态转换。

怎样验收

  • 批准前订单状态不变;允许保存提案与审计记录,其他用户不能批准。
  • 重放和并发批准后只有一条取消业务事件;参数改变必须重新批准。
02

把重试和恢复做完整

用持久任务状态和业务幂等记录追踪取消结果;本地事务内同步保存业务事件,外部服务则按其幂等协议或对账流程处理。

怎样验收

  • 取消提交后、回复发出前故障,重启后可查询本地结果并避免重复取消;外部操作无法确认时进入待核对,禁止盲目重试。
  • 订单已取消、许可过期、模型参数缺失时都返回明确结果。
03

建立中文客服评测集

准备 50–100 条正常、歧义、缺字段、错误身份与政策检索任务;分别做假模型协议测试和真实模型评测。

怎样验收

  • 业务成功以数据库状态判断,同时记录工具选择、参数正确率和未授权动作数。
  • 保留每题 Token、耗时、调用次数与失败原因;性能数字由实际运行产生。

按这个顺序读源码

每读一步,画一条调用关系,写下输入、状态变化和失败出口。无需先把整个仓库读完。

  1. 第 1 步 · 确认版本与测试插件pom.xmlcustomer-support-agent-example/pom.xml
  2. 第 2 步 · 会话 ID 从哪里来CustomerSupportAgentController.javacustomer-support-agent-example/src/main/java/dev/langchain4j/example/CustomerSupportAgentController.java
  3. 第 3 步 · 哪些约束只写在提示词里CustomerSupportAgent.javacustomer-support-agent-example/src/main/java/dev/langchain4j/example/CustomerSupportAgent.java
  4. 第 4 步 · 哪些参数交给模型BookingTools.javacustomer-support-agent-example/src/main/java/dev/langchain4j/example/BookingTools.java
  5. 第 5 步 · 业务状态由谁修改BookingService.javacustomer-support-agent-example/src/main/java/dev/langchain4j/example/booking/BookingService.java
  6. 第 6 步 · 把输出检查改成业务状态检查CustomerSupportAgentIT.javacustomer-support-agent-example/src/test/java/dev/langchain4j/example/CustomerSupportAgentIT.java

准备好回答这些追问

先用自己的实现和实验回答,再对照源码。只背术语,很难解释异常情况。

  1. 为什么取消确认不能只写在SystemMessage里?
  2. 客户端能自行提交sessionId时,如何阻止跨用户记忆混用?
  3. 数据库提交成功后模型请求超时,重试如何不取消两次?
  4. 记忆、业务状态、planner checkpoint分别存什么?
  5. maxResults=1/minScore=0.6根据什么数据调整?
  6. 为什么10个IT存在不等于mvn test执行了它们?

本轮实际验证范围

  • 已固定提交并读取源码;使用 JDK 17.0.20.1 执行 mvn -DskipTests compile,9 个 Java 源文件编译成功。
  • 编译不代表应用已运行。没有配置模型账户,10 个真实模型 IT 未执行,也未验证模型调用、政策回答或业务端到端行为。

源码链接是阅读证据;改造建议是待完成任务。二者都不等于完整系统运行证明。