- 新增诊断会话(diagnosis_session/agent_step/tool_invocation)三表 - AgentLoggingHook 持久化 agent_step,记录决策链和耗时 - LookupKnowledgeTool 写入 tool_invocation,记录L0/L1检索质量 - TokenTrackingChatModel 捕获真实token用量 - Chat接口支持意图路由:简单问题单Agent,复杂问题多Agent(Planner+Executor) - Prompt外置到 src/main/resources/prompts/ - 删除旧 diagnosis_record 表及相关文件 - 新增SessionContextHolder(ThreadLocal传递sessionId) - QuestionComplexity 复杂度判断工具 - 测试覆盖三张新表的Repository
4.1 KiB
4.1 KiB
会话存储 — 任务拆解
切片 1:Flyway 迁移脚本
文件: src/main/resources/db/migration/V005__create_session_storage.sql
内容:创建 diagnosis_session、agent_step、tool_invocation 三张表
验收标准:
- 三张表均通过 Flyway 创建成功
- 字段类型、索引、JSON 列定义正确
- 回滚脚本可选(不做强制要求)
切片 2:JPA 实体类
文件:
src/main/java/com/superbiz/agent/domain/entity/DiagnosisSession.javasrc/main/java/com/superbiz/agent/domain/entity/AgentStep.javasrc/main/java/com/superbiz/agent/domain/entity/ToolInvocation.java
内容:三个 Entity,使用 @JdbcTypeCode(SqlTypes.JSON) 映射 JSON 列
验收标准:
- 编译通过,无 JPA 映射错误
- Entity 字段与 DDL 对齐
- Lombok 注解完整
切片 3:JPA Repository
文件:
src/main/java/com/superbiz/agent/repository/DiagnosisSessionRepository.javasrc/main/java/com/superbiz/agent/repository/AgentStepRepository.javasrc/main/java/com/superbiz/agent/repository/ToolInvocationRepository.java
内容:三个 Repository,含自定义查询方法
验收标准:
- 编译通过
- 自定义方法命名正确
- 可在 Spring 中自动注入
切片 4:SessionContextHolder 工具类
文件: src/main/java/com/superbiz/agent/util/SessionContextHolder.java
内容:基于 ThreadLocal 的 sessionId 传递工具
public class SessionContextHolder {
private static final ThreadLocal<String> SESSION_ID = new ThreadLocal<>();
public static void setSessionId(String sessionId) { SESSION_ID.set(sessionId); }
public static String getSessionId() { return SESSION_ID.get(); }
public static void clear() { SESSION_ID.remove(); }
}
验收标准:
- 编译通过
- set/get/clear 在同一线程内正常工作
切片 5:AgentLoggingHook 改造为 Spring Bean
文件: src/main/java/com/superbiz/agent/hook/AgentLoggingHook.java
内容:
- 加 @Component 注解
- 构造注入 AgentStepRepository
- beforeModel 创建 agent_step
- afterModel 更新 agent_step
- 从 RunnableConfig 读取 sessionId
验收标准:
- 编译通过
- beforeModel 写入 agent_step 到 DB
- afterModel 更新正确行
- 原日志行为不变
切片 6:ChatService 集成
文件: src/main/java/com/superbiz/agent/service/ChatService.java
内容:
- 注入 DiagnosisSessionRepository
- executeChat 前后创建/更新 diagnosis_session
- 通过 RunnableConfig 传递 sessionId
验收标准:
- 每次 executeChat 产生一条 diagnosis_session 记录
- sessionId 可被 Hook 读取
- status、duration 等汇总指标正确
切片 7:AiOpsService 集成
文件: src/main/java/com/superbiz/agent/service/AiOpsService.java
内容:
- 注入 DiagnosisSessionRepository 和 AgentLoggingHook
- executeAiOpsAnalysis 前后创建/更新 diagnosis_session
- Planner 和 Executor 各加 AgentLoggingHook
- Supervisor 不加 Hook
验收标准:
- 每次 executeAiOpsAnalysis 产生一条 diagnosis_session 记录
- Planner 执行产生 agent_step 记录
- Executor 执行产生 agent_step 记录
- Supervisor 不产生 agent_step 记录
切片 8:LookupKnowledgeTool 集成
文件: src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java
内容:
- 注入 ToolInvocationRepository
- 执行后写入 tool_invocation 记录
- 记录 L0/L1 检索质量
验收标准:
- 每次 lookup_knowledge 调用写入一条 tool_invocation
- retrieval_layer / l0_match_count 等字段正确
- 异常场景 success=false
切片 9:测试
文件:
src/test/java/com/superbiz/agent/repository/DiagnosisSessionRepositoryTest.javasrc/test/java/com/superbiz/agent/repository/AgentStepRepositoryTest.javasrc/test/java/com/superbiz/agent/repository/ToolInvocationRepositoryTest.java
内容:
- Repository 单元测试(CRUD + 自定义查询)
- 集成测试需要运行环境(后续补充)
验收标准:
- Repository 测试通过