08 - 版本演进 + 教训
按问题 → 方案 → 教训 写, 不是 feature flow. 让你看懂为什么系统长成现在这样.
阶段 1: ES 接通 + 安全边界 (Phase 3-17, 2026-04)
问题
运维不会写 ES DSL, 想用自然语言查 DNS/DHCP 异常.
方案
- Backend 封装 4 个聚合 query API (DNS failure summary / DHCP message summary / 失败 drilldown / top X)
- 安全三旗物理禁止 (
raw_log_scan=false/preview_only=true/execution_enabled=false) - 真后端 ES 用聚合不读 raw 文档
教训
- 没有, 这阶段真凶链路简单, 0 出口补丁
阶段 2: AI 加层 (Phase 32-37, 2026-05)
问题
聚合数字给运维但他还要解释 (“失败率 35.73% 说明啥?”), 想 LLM 把数字翻成自然语言.
方案
- Phase 32: DNS hypothesis reasoner — LLM 真给根因排序 + confidence_delta
- Phase 33: Multi-round planner — LLM 决定第 2/3 round 跑哪几个工具
- Phase 34: Local LLM 主 + DeepSeek 云端 fallback (双源)
- Phase 35: 对话追问 (
follow-upAPI) - Phase 36: Business impact + auto asset extraction (12 业务系统)
- Phase 37: Cross-alert correlation (跨告警关联)
教训
- LLM 会编 (e.g. 输出
upstream_missing 为 0但 tool_trace 真值7338) - 必须加 schema validation 拦 LLM 真乱输出 (Phase 32 hypothesis_reasoner_schema)
- 但这阶段还没真凶根, 真凶在 silent 0 吞 — 留 R10-R28 19 轮后才挖出
阶段 3: 真后端验证 (Phase 49-67, 2026-05 末 → 2026-06 早)
问题
单测 1500+ 过了, 真后端跑出来还是错. 评估时凭印象, 没有真后端真值基础.
方案
- Phase 49: 按线索路径基础 (15 步 deterministic plan + LLM enrich + narrative)
- Phase 56-66: 滚动告警 → AI 报告主路径完整 ship
- Phase 67.A.1-A.6: 真后端 capture/replay pipeline (但被打散成 6 个小切片)
- Phase 67.{H,H’,E,P,P2,Q,R,S}: 8 件出口字面 caveat 补丁
教训 (R10-R28 19 轮血泪)
| 真凶 | R10-R28 真发生 |
|---|---|
| 修出口字面不修源头 | 8 件 phase67 补丁, P0 总数 19 轮持平 |
| Evaluator query 设计漂移 | R25/R26/R27 三轮 3 种 4 endpoint 布局, P0 比较空间不同 |
| 真后端 fixture 0 入库 | R10-R28 19 轮全靠人工 curl + 肉眼对比, 0 累积 |
| Planning agent 局部最优偏置 | 优先选可闭环小切片, 拖延需打破红线的源头 phase |
| LLM 真凶判定凭印象 | 没有 venv 实测 + 源码 grep, 真凶推断错 ≥ 3 次 |
Meta-lesson: 道德约束 (MEMORY 文字) 没用, 必须用 plugin 物理屏障 (Check 4 ≥3 BLOCK) + workflow 脚本 (run_round_evaluation.sh 强制 fixture 入 git).
详见 feedback_bitter_lessons_r10_r37.md 10 条 + phase-archive/phase67-exit-patch-lineage/README.md.
阶段 4: 改源头 vs 出口补丁 (Phase 67 vs Phase 68, 2026-06-11 → 2026-06-12)
问题
R10-R28 19 轮 phase67 8 件出口补丁堆积, 总分 50/80 不涨. 真凶不在 LLM 出口字面.
方案 — 6 件 source-fix lineage
| Phase | 真凶 | 修法 |
|---|---|---|
68.A (commit 6933937) |
_safe_int(None)=0 silent fallback 不区分字段缺失 vs 真零 |
新 _safe_int_required helper (None 返 None + logger.warning), 老 helper 物理保留 |
68.B (commit 9983001) |
capture script 默认 IP 192.168.202.100 vs 真 asset_registry 注册 172.16.1.42 不对齐 |
4 文件字面同步对齐 + 67.A.6 红线 22 钉死 |
68.C (commit 8623c4e) |
_context_window 不识别 incident_window 字段 (只查 window/time_range) |
1 函数 +6/-1 加 incident_window OR fallback |
68.D (commit 78c0b33) |
round-loop reasoner 调用早于 hypothesis builder, partial_report.hypotheses=[] fallback | post-build retry hook (final 真有 hypothesis 再调一次) |
68.E (commit e72cde8) |
_HOSTNAME_RE lookbehind/lookahead 含中文 word char 漏脱真生产域名 (安全 P0) |
2 行 regex 双 ASCII-only + filter-repo 洗 R31 history + 重 capture R34 验真 |
68.F (commit 531541e) |
_dhcp_asset_context 硬编 matched=False + _IP_FINDING_LABELS 字面缺 “失败次数 " 前缀变体 |
2 处真改 (asset_registry lookup 接入 + label 字面同步) |
累积真效果 (R28→R37)
| 指标 | R28 起点 | R37 终点 |
|---|---|---|
| baseline 测试 | 1768 | 1809 (+41) |
| 8 维总分 | 50 | 80 (历史最高) |
| P0 总数 | 3 | 2 |
| 真新 P0 退步 | R10-R28 19 轮 19 件涌入 | R28-R37 9 轮仅 1 件 |
| 安全 P0 真泄漏 | 未审计 | 0 处真清 (filter-repo + 修源头) |
教训
Source-fix 真比 exit-patch 有效. phase67 8 件每件平均贡献 = 0, phase68 6 件每件 = -0.17 P0 + +3.3 总分.
Plugin v0.1.2 source-fix whitelist 真有效: 让 phase68.X ≥3 不被 Check 4 误判 BLOCK.
详见 active-discovery-closeout.md + phase-archive/phase68-source-fix-lineage/README.md.
阶段 5: 按线索能力收口 (Phase 69 A-F, 2026-06-12)
问题
主动告警之外, 运维想自由文本提问 (“上周三 OA 慢”). phase49 后 0 改源真累积 1 年真凶.
方案 — 6 件 source-fix lineage (clue 路径)
| Phase | commit | 真凶 |
|---|---|---|
| 69.A | 78a6601 |
_auto_protocols DNS hint 4 个 + DHCP hint 5 个真窄 (AI 听不懂运维口语) |
| 69.A.1 | 66427e5 |
clue 路径 0 fixture 入库 真没回归基础 |
| 69.B | c65f078 |
_report 顶层不告知 silent fallback open_dataset 真发生 |
| 69.C | 39f3034 |
ENV LIVE_MAX_WINDOW=6h 卡死 + execute_*_tool try/except 吞 Exception |
| 69.D | 2850420 |
ES query timeout 10s + 24h 仍卡老师 “>24h” 真问 |
| 69.E | 7df58ee |
Frontend data_freshness_warning critical banner 真不渲染 (backend 真返但 UI 不消费) |
| 69.F | 2a4df23 |
Frontend BusinessImpactCard.vue slice(0, 5) 真截了 backend 真返的 12 业务系统 |
真效果 (老师 case 1 5/28 huawei-wlan-controller 真凶判定)
| 维度 | phase49 后 | phase69 收口后 |
|---|---|---|
| 真凶域名 | “WPAD 4989 次” (完全错位) | “huawei-wlan-controller 7,160,845 次 NOERROR” (与老师 openclaw 真凶 100% 匹配) |
| 真数据 | 100 sample (silent fallback 2012) | 39,760,343 真 24h 全量 |
| 真返时间 | 87s + 6 个 ES_TIMEOUT | 52s, 0 timeout |
| data_freshness_warning | critical 真告知 silent fallback | None 真精准 (真 ES live) |
教训 (lesson 11 新增)
.pyc cache 陷阱: phase69.A R1 二审真踩坑 — 改 .py 后 backend ts > src mtime, 但进程仍跑 stale .pyc. 必三步:
- kill backend
rm -rf __pycache__- 重启 backend
补强 lesson 6 (改 backend 必重启验 mtime). 详见 MEMORY feedback_pyc_cache_trap_after_src_edit.md.
Planning agent 局部最优偏置真复现: 我 (前轮 planning agent) 真停在 phase69.B 出口透明度 (告知 silent fallback), 老板真质疑 “为什么不能给真答案” → 真凶根 ENV 6h / ES timeout 才真深入. phase69.C/D 修后 case 1 真凶判定从 “WPAD” 改成真 huawei-wlan-controller. 教训 4 真到位: 不能停在最浅修法, 真凶层级深一层就再深入一层.
详见 clue-discovery-closeout.md + phase-archive/phase69-clue-source-fix-lineage/README.md.
阶段 6 (当前): 运维试用决策窗口
状态
两条主线技术阶段全收口:
- 主动发现问题 R37 verdict READY 80/100
- 按线索发现问题 R1 verdict NOT_OVERFIT 79/100
Frontend 高价值字段全消费 (data_freshness_warning 真渲染 + 12 业务系统全展示).
运维试用包就绪 (operator-trial-pack/ 5 文件 + README).
等什么
- 老师 3 天日志真示例 (性能验证 168h 真聚合)
- 真运维 2 周试用反馈 (UI 体验 / 误报率 / 是否每天用)
决策
试用反馈来后:
useful率 > 60% → ticket/IM 集成 (Phase 28)- 集中"DHCP 业务影响看不到” → 起 phase69.G (DHCP business_impact.asset_context)
- 集中"UI 看不懂" → UI 简化轮
- 集中"AI 误报多" → 调阈值 + 改 LLM prompt
Plugin / Workflow 工具链演进
| 时间 | 工具 | 解决问题 |
|---|---|---|
| R29 (2026-06-11) | run_round_evaluation.sh v1 (R29 一键) |
替代人工 curl 4 endpoint, 强制 fixture 入 git |
| R30 (2026-06-11) | run_round_evaluation.sh v2 通用化 (phase auto-discover from git) |
任意 R(N) 复用 |
| R30 | 评估 agent prompt 模板 (YAML schema) | R10-R27 free-form Markdown 评估时漂移 lesson |
| R30+ | Planning agent 二审制度 (3 件亲核) | R30/R31 真凶判定 3 次修正 |
| R28 | plugin v0.1.0 bootstrap | 5 检查骨架 |
| R30 | plugin v0.1.1 — Check 5 self-contained + Check 2 mode-aware | self-contained prompt 必长, 老 ≤150 限制误伤 |
| R31 | plugin v0.1.2 — Check 4 source-fix whitelist (区分 phase67 blacklist vs phase68 whitelist) | phase68.X ≥3 误 BLOCK 救活 |
| R37 收口 | harness 增强 3 件 (MEMORY bitter-lessons + CLAUDE.md + .claude/settings.json SessionStart hook) | 下个 planning agent SessionStart 强制看 lesson |
R10-R37 历史 trend (verbatim)
| R | Phase | P0 总数 | 真新 P0 退步 | 总分 |
|---|---|---|---|---|
| R10 | phase64 起 | 8 | — | 未量化 |
| R13 | phase66ab | 7 | — | — |
| R15 | phase66d2 | 5 | — | — |
| R17 | phase67a2 | 5 | — | — |
| R19 | phase67b | 3 | — | — |
| R20 | phase67d | 2 | — | — |
| R21 | phase67e | 3 | 1 (历史唯一直到 R27) | — |
| R22 | phase67g | 1 | 0 | — |
| R23 | phase67h | 0 | 0 | — |
| R24 | phase67h' | 0 | 0 | 55 |
| R25 | phase67f | 5 (evaluator query 漂移真触发) | 0 | 49 |
| R26 | phase67p | 4 | 0 | 58 |
| R27 | phase67p2 | 5 | 3 (历史第 2 次 ≥3) | 51 |
| R28 | phase67.S | 3 | 0 | 50 |
| R29 | (phase68.B 字面对齐前) | 1 (P0-4 67.A.2 ban list 当场抓) | 0 | unittest 基准 79 |
| R30 | phase68.B 后 | 3 | 0 | 54 |
| R31 | phase68.C 后 | 3 | 1 (B 0 hypothesis + ai_reasoning MISSING) | 60 |
| R32 | phase68.D 后 (ES 抖) | 3 | 0 | 63 |
| R34 | phase68.E 后 | 1 | 0 | 70 (历史最高) |
| R37 | phase68.F 后 | 2 | 0 | 80 (历史最高) |
| R1 (clue 路径) | phase69.A 后 | 4 (P0-a/b/c/d) | — | 79/100 NOT_OVERFIT |
详见 phase-archive/round-evaluations/ 各 R(N) doc.
已知遗留 (按优先级)
高 (运维试用反馈决定起不起)
| 项 | 真现状 | 候选 phase |
|---|---|---|
DHCP business_impact.asset_context.matched=False 持续 R10-R37 28 轮 |
phase68.F 接通了 ai_reasoning.asset_context.matched=True, 但 business_impact 段是另一层装配 |
phase69.G (~15 行 backend) |
| asset_registry yaml 业务清单不够全 | 172.16.1.42 在 resolvers 但不在 business_systems[].server_ips |
phase69.H (~yaml 数据修, 非代码) |
| Frontend 反馈表 (Phase 38 反馈按钮) 实物打印 | 已就位 backend, frontend 部分场景未渲染 | 试用第 1 周必做, 不算 phase |
中 (技术值得做, 但优先级低)
| 项 | 真现状 |
|---|---|
| D dhcp_multiround 1 round early stop (R10-R37 17+ 轮持续) | dhcp_multiround _should_stop 阈值过松, model planner round 2 永远不触发. 留 phase70.X (大切片 ~200-300 行新 dhcp_round_planner) |
| 168h (7 天) 真聚合性能未真验 | Phase 69.D 加 168h hard cap, 但老师真问 7 天可能超 frontend axios 180s timeout. 留试用反馈决 phase70.X (DSL 优化 / 分块聚合 / 14 tool 并发) |
| 反馈通道 backend 已就位 (phase38), frontend 真渲染未全做 | AlertFeedbackButtons.vue 部分页面 ok, 但 clue 路径不显示反馈按钮. 留 phase70.X |
低 (本质局限, 不该修)
| 项 | 真现状 |
|---|---|
| LLM 非确定性 — C endpoint rank1 R30-R37 7 轮 5 翻 (71% 翻车率) | LLM 本质问题. 修需引入集成投票 (跑 N 次 LLM 投票最高), 留 R40+ 评估 |
| LLM 真返字面偶发漂移 (narrative 段) | LLM 本质问题. 试用前明示运维 “narrative 是参考不是确定” |
历史 (已收口, 不要再起 phase)
| 项 | 状态 |
|---|---|
| phase67.{H,H’,E,P,P2,Q,R,S} 8 件出口字面 caveat | 永久停手. plugin v0.1.2 Check 4 BLOCK |
R31 真泄漏 prod.authentication.deepinstinctweb.com 3 处 |
filter-repo 已洗 git history, 0 处真留, force push 远程已盖 |
转交清单 (毕业 / 责任转交时)
学生 → 接手人 必交付
| 类别 | 真清单 |
|---|---|
| 代码访问 | GitLab repo 真权限 + branch 真权限 |
| .env.local 真值 | 单独安全渠道 (微信不算, U 盘 OK), 含 DeepSeek key + asset_registry 真业务字典 |
| backend / frontend 真部署机 SSH | 真机 root 或 sudo 权限 |
| ES 真访问 | VPN 真账号 + ES 真 url + 真 cluster 健康检查命令 |
| 本地 LLM 真访问 | 真 url + 真 model 名 + 真联系人 (本地 LLM 部署管理员) |
| 文档全套 | docs/agent-handoff/** + docs/whitepaper/** + CLAUDE.md + MEMORY |
| 真历史决策 | 本 doc (08-version-history) + feedback_bitter_lessons_r10_r37.md |
| Plugin 维护权 | .claude-plugins/monitor-phase-workflow/ 真改 + 验 SOP |
| 真后端 fixture | test_backup/fixtures_real_backend*/ 40+ 个 R 轮真值 |
转交流程建议
- 接手人陪跑 1 个真完整 phase (按 07-extension-guide §改 backend 6 步): 1-2 周
- 接手人单独跑 1 轮 R(N) 评估: 1 天
- 接手人单独排 1 个真生产故障 (用 06-troubleshooting): 1 次
- 学生在场旁观, 不干预: 1 周
- 接手人通过 → 学生退场, 仍保留 24 小时 on-call 答疑 (建议 1 个月)
致谢 (项目内部价值标注, 非排序)
- R10-R28 期间 19 轮 phase67 出口补丁堆积 — 真血泪教训, 反例归档
- R28-R37 期间 6 件 phase68 source-fix — 真改源头, 总分 50→80
- R1 期间 6 件 phase69 — 按线索能力收口
- Plugin v0.1.2 设计 — 物理屏障 vs 道德约束的真胜利
- 老师 case 1/2 真示例 — 让 phase69 真凶判定有真验证
- 评估 agent 制度 + planning 二审 — 3 次真凶判定修正救命
本白皮书 8 章 (whitepaper README 入口) R37 收口写于 2026-06-12.
作者: [学生姓名] (项目作者)
未来维护: 见 README.md §维护责任表
最后更新: 2026-06-12 phase69.F + operator-trial-pack 收口后
如有任何不清楚的, 直接 grep 关键词到对应章节, 或问 planning agent.