JAVA → 商户查询 → AGENT
沿着一个小业务,把每一步做清楚
先写一个查询“测试茶铺”的接口,再加缓存、只读工具和 FAQ。已有文章负责解释原理,本路线把练习、失败情况和验收串起来。
先固定同一组数据与边界
租户 A 只能取得商户 1001:“测试茶铺”,09:00–18:00;B 只能取得 1002,其余字段未设定。FAQ A1 只证明 1001 支持自取,不含停车或配送依据。9999 在教学夹具中不存在。
服务端按可信身份限定租户范围。A 查询 1002 或 9999,对外都返回“商户不存在或当前身份无权访问”,不通过错误信息泄漏存在性。第十题单独覆盖今日工具 16:00 与旧资料 18:00 的冲突,并预先规定该题优先采用成功获取的今日工具结果。
不接真实订单或支付。WireMock 的写入响应丢失只属于隔离的虚构失败实验。
- STEP 01
Java 基础:筛出商户,再排好顺序
用集合保存虚构商户,用泛型约束输入输出,用 Stream 筛选和排序。先把纯 Java 练习写清楚。
这一阶段交什么:交付筛选规则、稳定排序结果与边界断言。
- STEP 02
REST:提供一个只读查询接口
约定正常、缺参、非法参数、不可访问和服务错误的响应。身份从服务端取得,模型只提供商户编号。
这一阶段交什么:交付请求/响应契约和逐分支用例。
- STEP 03
Redis:先读缓存,再观察三个失败窗口
理解命中与回填,再记录普通 SET 丢失 TTL、旧读回填和删缓存失败后的恢复。实验中的版本只是观察标签。
这一阶段交什么:交付事件顺序、数据库/缓存版本和 TTL 的实际记录。
- STEP 04
让接口出错时也能解释清楚
分开判断进程存活、是否接流量和业务降级。把单次超时与总预算分开,再让真正客户端接受故障测试。
这一阶段交什么:交付健康检查判断表、预算表和精确请求次数。
- STEP 05
只读 Tool Calling:由应用决定能否执行
模型提出工具与参数,应用校验、鉴权后才执行。先用固定请求测试执行器,再加入模型选择。
这一阶段交什么:交付真实调用路径、可信身份和授权断言。
- STEP 06
FAQ RAG:只回答证据支持的部分
比较正常命中、空检索与无关检索,核对候选片段和实际传入模型的上下文。A1 仅证明自取。
这一阶段交什么:交付逐项结论与证据映射;无停车依据时保留未知。
- STEP 07
评测、安全与可观测性:逐题看实际发生了什么
用十道固定题分别检查工具、检索/上下文和回答。越权泄漏或捏造工具成功直接失败。
这一阶段交什么:交付逐题记录、人工复核和失败分类;未测数字留空。
已有基础后,把边界逐项验清楚
33 个延伸练习分别放在对应的原文章中。先选当前要解决的问题,阅读前置知识,写下预期,再留下自己的实际记录。来源核查日期为 2026.10.12–20,版本和限制详见各节;这些练习均未运行。
缓存补充实验:把旧值出现的顺序记下来
让商户工具经过真实的授权服务
只读商户 REST:写清每一种响应
从商户只读查询开始,逐步接入 FAQ
只用 FAQ 真正提供的依据回答
商户 Agent:十题评测与空白运行记录
格式正确以后,还要核对每条结论
先跑十道固定题,再看哪里失败
完成 REST 与缓存基础后,做两组独立验收
先追踪事务代理、传播和连接,再学习事件与恢复;缓存部分先规定键的身份,再观察同键并发。使用临时实验数据,分别检查数据库状态、实际加载次数和失败窗口。
事务与事件:从代理入口到崩溃恢复 ↗
依次验证回滚、连接占用、事件阶段和持久化恢复。
缓存:先定义同一个键,再验证并发加载 ↗
用租户、参数等价性和受控并发,检查缓存的适用范围。
版本先看自己的项目
来源页的 Spring AI 2.0.1、Boot 4.1.1 是原有练习的资料版本,不是整条商户 Agent 路线已验证的兼容组合;Resilience4j 2.2.0 的集成指南面向 Boot 2/3,不能直接拼成 Boot 4 方案。请按自己实际使用的 Java 项目版本核对。
每篇练习都附目标、前置、步骤、验收、原始来源与核查日期。开始实现时,先保存自己的 JDK、依赖树、客户端及运行配置,再按对应版本核查 API。
原有缓存版本下界与故障恢复练习仍未实现或运行;删缓存、延迟双删或恢复任务都不能直接当成强一致保证。独立实测专题不会替你升级项目依赖。
模型基础单独学
想理解模型如何训练,再进入 FashionMNIST 练习:张量、数据加载、梯度、优化、保存与重载。它属于“训练与研究”,不作为这条 Java Agent 路线的前置。