5.6 KiB
5.6 KiB
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_textevidence。 - 新增 Evidence Gap Extractor / Retry Prepare Node,仅处理关键
no_evidence/indirect_supportfacts。 - 新增 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_supportfacts,与阶段 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 输入说明,避免旧生产路径提前不兼容。