muse-agent-example/docs/2026-07-16-批9c-收官与优化方案.md

101 lines
20 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.

# 批9c 收官状态 + 下一步优化方案(2026-07-16 晚,compact 恢复锚点)
> 本文档=compact 后接续工作的详细锚点。概览见 README §九「批9c」条目;本文档给可执行细节。
> 任务完成后按仓库约定蒸馏进 README §九 并删本文档。
## 进展快照(2026-07-17 凌晨,最新——compact 恢复优先读这节)
- **item4 额度系统**:✅ 已实现+主代理亲验+**已提交 `9a513e7`**(chat_governed 统一治理,五书降级链上收,账本 example_llm_quota)。
- **范式卡去重(回溯聚类)**:recluster 子命令已实现+亲验(连接三段/贪心最近母卡/软删可逆/dry-run 门控)。**combat 已放量:886→770(并 116,缩减 13%)**,完整性/可逆性/质量四项亲验通过(116 输家软删+116 嵌入软删+83 母卡带回溯审计,被并卡全文留档可回滚)。**其余四型(emotion/craft/scene_pattern/trope)后台放量中**(/tmp/muse-recluster-rest.log,任务 bl8fwgyjc,受额度系统自动跨窗,约 5550 次判定、跑几小时)。真实归并率 ~13%(非预想 50%,创始人已知情拍板"全量 0.75")。cards() 前向修复(SIM_MERGE 0.85→0.80、0.75+ 均送判定)已随附。
- **升格卡改造**:4 决定已拍(①里程碑=结构化对象 章/台阶/周期 ②补齐=五型全补 ③character 一起改 ④存量迁移=人工精确化;+主代理定 演变概括独立字段),记入 `docs/2026-07-16-升格卡改造设计.md` §十。fable5 已实现**前向代码**+主代理亲验:6 个 schema yaml(演变历程 `[detection,extraction]`/演变概括·前身·后继 `true`/character 成长弧线回归"未来计划")、parse_upgrade.py(里程碑对象合并去重按真实章号+撤销靠 `_win` 键+当前态干净纪律+语义判重默认关)、迁移脚本 migrate_upgrade_windows.py(**确认只读零写库**)、read-context/detect SKILL.md 补说明。
- **进度(截 2026-07-17 06:00)**:范式卡去重 ✅ 五型全放量完成 **7045→6327(并 718 / ~10%)** 已提交 `9c87f0d`(五型均自洽可逆);升格卡前向代码 ✅ 已提交 `1786035`、seed 已重跑灌合同(6 型合同均含演变历程,亲验)、`type` 键兼容已核 OK。
- **独立审查(opus 对抗复核,2026-07-17)**:无阻断问题(软删/可逆/连接三段/额度不绕过/契约 全部独立复核成立);揪出并修复 2 真 bug(提交 `46704ee`)——① recluster `_absorb` 用输家书名覆写实例跨书归属(已污染 30 条/14 母卡,**已从回溯归并审计确定性还原、复验 0 残留**);② 迁移章号正则裸"N章"误抓"隔3章"数量词(迁移未真跑、无数据影响,已修+11 用例验证)。**步骤3 语义判重启用前需处理**:`semantic_dedup` 在持窗级 DB 连接期发 embed+M3(非三段式,靠 keepalives),开启前改三段或确认无碍。轻微项(`_win` 键入 payload 噪声、里程碑按台阶去重边界)已记、暂缓。
- **升格步骤2 方向已变(数据驱动,2026-07-17)——迁移否决、改重抽**:迁移低价值已弃(只清 character/relation 的 [窗N]、大头花在过度抽取的人物噪声卡[苏铭561/李锋527条]、且**根本不碰 item/power_system 机甲成长**——那才是创始人的目标"生物机甲4→7级")。核心解药=**用新提示词重抽**。(全库分布:2260 升格卡里 75% 无成长条目,极端过度抽取仅 ~17 张人物卡。)
- **升格重抽·小样验证 ✅(2026-07-17,零落库/6 调用/$0.07,主代理核实卡6223 未动、全库 0 带演变历程)**:新提示词能为力量体系抽出**干净逐级成长线**——生物机甲 IV代→伪V代→真V代 9 条里程碑、全真实章号、生命周期标对、当前态字段干净;远优于老卡(老卡无演变历程字段、成长史塞在戏剧作用/跨体系换算成流水)。方向**成、值得放全量**。
- **验证暴露 3 个洞(全量前必补)**:① **[最关键] 命名脆→成长线静默断**:新提示词给体系起了对不上正文的名("联邦生物机甲体系")→机械预扫认不出→更新路径不触发→整条线零里程碑;**解药=开语义判重(P1,默认关)**。② **登场里程碑易丢**:首现走"新名字"路径、倾向写当前态而非建"登场"里程碑。③ **单位事件串到体系卡+台阶偏长**:把某台具体机甲的事记到了体系卡(该归各自机甲卡)。
- **✅ 创始人拍板路径(2026-07-17):先补 3 洞 → 再零落库小样确认补洞效果 → 才放全量重抽**。补洞=改 `parse_upgrade.py` observe/update 提示词(治②③)+ 开语义判重①(需先把升格卡 embed 落库 + 先把 `semantic_dedup` 从"持连接期发 embed+M3"改成连接三段式,见上条独立审查)。
- **全量重抽的管线坑(执行者注意)**:升格是**串行有状态**;全书重抽要清多张状态表(`example_upgrade_window.status`/`example_upgrade_presence`/`_alias`/`_card_state`)+ 处理 **cid 冲突**(`INSERT ... ON CONFLICT (tenant_id,command_id) DO NOTHING` 会让新卡撞上软删旧卡的 cid 而被跳过→重抽建不出卡);`--redo-window` 重做中间窗会破坏串行依赖。小样用的是**内存零落库法**(脚本 `/tmp/muse_upgrade_dryrun.py`、`/tmp/muse_upgrade_warmupdate.py`)。目标书:**work=8 深空之影**(生物机甲6223/铁头1154,308 机甲力量卡)、work=4 机动风暴(104 张)。
## 一、批9c 已真收官(五书全量重审)
- **五书 b9-full-v2 审核库内校验 ALLOK**:星环 1525 / 机动 780 / 机战 2336 / 超神 1441 / 深空 963,全书全覆盖。
- **审核统计**:pass 1677(23.8%)/ revise 4358 / reject 1010 / blocked 0,均分 3.16,降级卡 30(全星环,敏感批用备用模型评分、已打标记;纯 M3 评分 7015)。
- **三份样张**:`docs/2026-07-16-批9终态样张-{范式五书,升格机动,升格深空}.md`(前两已提交;升格深空为本轮新出,untracked)。
- **额度**:旧 grep 次数口径(8965)作废;服务端实花 **$122.93**(累计=今日;授权上限 $2100)。
## 二、本轮踩坑与修复(勿回退)
1. **死锁解开**:原重审 wrapper 与深空残渣清洗钩子的 `pgrep -f` 交叉/自匹配互锁 → 杀钩子手动跑 `/tmp/muse-clean-debris.py 8` + 会话接管深空重审。**教训:解死锁最小动作优先**(曾多叠一个接管控制器、把正常在审的深空打断,纯属过度设计)。
2. **`review_cards.py` 修 3 处**(`.claude/skills/review-cards/scripts/review_cards.py`,工作树已改未提交):
- **敏感降级链** `DEGRADE_CHAIN=["MiniMax-M3","MiniMax-M2.7","deepseek-v4-flash","glm-5.2"]` + `chat_degrade_review()`;全链失败标 blocked 不崩。
- **分片** `--shard i/N`(id%N==i),多进程并发各自独立事务。
- **连接拆「读/算/写」三段**:LLM 阶段不持 DB 连接、写库用全新短连接(治 Tailscale 长事务空转超时,实测星环/机动崩因);+ reviews 条目 `isinstance(r,dict)` 守卫(防模型把条目返成 list 崩)。
3. **物理删除 work5/9**(机战/超神「源修复前重复导入」旧本,共 8596 行:章 4296+块 4296+参考档案 2+作品 2):**创始人 2026-07-16 明确授权覆盖「删除=软删、不物理删」红线,仅此两废本**;SQL=`/tmp/muse-b9c-purge-w59.sql`;删后作品表 8 本 8 活、好本 work10/11 无损。其余表仍守软删红线。
## 三、下一步工作(创始人已确认,compact 后继续)
### item 4:额度系统改造(✅ 已上线·主代理亲验)
**状态(2026-07-16 夜收口)**:compact 后重做完成并**主代理亲自验证上线**——
- 代码:`llm.py` 加 `chat_governed` 统一治理入口 + 计价/窗口/账本读写;四调用方(parse_llm/parse_outline/parse_ingest/review_cards)自建降级链上收复用;新建 `db/ddl/95-example额度账本.sql`(表 `example_llm_quota` 已 apply)+ 离线单测 `test_quota.py`。
- 亲验:① 9 条离线单测主代理亲跑全过(窗口/计价/六路由);② review_cards 三处红线修复完好未回退;③ 全模块导入无悬空引用;④ **真调用对账端到端闭合**——首个真调用我算 11.04 配额单位、服务端 total_used 实扣 +11(异步延迟十几秒落账),匹配;账本两笔原子累加正确(0.00018516/2 笔);⑤ 校准噪音已 `DELETE`,账本清零、额度从零起(当前窗 2026-07-16T20)。
- 已知:New-API `/api/usage/token/` 聚合口径异步滞后且高频轮询会限流返非 JSON(与计价正确性无关,勿据此判错)。
- 下方 spec 为实现依据,保留备查。
全局改 llm skill(**只改 `.claude/skills/llm/scripts/llm.py` + 新建 `example_llm_quota` 库表 DDL 落 `db/ddl/`**):
- **以钱为主**。每次调用:`cost_usd = model_ratio × ((prompt_tokens - cached_tokens) + cached_tokens×cache_ratio + completion_tokens×completion_ratio) / 500000`(New-API 口径,$1=500000 配额单位)。费率从 `GET http://100.64.0.8:3000/api/pricing` 取,硬编码兜底:**M3=0.15/4/0.2、M2.7=0.15/4/0.2、glm-5.2=0.5634/3.5/0.25、deepseek-v4-flash=0.07/2/0.0714**(model_ratio/completion_ratio/cache_ratio)。
- **时间窗**:按钟点 floor 到 00/05/10/15/20(每天 5 窗,末窗 20–24=4h),每窗独立、跨窗清零。用 `datetime.now()`(普通 python 可用)。
- **共享账本** `example_llm_quota`(窗口键、MiniMax花费usd、总调用数、更新时间),原子累加(`INSERT ... ON CONFLICT DO NOTHING` 建行 + `UPDATE ... RETURNING`),多进程/shard 共用一本账。
- **全局统一路由**(敏感降级 + 预算降级并成一条),每调用前:① 本窗总调用 ≥4000 → **自动 sleep 到下一窗边界续跑**(创始人选,非硬停退出);② 要 MiniMax(M3/M2.7) 且本窗 MiniMax 花费 ≥$10 → 切 glm-5.2 → 调用失败(不可用) → 切 deepseek-v4-flash(glm/deepseek 无 $ 上限、但可能失败);③ 撞 `SensitiveError` 沿链降级。成功后原子累加(花费仅 MiniMax 计、次数全计)。
- `review_cards.py` 里自建的 `chat_degrade_review` **改为复用 llm skill 统一路由**(避免两套降级)。
- 坑:sleep 到下一窗时**不持 DB 连接**(Tailscale);费率拉取失败用兜底值。
- **验证**:离线单测(窗口边界/成本公式/路由选择,假 usage)+ 1–2 次真调用对账(snapshot `/api/usage/token` 的 total_used 增量 ÷500000 vs 算出的 cost,±5%)。
- **额度清零** = 新表从零起(当前 20–24 窗从 0 算)。
### 卡质量优化(方案已确认,等 item 4 上线后实施;都要烧 M3、受新 $10/5h 窗管控)
**两只 fable5 诊断共同结论**:病根=**判重坏了**(当初为省钱关了语义判重)**+ 抽取过量产碎片**;两类卡头号修复都是**开启嵌入语义判重**。
**范式卡**(pass 率 23.8%;判据没冤枉卡=已校准 opus 金标准、卡真普通,但一大块好卡被「同功 family」机械压分打进 revise=判重漏检+抽取过量所致,**非判据太严**。硬证:81.5% 卡有 ≥0.75 近邻、0.75–0.85 段 5123 张全漏走且 64% 是 revise):
- **P0 生产期跨窗跨书聚类去重(最大杠杆)**:出卡入库前对全库同型卡聚类归并,一家族留一张母卡累积多实例;`SIM_MERGE` 0.85→0.80、0.75–0.85 段强制走 merge_judge(现只标记)。改 `parse_ingest.py`(SIM_MERGE≈L44、cards() L445–471)。预期 7045→~3000–4000 唯一卡,pass 率诚实抬升。
- **P1 抽取提干货**(改 `parse_llm.py` scaffold_prompt/window_cards_prompt):换书测试设硬前置 checklist;**combat 只抽战术原理、禁单场战斗走位、强制打题材标签**(=combat 打标签落地);craft 四件套(原理/失败模式/异质化/迁移用例)缺项不出卡;拆掉空批 nudge 逼卡效应(允许型-批真诚 0 卡)。
- **P2** 控出卡密度(平庸窗允许 0 卡);**P3** 判据不松(cal-002 红线),只把 3.33–3.49 贴线的 759 张 fable/opus 批量复审捞回(运营动作)。
**升格卡**(作品面,成长线丢失;根因=只有 character 有成长字段、机甲/武器/力量体系无成长字段→进阶被覆写抹平或塞错字段;主线被拆 30+ 张碎卡跨人物/物品/力量体系 3 型、无链接;判重纯字符串、语义判重关了):
- **P0 补骨架+记里程碑**(改 `meta/schemas/item.yaml`、`power_system.yaml`→`seed_schemas.py` 重跑入库;改 `parse_upgrade.py` `APPEND_FIELDS`(L47)、observe/update prompt):给 item/power_system 加「演变历程」数组字段;提示词记进化台阶 + 登场→高光→退场→结局生命周期,别覆写抹平。
- **P1 串链+语义判重**:加「前身/后继」链接字段串进化链;判重接 embed skill(≥0.78 召回 + M3 终判)治改名/跨型漏并。
- **P2** 清墓碑卡(深空 475 张 deleted=TRUE 回滚残留,物删需创始人授权);导出层 `parse_export.py` 按进化链聚合呈现。
**创始人两点细化(必须遵守):**
1. **历史/里程碑数组用「绝对章号」索引,绝不用 `[窗N]`**——窗口是运行时定义、会变、非卡属性;现有卡里的 `[窗N]` 要清成章号。
2. **卡做「渐进式披露」**:**现状层**(实体当前态+概括,写作 agent 续写默认只读)+ **完整历史层**(全里程碑,仅一致性检查/detector 读全);关键卡上万字。**落法=接现有 read-context 的 aiContext 按用途裁剪**——把「完整历史」字段标「仅 detection 用途可见、续写不给」(不是新机制,是字段可见性按用途/scenario 分层,与四层上下文/三级裁剪一脉相承)。schema 字段加用途可见性标注、抽取产出分层、read-context 按用途裁剪。
### combat 210 卡题材绑定 = 打标签(创始人拍板,纳入范式卡 P1 一起做)
## 四、遗留项
- 原有:B3 检索验证、B5 确认门、嵌入批量补算——延后。
- 本轮新增:降级卡 30(星环,如要纯 M3 可单独重审这 30 张);深空摘要重刷 20 条失败尾巴(可重跑补);卡格萨莫同名升格卡对 1 处(体检唯一黄线,可定点消歧);**框架改动待提交**(review_cards.py 3 修复 + item4 llm.py/DDL + 本 doc + README§九——创始人问过「要不要提交」未明确答,恢复后确认再提交)。
## 五、红线/环境(勿违反)
- review_cards.py 三处修复勿回退;深空清洗→重审串行(禁并发整行写回);新额度规则(item4)。
- 双轨:创作内容不 commit(确认=commit 只创始人指令触发);框架/文档正常提交推送。
- 汇报纪律:第一句先说创始人要做什么,白话不黑话(内部代号/英文行话不裸用当场展开)。
- Python=`.venv/bin/python`;DB 通道=db skill(DSN 锁脚本内,只连 muse-example);New-API base=`http://100.64.0.8:3000`、token 在 llm.py 头。
- 书:星环=work3 / 机动=4 / 深空=8 / 机战=10 / 超神=11(work5 机战旧本、work9 超神旧本已物删)。
- 两只 fable5 诊断全文在本 session 对话(升格卡+范式卡),关键点已蒸馏进本文档第三节。
---
## 批9d 插入记录(2026-07-17/18)
批9c 全量重抽启动前,创始人插入方向级任务:第一性原理分析各类卡是否符合要求,抽最重要的点完善 SoT。已完成并落 design-docs(提交 2124a793):新增专题-07(知识消费契约与质量闭环,"以用定卡")+ 七册配套拍板(含 aiContext 值域升级、参照作品面、双层拍板、purpose 枚举统一)。分析证据链见 `2026-07-17-卡的第一性原理与知识效用闭环.md`。**批9c 收尾已由创始人下"继续"口令启动(2026-07-18),compact 恢复后从这里接**:下一步 = **派 fable5 实现子代理补 3 洞**(尚未派出;任务清单 #9-12 已建)。子代理提示词要点:改 parse_upgrade.py——②观察/更新提示词令实体首现必立"登场"里程碑且归并不丢;③体系卡演变历程只收体系级变化、单位/个体事件归各自实体卡、台阶一句话限长;①语义判重连接改读-算-写三段式(opus 审计点名:现持窗级连接跨嵌入与 M3 调用)+ 新卡/更新卡写段增量嵌入落 example_knowledge_embedding(重抽期间判重才有向量可召回)+ 接入重抽流程。红线:三段式连接、软删、LLM 走 chat_governed(M3)、绝对章号、中文注释、最小改动面、不跑库写。之后顺序:主代理逐段核验 → 零落库小样验 3 洞(深空样窗:生物机甲/铁头判同归线、登场里程碑在、体系卡无单位事件)→ 呈报样张等创始人放行全量。**创始人 2026-07-18 拍板通过重抽后路线:批10 = 消费最小闭环 + 回放评测首跑**——顺序:①升格卡向量落库(补齐可命中)→②统一读取器 read-context 从设计桩变实(8587 张卡第一次被创作流消费)→③单书规划线回放首跑(冻结前 N 章知识推演下一台阶、对照原书评分,验收对齐专题-07 §4/§7);不再继续扩书拆卡。
## 批9c 收尾执行记录(2026-07-18,补3洞→小样全过,待创始人放行全量)
- **补洞实现(fable5 子代理)+ 主代理逐段核验 ✅**:`parse_upgrade.py` 每窗重构为 读1(短连)→观察(无连)→预判段(嵌入/召回/终判无长连)→写(窗事务)→嵌段(commit后三段式增量嵌入落 example_knowledge_embedding,软删旧活行+upsert);机械判重判据抽 `_classify_new_name` 纯函数预判/写段共用;四条归并路径换 `_merge_material`(演变历程完整不截);`new_card` 接 `_debut_milestone` 登场机械兜底;观察/更新提示词加登场硬约束+体系级纪律+台阶≤40字;`_clean_milestone` 加 80 字硬闸(主代理修复:截断必须放在内嵌章号抽取与周期推断**之后**,防截丢兜底线索);`build_embed_text` 补 type 键型修正(升格卡型认出)。离线自测 43 项全绿(`test_parse_upgrade_offline.py`)。提交 `2173c8f` + 校准提交。
- **零落库小样 ✅(深空窗35-37,观察3+终判若干+嵌入2批,≈$0.15,零卡表写入)**:报告 `/tmp/muse_upgrade_smoke3_report.txt` + probe4。洞② 登场:172 张适用型新卡 100% 有登场(模型自给 114+机械兜底 58,双保险成立)。洞③:299 条台阶 0 条超 80 字硬闸(>40 软目标 29 条);体系卡「联邦生物机甲技术」2 条里程碑均体系级、当前态字段干净。洞①:**阈值 0.78 实测证伪**——同实体改名对余弦仅 0.63-0.66("联邦生物机甲技术"vs 卡6223 = 0.6565)永不触发语义层,不同体系对 ≤0.58 → **阈值校准 0.78→0.60**;终判证据不对称修复(recall_neighbors 近邻带字段摘选 300 字入终判 prompt + 判据补"同型名称互含≈简称全称""改名不改实质")。校准后五探针全对:互含改名×2 → merge 6223;**非互含改名**("卡依斯反应驱动战械体系",语义层真正要接的残余缺口,机械子串层接不住)→ 0.6128 过阈 → merge 6223;反向安全(帝国4代纯机械体系)→ 0.576 不过阈 → new(误并方向守住);铁头 → 0.9456 → merge 1154;跨型全部未并。边距诚实说明:非互含 0.613 vs 反向 0.576 分离带窄,第二道守门=终判 M3(带字段证据)+ 同型才并 + 别名审计行(verdict_by='semantic')可回溯。
- **待办=呈报创始人放行全量重抽(任务#12)**。全量执行时注意本文档上方"全量重抽的管线坑"三条(清串行状态表 / cid 冲突吞卡 / 勿用 --redo-window 破串行),跑法:`run --work-id N --semantic-dedup` 逐书串行。