我把“模型会调用工具”落实为可检查的后端链路
项目将 Agent 的服务端职责拆开:Controller 负责接口契约,应用层负责执行轮次,Registry / Executor 负责工具管理,持久化层负责会话与 trace。
- 接口契约提供
POST /api/agent/chat、工具 Schema 查询和会话读取接口,统一返回 answer、status、steps 与 request ID。 - 工具安全只执行显式注册工具;未知工具、缺失参数、额外参数和类型不符均在服务端拒绝,不使用任意反射调用。
- 失败处理为超时、可重试错误和 iteration limit 定义稳定状态,限制重试次数并保留每次尝试的 trace。
- 数据层设计默认 memory / H2 便于运行;通过 JDBC 切换 MySQL 会话存储,通过 Redis 适配器缓存工具 Schema。
- 验证结果在 JDK 21.0.12 + Maven 3.9.16 下编译通过,4 个测试类共 6 项测试全部通过。