Files
SuperBizAgent-java/openspec/changes/archive/2026-07-17-chat-diagnosis-stategraph-real-nodes/proposal.md
T

83 lines
5.6 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.
# Chat Diagnosis StateGraph Real Nodes
## Why
阶段 1 已提供可编译的 StateGraph 骨架和 35 个 Fake Node 路由测试,但所有 action ports 仍是测试脚本,尚不能调用现有 ReactAgent、Executor Gatekeeper 或构造安全的 Verifier/Composer 输入。阶段 2 需要把现有 Agent 协议和确定性服务接到 Graph ports,同时保持 ChatService 生产入口仍走旧链路,避免把真实 Node 接入与生产切换混成一个不可回滚阶段。
## What Changes
- 新增 `DiagnosisAgentInvoker` 及 ReactAgent adapter,所有 Agent Node 显式传递 `RunnableConfig`。
- 新增 Planner、Executor、Verifier、Composer Node Adapters 和可注入失败分类器。
- 抽取 Executor/Verifier/Composer 共享解析组件,旧 Hook/ChatService 委托它们,避免复制协议逻辑。
- 新增显式 Gatekeeper Node,调用 `ExecutorGatekeeperService.validateRun` 并 fail-closed 标准化状态。
- 新增 Verified Input Builder,只投影 Gatekeeper passed bindings 对应的 claims 与 `matched_text` evidence。
- 新增 Evidence Gap Extractor / Retry Prepare Node,仅处理关键 `no_evidence` / `indirect_support` facts。
- 新增 Composer Safe Input Builder 和两类固定 Fallback Node 表达。
- 修正阶段 1 Router:evidence retry guard 必须要求关键 evidence gap。
- 新增 Node 契约和真实 CompiledGraph 集成测试,并保留旧 Sequential/Hook/Gatekeeper 回归。
本 change 不切换 ChatService 到 StateGraph,不修改 DB/Trace API,也不删除旧 Hook/Sequential 结构。
## Capabilities
### New Capabilities
- `chat-diagnosis-stategraph-real-nodes`:提供真实 Agent/Java Node adapters、可信输入投影、关键证据补查上下文和安全 Fallback。
### Modified Capabilities
- `chat-diagnosis-stategraph-routing-skeleton`:将 LOW_CONFID evidence retry guard 收紧为仅接受 `is_critical=true` 的 `no_evidence` 或 `indirect_support` facts,与阶段 0 冻结基线一致。
## Scope
### In Scope
- `com.superbiz.agent.graph.diagnosis` 下的 Agent adapters、Gatekeeper、Verified Input、Evidence Retry、Composer Input 和 Fallback。
- 可被旧 Hook/ChatService 与新 Nodes 共用的输出解析/安全渲染组件。
- 旧 Hook/ChatService 的行为保持型委托重构。
- `DiagnosisGraphRouter` 的 critical gap guard 修正。
- Node 单元测试、真实 CompiledGraph adapter tests、旧路径 focused regressions。
### Out of Scope
- 将 `ChatService.executeChatComplex` 替换为 Graph invocation。
- 修改 Agent 基础 Prompt 业务语义或输出协议。
- 移除 `VerifierInputHook` / `VerifierContextHolder` / SequentialAgent。
- Flyway、DiagnosisRun orchestration trace 字段、Trace DTO/API。
- 最终全量 Graph 测试体系替换。
- Maven E2E、`logs/` 和数据库核验。
## Context Constraints
- 阶段 0/1 archives 是执行基线;Node 不得改变条件边和计数所有权。
- Graph Verifier 只接收 `verified_executor_output`、`verified_evidence`、gatekeeper audit/ceiling、query 和 retry context,不接收完整 tool trace 或 Executor raw text。
- Gatekeeper validation 使用当前 `runId`,缺失/未知/异常一律 REJECT。
- Gatekeeper raw result 与 normalized status 分开保存。
- Verifier execution status、model verdict 和 effective verdict 分离;status 永远不写进 verdict。
- Planner/Verifier/Composer retry 输入由相同 state 白名单投影构造,技术 retry 不重跑前序节点。
- Executor 不重试;合法 no-evidence 仍为 COMPLETED。
- Evidence Retry Context 保留 prior verified output/evidence、关键 gaps、completed query refs 和固定约束;Java 不合并 claim 文本。
- 旧 Sequential path 在阶段 3 前继续工作;共享解析器重构必须通过旧 focused tests。
- 本阶段不修改 `/api/chat`、DB 或当前运行路由。
## Acceptance
- ReactAgent invoker 透传输入与 RunnableConfig,现有 Agent Hook/ToolCallback 可继续工作。
- Planner 合法 JSON 为 COMPLETED;非法 JSON/结构为 INVALID_OUTPUT;临时失败与不可重试失败分开。
- Executor 合法 `executor_evidence_v2`(包括 no-evidence)为 COMPLETED;非法结构、工具阻断、其他失败正确映射且不重试。
- Gatekeeper Node 每轮只调用一次 `validateRun`,unknown/error fail closed。
- PASS 与可继续 LOW_CONFID 都经过 Verified Input Builder;失败 binding、未引用工具结果和 raw Executor text 不进入 Verifier。
- Verifier input 只有白名单字段;输出分离 status/model/effective verdict,ceiling 正确限制 PASS。
- Verifier/Composer technical retry 使用相同序列化输入。
- Evidence retry 只从关键 gap 生成,包含 prior verified data/completed refs/约束,最多一次。
- 第二轮 Executor 输入明确要求增量查询和完整 `executor_evidence_v2` 快照,不由 Java 合并 claims。
- Pre-verification Fallback 不输出 Executor claim;post-verification Composer fallback 只使用 allowed material。
- 新 Node/Graph tests 和旧路径 focused regressions 通过;不运行 Maven E2E。
## Risks
- 共享解析器抽取可能改变旧 Sequential 行为;旧 ChatService/Hook tests 必须同批通过。
- Gatekeeper checked binding 与 claim binding 关联错误可能泄漏失败 evidence;使用 claim_id + invocation/tool/path 精确匹配并测试 mixed binding。
- 异常分类依赖 cause/message;未知异常默认不可重试或 FAILED,安全优先。
- Prompt 当前仍描述旧 Hook payload;本阶段只验证 Node input contract,阶段 3 在生产切换时同步 Verifier Prompt 输入说明,避免旧生产路径提前不兼容。