muse-agent-example/docs/2026-07-16-批9c-收官与优化方案.md
zizi 9c87f0dee9 feat(parse-book): 范式卡回溯聚类去重(recluster)——同型近义卡嵌入初筛+M3终判归并母卡,全库7045→6327(并718/~10%)
recluster 子命令:连接三段(LLM期不持DB连接)/贪心最近母卡(避union-find巨簇)/软删可逆/dry-run门控;母卡累积实例+回溯归并审计(被并卡全文留档可回滚)。前向修复 cards():SIM_MERGE 0.85→0.80、最近邻≥0.75即送 merge_judge(堵住跨书近义卡从不判定的病根)。

五型放量:combat886→770/emotion1151→1027/craft1445→1326/scene_pattern1753→1578/trope1810→1626,并718。真实归并率~10%(向量投影74%多为同型词汇假近,merge_judge剪掉85-95%;创始人知情拍板全量0.75)。可逆性/完整性/软删/质量四项主代理亲验。

llm.py:睡窗日志边界显示 typo 修复(secs取整落在04:59:59被%H显示成非法边界04:00,+1s归整为05:00)。
2026-07-17 06:10:04 +08:00

83 lines
12 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 补说明。
- **待办(gated,需创始人 go)**:①范式卡四型放量完成后核总量+提交框架代码;②升格卡三步动真格——重跑 seed_schemas 灌新字段合同 / 跑真迁移(人工精确化:无内嵌章号处再抽原文定章)/ 开语义判重(需先 embed 落库);③升格卡语义判重读 `type` 键的兼容性主代理启用前单独核。
## 一、批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 对话(升格卡+范式卡),关键点已蒸馏进本文档第三节。