- 创建 devflow 项目档案(brief/evidence/decisions/acceptance) - 更新 devflow/index.md 索引 - 移动 OpenSpec 到 archive
3.0 KiB
3.0 KiB
会话存储 — 决策记录
Question Pool
术语维度
| # | 问题 | 类型 | 状态 |
|---|---|---|---|
| Q1 | AgentLoggingHook 如何获得 Repository 访问能力? | evidence-driven | ✅ 已查证 |
| Q2 | AiOpsService 当前是否使用了 AgentLoggingHook? | evidence-driven | ✅ 已查证 |
边界维度
| # | 问题 | 类型 | 状态 |
|---|---|---|---|
| Q3 | Hook 中写 DB 是否同步?要不要一步到位做异步? | user-interview | ✅ 已确认 |
| Q4 | AiOpsService 的 Supervisor 步骤是否单独记录? | user-interview | ✅ 已确认 |
验收维度
| # | 问题 | 类型 | 状态 |
|---|---|---|---|
| Q5 | tool_invocation 的 output_preview 截断多长合适? | 默认 | 500 字符 |
技术实现维度
| # | 问题 | 类型 | 状态 |
|---|---|---|---|
| Q6 | LookupKnowledgeTool 如何获取当前 sessionId 和 stepId? | 待解决 | ⚠️ 未确认 |
Evidence-Driven 查证
E1: AgentLoggingHook 创建方式
证据:ChatService 第 180 行 .hooks(new AgentLoggingHook()) — 直接 new 创建,非 Spring 管理。
结论:Hook 不是 Spring Bean,无法注入 Repository。AiOpsService 的 Planner/Executor 也没有加 Hook。
影响:需要改造为 @Component + 构造注入,并在 AiOpsService 中补齐。
E2: 项目异步基础设施
证据:全局搜索 @Async、@EnableAsync、CompletableFuture、TaskExecutor — 均无匹配。
结论:项目没有异步执行基础设施。
影响:MVP 阶段 Hook 内同步写 DB,后续再优化。
User-Interview 确认
U1: Hook 改造方式
问题:AgentLoggingHook 怎样获得 Repository 访问能力?
选项:
- 改造为 Spring Bean(@Component + 构造注入)
- 保持 POJO,从外部传 Repository
用户答复:改为 Hook(Spring Bean)
确认状态:✅ 已确认
U2: AiOpsService 记录粒度
问题:Supervisor 内部的步骤记录范围?
选项:
- 只记子 Agent(Planner/Executor)步骤
- 全量记录(含 Supervisor)
用户答复:接受建议,只记子 Agent
确认状态:✅ 已确认
开放问题
O1: LookupKnowledgeTool 获取 sessionId
LookupKnowledgeTool 是 @Component,通过 Spring AI 的 @Tool 注解暴露给 Agent。它不直接参与 Agent Hook 调用链,无法直接从 RunnableConfig 读取 sessionId。
可能的方案:
- ThreadLocal — ChatService/AiOpsService 在执行前设置当前 sessionId 到 ThreadLocal,工具中读取。简单,但需注意清理。
- 从 agent_step 反查 — 工具调用后根据时间戳和 session 关联查找最近的 step。不准确。
- RequestContextHolder — 利用 Spring 的请求上下文。仅限 Web 请求上下文有效。
建议方案:ThreadLocal。在 ChatService/AiOpsService 执行入口设置,AgentLoggingHook 和 LookupKnowledgeTool 都从 ThreadLocal 读取。
用户确认:✅ 同意 ThreadLocal 方案