Files
SuperBizAgent-java/openspec/changes/session-storage/tasks.md
T
zhuyongxin 0d9cce75f9 feat(session): 会话存储体系实现 & Chat多Agent路由
- 新增诊断会话(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
2026-06-26 16:22:05 +08:00

152 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 会话存储 — 任务拆解
## 切片 1:Flyway 迁移脚本
**文件**: `src/main/resources/db/migration/V005__create_session_storage.sql`
**内容**:创建 diagnosis_session、agent_step、tool_invocation 三张表
**验收标准**:
- [x] 三张表均通过 Flyway 创建成功
- [x] 字段类型、索引、JSON 列定义正确
- [x] 回滚脚本可选(不做强制要求)
---
## 切片 2:JPA 实体类
**文件**:
- `src/main/java/com/superbiz/agent/domain/entity/DiagnosisSession.java`
- `src/main/java/com/superbiz/agent/domain/entity/AgentStep.java`
- `src/main/java/com/superbiz/agent/domain/entity/ToolInvocation.java`
**内容**:三个 Entity,使用 @JdbcTypeCode(SqlTypes.JSON) 映射 JSON 列
**验收标准**:
- [x] 编译通过,无 JPA 映射错误
- [x] Entity 字段与 DDL 对齐
- [x] Lombok 注解完整
---
## 切片 3:JPA Repository
**文件**:
- `src/main/java/com/superbiz/agent/repository/DiagnosisSessionRepository.java`
- `src/main/java/com/superbiz/agent/repository/AgentStepRepository.java`
- `src/main/java/com/superbiz/agent/repository/ToolInvocationRepository.java`
**内容**:三个 Repository,含自定义查询方法
**验收标准**:
- [x] 编译通过
- [x] 自定义方法命名正确
- [x] 可在 Spring 中自动注入
---
## 切片 4:SessionContextHolder 工具类
**文件**: `src/main/java/com/superbiz/agent/util/SessionContextHolder.java`
**内容**:基于 ThreadLocal 的 sessionId 传递工具
```java
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(); }
}
```
**验收标准**:
- [x] 编译通过
- [x] 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
**验收标准**:
- [x] 编译通过
- [x] beforeModel 写入 agent_step 到 DB
- [x] afterModel 更新正确行
- [x] 原日志行为不变
---
## 切片 6:ChatService 集成
**文件**: `src/main/java/com/superbiz/agent/service/ChatService.java`
**内容**:
- 注入 DiagnosisSessionRepository
- executeChat 前后创建/更新 diagnosis_session
- 通过 RunnableConfig 传递 sessionId
**验收标准**:
- [x] 每次 executeChat 产生一条 diagnosis_session 记录
- [x] sessionId 可被 Hook 读取
- [x] status、duration 等汇总指标正确
---
## 切片 7:AiOpsService 集成
**文件**: `src/main/java/com/superbiz/agent/service/AiOpsService.java`
**内容**:
- 注入 DiagnosisSessionRepository 和 AgentLoggingHook
- executeAiOpsAnalysis 前后创建/更新 diagnosis_session
- Planner 和 Executor 各加 AgentLoggingHook
- Supervisor 不加 Hook
**验收标准**:
- [x] 每次 executeAiOpsAnalysis 产生一条 diagnosis_session 记录
- [x] Planner 执行产生 agent_step 记录
- [x] Executor 执行产生 agent_step 记录
- [x] Supervisor 不产生 agent_step 记录
---
## 切片 8:LookupKnowledgeTool 集成
**文件**: `src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java`
**内容**:
- 注入 ToolInvocationRepository
- 执行后写入 tool_invocation 记录
- 记录 L0/L1 检索质量
**验收标准**:
- [x] 每次 lookup_knowledge 调用写入一条 tool_invocation
- [x] retrieval_layer / l0_match_count 等字段正确
- [x] 异常场景 success=false
---
## 切片 9:测试
**文件**:
- `src/test/java/com/superbiz/agent/repository/DiagnosisSessionRepositoryTest.java`
- `src/test/java/com/superbiz/agent/repository/AgentStepRepositoryTest.java`
- `src/test/java/com/superbiz/agent/repository/ToolInvocationRepositoryTest.java`
**内容**:
- Repository 单元测试(CRUD + 自定义查询)
- 集成测试需要运行环境(后续补充)
**验收标准**:
- [x] Repository 测试通过