Files
SuperBizAgent-java/mvp/disscus/plan.md
T

57 lines
4.0 KiB
Markdown

结合你在前几轮对话中梳理出的“过度设计”痛点,既然你已经决定回归单 Agent(ReAct)+ 强 Harness 架构,接下来你需要做一次彻底的“架构物理重构”。
以下是为你量身定制的5步落地行动指南,按优先级从高到低执行:
第一步:链路合并,砍掉“伪 Graph”节点
目标:把被拆散的推理逻辑还给单一的 ReAct 循环。
删除节点:直接在 Graph/状态机中抹掉 Planner、Executor、Composer 以及串联它们的边。
合并为单一 Agent:创建一个 DiagnosisAgent。在它的 System Prompt 中明确:“你需要自行规划排查路径,调用工具获取证据,并在证据充分后输出最终的结构化诊断报告。”
保留机制:该 Agent 内部运行一个带最大步数限制的 While 循环(如 max_iterations=10),防止死循环。
第二步:实施“上下文卸载”与“工具清洗”(解决7次调用膨胀问题)
目标:确保单 Agent 在多轮工具调用后,上下文依然干净,从源头切断幻觉。
工具输出清洗(RTK 机制):改造你的所有工具(如 queryLogs, queryDB)。在工具的 Callback 层加代码,将原始的大段返回结果(如 1000 行日志)强制过滤、聚合,只把最核心的 5-10 行 ERROR 或统计指标返回给 Agent。
上下文卸载:如果某些原始数据必须保留,在工具返回时,将全量数据写入本地文件(如 refs/log_001.md),上下文里只注入一行:[发现5个504错误,详见 refs/log_001.md]。
第三步:下沉确定性逻辑,用代码替代 LLM 节点
目标:将你之前用 Gatekeeper 和 VerifiedInput 做的事,降级为零 LLM 调用的代码拦截器。
前置拦截(Pre-Tool Hook):Agent 发起工具调用时,Harness 代码用 JSON Schema 校验参数格式。不合法直接报错打回,不执行工具。
后置断言(Post-Tool Hook):Agent 输出最终诊断报告时,代码层强制校验报告中引用的 evidence_id 和 raw_path 是否真实存在于历史记录或文件系统中。不合法直接拒绝输出,发回重试。
第四步:锁死输出契约
目标:防止 Executor 过度输出和发散。
在 System Prompt 中强制规定 Agent 的中间思考步和最终输出步必须符合严格的 JSON 结构。
例如,中间步必须是 {"thought": "<不超过50字>", "action": "queryLogs", "parameters": {...}}。Harness 代码检查字数,超长直接打回。
第五步:剥离异步验证(保留你最初的“防幻觉”初衷)
目标:在不增加主链路复杂度的前提下,保留交叉验证能力。
主 ReAct Agent 输出报告后,不要在主 Graph 里串行接一个 Verifier 节点。
改为异步触发一个轻量级 LLM(或小模型),只传入“压缩后的证据摘要 + 草稿结论”。让它判断时间线与逻辑是否一致。如果不一致,在最终输出上加“低置信度警告”;如果一致,直接放行。
总结:你的重构后架构全景图
重构后,你的代码结构应该极其清爽,大致如下:
[用户输入]
│
▼
[Diagnosis ReAct Agent] (唯一的 LLM 推理节点,自带规划、执行、总结)
│
├── Tool: queryLogs
│ └── [Harness 代码]: 过滤 INFO,提取 ERROR,写入 refs,返回摘要
├── Tool: queryMetrics
│ └── [Harness 代码]: 聚合统计值,返回 3 行核心指标
│
▼ (Agent 输出最终 JSON 报告)
[Output Schema Linter] (纯代码层,0 LLM)
│
├─ 校验失败 ──> 返回错误给 [Agent] 重新生成
│
▼ (校验通过)
[Async Verifier] (异步轻量 LLM,只做时间线/逻辑一致性校验)
│
▼
[最终输出 / 带警告输出]
现在你应该做的第一件事:打开你的代码,把主链路上除 Diagnosis Agent 以外的所有 LLM 编排节点全部注释掉,然后按照上面的结构,给工具加上 Pre-Tool 和 Post-Tool 的代码拦截器。把精力从“画 Graph”转移到“写工具清洗代码”上。