框架: 三角色审核skill定版——M3常设审核(opus金标准校准0.45达标,golden/入库)+拆书四步全流程集成(两pass→窗大纲→终检→审核)+金标准七条B4改造清单入档

This commit is contained in:
zizi 2026-07-13 17:47:28 +08:00
parent 1e15b05ff7
commit 3279cd7974
8 changed files with 361 additions and 3 deletions

View File

@ -33,13 +33,25 @@ disable-model-invocation: true
**M3 直调形态(创始人 2026-07-13 拍板,现行)**:循环体不再派 opus/haiku 子代理,改为 `scripts/parse_llm.py` 直调 New-API `MiniMax-M3`(经 llm skill——脚本自己取数正文/前文实体/已积累卡名录内联进 prompt→ M3 两 pass脚手架→范式`parse_ingest` 机械校验入库(比例硬顶/归型/字段越合同/15连字泄漏。断点续跑按 example_parse_task 状态机逐章跳过已 done 的 pass。
**放量全流程(每书四步,均 M3**
```bash
# 逐章两 pass 拆一本书的指定章区(断点续跑,重跑自动补失败章)
.venv/bin/python .claude/skills/parse-book/scripts/parse_llm.py --work-id 4 --from 1 --to 3
# ① 逐章两 pass脚手架→范式;断点续跑,重跑自动补失败章)
.venv/bin/python .claude/skills/parse-book/scripts/parse_llm.py --work-id 4 --from 1 --to 50
# ② 窗级大纲聚合(每 510 万字:多章细纲+正文→阶段大纲;单章对大纲层可能零贡献,不做章内比例强制)
.venv/bin/python .claude/skills/parse-book/scripts/parse_outline.py window --work-id 4
# ③ 全书拆完:终检(逐窗细纲对账大纲 + 跨段连贯性纵览)
.venv/bin/python .claude/skills/parse-book/scripts/parse_outline.py check --work-id 4
# ④ 公共卡三角色审核(番茄作家/起点作家/主编,M3 常设步骤;见 review-cards skill
.venv/bin/python .claude/skills/review-cards/scripts/review_cards.py review --batch <批次> --work-id 4
# 进度
.venv/bin/python .claude/skills/parse-book/scripts/parse_ingest.py progress
```
审核纪律:常设审核=M3已用 opus 金标准校准,偏差 0.45 达标fable/opus 只做起量前校准与起量后一次总审核(门禁与优化,不进流程循环)。
试拆实测病理档放量前须知M3 细纲按比例会写超(治=绝对字数上限+压缩重试type 一律标 craft 且串型混填prompt 矫正无效,治=B4 环按金标准清单改造 prompt/schema重跑自噬治=判重名录排除本章+0 卡不软删source 偷懒(治=机械回填)。
## 步骤(自底向上,与创作期规划的自顶向下互为镜像)
1. 静态分章:import skill(规则,LLM 不参与);

View File

@ -0,0 +1,45 @@
---
name: review-cards
description: 公共知识卡三角色审核(番茄作家/起点作家/主编——拆书流程的常设步骤MiniMax-M3 执行检查内容成立性、AI 创作可用性、跨书可参考性,判定 pass/revise/reject 写回卡片。fable/opus 只做起量前校准与起量后总审核。
---
# review-cards —— 公共知识卡三角色审核M3 常设)
创始人拍板2026-07-13审核是**流程内可复用资产**,不是每批都请 claude 角色扮演——
- **常设执行**MiniMax-M3 扮三角色(番茄作家=爽点商业性 / 起点作家=结构工艺 / 主编=资产 vs 噪声),每批拆书产出的卡过一遍;
- **fable/opus 职责**:起量前出金标准校准本 skillgolden/),起量后做一次总审核;
- 判定写回 `draft_payload.审核` 节(批次/均分/判定/三角色分与判词),可追溯可复审。
## 用法
```bash
# 审核(全部或指定书的活卡;三角色各一次 M3 调用)
.venv/bin/python .claude/skills/review-cards/scripts/review_cards.py review --batch <批次> [--work-id N] [--dry-run]
# 校准:与 golden/scores.jsonopus 金标准)对照(换模型/改 prompt 后必跑)
.venv/bin/python .claude/skills/review-cards/scripts/review_cards.py calibrate --batch <批次>
```
判定阈值:三角色九维均分 ≥3.5 pass / ≥2.5 revise / 其余 reject。
## 统一判定闸(自 opus 金标准三评审蒸馏,内嵌于审核 prompt
换书测试(抹专名换题材仍成立?)· 命名黑话检测 · 装置标签判定(信息差/契诃夫之枪/身份错认各有硬定义)· 伪精确检测(编造的间隔数字)· 同功重复family 换皮)· 干货位检查(失败模式比手法值钱=手法空洞)· 专名泄漏。
## 校准记录
| 日期 | 批次 | 结果 |
|---|---|---|
| 2026-07-13 | cal-00119 卡试拆批) | 平均绝对偏差 **0.45**(合格线 ≤0.5)、平均偏差 -0.08(无系统倾向)、最大背离 1.33<1.58 卡偏差 0.11M3 三角色总评独立复现金标准全部四大系统病同功撞车/命名黑话/伪精确/专名污染)。**已知弱点**场景级走位 vs 可复用范式辨别偏松(《路人搭讪道具借用式情报截流 2.67 M3 4.0)。 |
金标准:`golden/金标准-{番茄作家,起点作家,主编}-2026-07-13.md` + `golden/scores.json`19 卡九维均分)。
## 金标准对拆书 prompt 的改进清单B4 优化环的输入,未实施)
1. 技法指纹先行+跨章聚类去重(母卡+多出处实例,消灭 family 换皮);
2. 换书测试闸门+强制占位符(专名/数字打回);
3. 两类卡模板:结构型伏笔卡(埋点/回收点/隔章记忆维持三件套vs 场景型手法卡(复用节奏/异质化/每章上限)——不再硬套埋设/履约框架;
4. 装置类型闭合枚举+判定测试;禁「信息差」当万能主标签;
5. 翻转重心每卡强制可迁移因果原则「当X做Y因为读者会Z」+触发条件+滥用反例;砍编造数字;
6. 补「读者收益」字段(代入/掌控/期待/打脸/意外);命名用作者短语(「先知降压」),长名降副标题;
7. 采样扩到中段爽点章(打脸/升级/反转),别只啃前三章。

View File

@ -0,0 +1,21 @@
{
"延时应答式洗脑成功伪装": 3.0,
"面瘫外化式心绪对冲可视化": 3.22,
"未来时态回望式处境降险": 3.11,
"筹码挂嘴边式第三方威慑锚定": 3.56,
"拟人化道具独白式规则灌注": 3.78,
"新闻播报式闹剧事件确认": 3.11,
"宿主梦境式欲望外泄落点": 2.0,
"亲密搭档冒充家长式谎言托管": 3.44,
"计划外变量即时消解式伏笔偷换": 3.33,
"剧透先知式选项四象限抉择可视化": 3.33,
"路线研究借口式职务身份脱敏注入": 3.44,
"面部肌肉即时复位式警觉伪装": 2.67,
"敌意阈值即时外化式内心杀意标定": 3.11,
"路人搭讪道具借用式情报截流": 2.67,
"首镜胖瘦差式肉身身份确认": 3.33,
"数字自算式减重目标具象化": 3.22,
"数值面板首秀式身份自证": 4.0,
"苦主自嘲式绝境降压对冲": 3.67,
"回望式时间线降维处境评估": 3.33
}

View File

@ -0,0 +1,42 @@
# 金标准评审 · 资深主编视角opus2026-07-13对象=试拆 19 卡)
> 校准基准。视角=可复制性与指导价值:这卡进知识库是资产还是噪声。
## 逐卡(卡名 | 成立性 | 可用性 | 可参考性 | 判词)
1. 延时应答式洗脑成功伪装 | 4 | 3 | 2 | 内核"给敌人一个他愿意信的解释"真本事;被场景焊死,名字像黑话
2. 面瘫外化式心绪对冲可视化 | 3 | 2 | 2 | 烂大街手法包装成术语照着写只会更套路与12/13撞车
3. 未来时态回望式处境降险 | 3 | 2 | 2 | 与19同书重复AI学了会写出没有风险感的软场面
4. 筹码挂嘴边式第三方威慑锚定 | 3 | 3 | 2 | "人质当悬而未发的枪"起了唬人名字;"隔两章以上"数字是编的
5. 拟人化道具独白式规则灌注 | 4 | 4 | 3 | 少见的好卡——反 info-dump 真手艺,能跨题材
6. 新闻播报式闹剧事件确认 | 4 | 4 | 3 | 真手艺+这批最好的摘要(通用机制而非剧情复述)
7. 宿主梦境式欲望外泄落点 | 2 | 2 | 1 | 一次性搞笑桥段供成范式,纯噪声,垫底
8. 亲密搭档冒充家长式谎言托管 | 3 | 3 | 2 | 真价值是堵叙事硬伤;卡名让检索找不到它解决的问题
9. 计划外变量即时消解式伏笔偷换 | 3 | 3 | 2 | 内核对;卡名绕到没人读得懂,好东西埋在黑话里
10. 剧透先知式选项四象限抉择可视化 | 4 | 3 | 3 | 真手艺但"四象限"名不副实
11. 路线研究借口式职务身份脱敏注入 | 3 | 3 | 2 | 内核简单却起了数据脱敏式黑话名,检索灾难
12. 面部肌肉即时复位式警觉伪装 | 2 | 2 | 2 | 面瘫内心戏第三次分身,一秒僵硬供成范式
13. 敌意阈值即时外化式内心杀意标定 | 3 | 3 | 2 | 有点东西但名字中二与2/12撞
14. 路人搭讪道具借用式情报截流 | 3 | 3 | 2 | 藏了真规矩"借的道具必须场景内还清";整卡被具体场景焊死
15. 首镜胖瘦差式肉身身份确认 | 4 | 3 | 3 | 价值在"别念体检报告"的失败模式不在手法本身
16. 数字自算式减重目标具象化 | 3 | 3 | 3 | 真原理被减肥场景锁死,卡名太窄埋没通用价值
17. 数值面板首秀式身份自证 | 4 | 4 | 3 | 分析扎实失败模式真干货——这批的资产卡
18. 苦主自嘲式绝境降压对冲 | 3 | 3 | 2 | 失败模式吐槽带优越感让主角失温比手法本身值钱与2重叠
19. 回望式时间线降维处境评估 | 2 | 3 | 2 | 第3卡分身唯一增量"先知必须逐步失灵"是真规律,可惜埋在重复卡里
**资产卡**5、6、17其次 10、15、16。**噪声卡**7、12毙掉或降级用例3/19、2/18 需合并。
## 系统性问题
1. 命名黑话化+场景焊死=检索死:"XX式YY化ZZ"堆叠既非行业术语检索者又猜不到用途;一句话摘要多复制"定位"=剧情复述而非通用手法陈述——资产变噪声头号原因
2. 把偶然当规律+伪精确一句带过的桥段抬成装置配编造的间隔数字写得像铁律——false precision 最危险
3. 同一手法反复分身冒充多个范式19 张去重后只有 1012 个独立技法
4. "公共范式"名不副实5 本全是男频穿越/系统/机甲一条赛道,很多是子类型语气癖;多张语气卡照做会主动泄掉紧张感——可用性为负
5. 卡里最值钱的是"失败模式"不是"手法":干货几乎都在失败模式字段,说明拆书 prompt 抓错重心——擅长复述发生了什么,不擅长提炼可迁移原则
(附 schema 问题:埋设/履约/间隔是伏笔专用框架,半数卡不是伏笔,硬塞=拿一种规范套另一种规范)
## prompt 改进建议
1. 强制"迁移测试"砍场景专名:先写出"这技法在完全不同题材(都市悬疑/古装宫斗)怎么用",写不出=不是范式,打回或降级"用例";摘要固定模板「何时用+怎么做+读者得到什么」且禁止复制"定位"
2. 两阶段产卡先聚类去重再出卡;整顿装置类型标签(禁"信息差"这种覆盖 11/19 的万能标签当主标签;标签词表与卡名解耦)
3. 翻转重心:每卡强制 (a)可迁移因果原则「当X做Y因为读者会Z」(b)触发条件(什么场景该检索到它)(c)至少一个滥用反例;砍掉编造的章节数字(数不出真实间隔就只许定性)

View File

@ -0,0 +1,40 @@
# 金标准评审 · 顶级番茄作家视角opus2026-07-13对象=试拆 19 卡)
> 校准基准M3 审核 skill 的评分应与此对齐。视角=爽点节奏/读者留存/商业性。
## 逐卡(卡名 | 成立性 | 可用性 | 可参考性 | 判词)
1. 延时应答式洗脑成功伪装 | 3 | 3 | 2 | 真招被埋在原书剧情里,一次性妙笔换本书用不上
2. 面瘫外化式心绪对冲可视化 | 4 | 4 | 3 | 面瘫吐槽是真手艺节奏能落笔——可惜和第13张严重重叠
3. 未来时态回望式处境降险 | 4 | 4 | 4 | 穿越者先知降压成立且通用——但与第19张同招换皮
4. 筹码挂嘴边式第三方威慑锚定 | 4 | 4 | 3 | 硬通货范式,但字段塞了"海拉/探望权"专名泄漏
5. 拟人化道具独白式规则灌注 | 4 | 4 | 3 | 反设定灌输真经验——"千亿夸克"原书数字漏进字段
6. 新闻播报式闹剧事件确认 | 3 | 3 | 3 | 路子对但摘要与字段各说各话,绑死原书梗
7. 宿主梦境式欲望外泄落点 | 2 | 2 | 2 | 过度解读典型,"YY指标"没法指导落笔
8. 亲密搭档冒充家长式谎言托管 | 4 | 3 | 3 | 解决"少年主角没人管"真痛点,但名字绕口核心没提干净
9. 计划外变量即时消解式伏笔偷换 | 3 | 3 | 3 | 伏笔术成立但绑在换婴情节上,自造装置分类
10. 剧透先知式选项四象限抉择可视化 | 3 | 3 | 3 | "四象限"是AI硬套的伪精确先知系列扎堆
11. 路线研究借口式职务身份脱敏注入 | 4 | 3 | 4 | 通用谍战范式迁移性好——名字像技术黑话
12. 面部肌肉即时复位式警觉伪装 | 3 | 3 | 2 | 与第1张同族攒一起就是灌水
13. 敌意阈值即时外化式内心杀意标定 | 4 | 3 | 3 | "留白本身成为信息"真手艺——装置类型自曝与第2张重复
14. 路人搭讪道具借用式情报截流 | 2 | 2 | 2 | 场景小动作拆成理论,过度解读
15. 首镜胖瘦差式肉身身份确认 | 4 | 4 | 4 | 套路但真好用,本批少见能直接抄
16. 数字自算式减重目标具象化 | 4 | 4 | 3 | 内核(量化驱动行动感)能迁移
17. 数值面板首秀式身份自证 | 5 | 4 | 4 | 最硬的通用范式,契约意识专业
18. 苦主自嘲式绝境降压对冲 | 5 | 4 | 4 | 齐佩甲招牌+留人利器+给了频控——本批最值钱
19. 回望式时间线降维处境评估 | 4 | 4 | 4 | 比第3张好先知逐步失灵制造反压——留这张删第3张
## 系统性问题
1. 近义卡没去重,检索自我稀释(先知降压 3/19/10、面瘫外化 2/12/13、微表情复位 1/12
2. 把"一次性妙笔"误当"可复用范式"7/14/1——红线换一本书还成立、还能指导落笔吗
3. 命名和字段全是 AI 黑话且信息冗余(埋设手法与履约方式互相复述摘要)
4. 出处细节漏进抽象层破坏跨书复用(海拉/千亿夸克/我老大天老二/专名数字梗)
5. 只见文学装置不见读者爽感 + 采样偏科开局(打脸/升级/扮猪吃虎/反转中段引擎零覆盖)
## prompt 改进建议
1. 先建"技法指纹"再出卡强制归并:指纹相同合并成母卡+多出处实例;全书拆完跑跨章聚类去重
2. 加"换书测试"闸门+强制占位符抹掉专名数字还成立才进公共库字段只许占位符角色A/敌方/某设定)
3. 补"读者收益"栏(代入/掌控/期待/打脸/意外/装逼)+采样扩到中段爽点
4. 命名用作者黑话短名("先知降压""面瘫吐槽""照镜确认""面板开局"),长名降级副标题

View File

@ -0,0 +1,43 @@
# 金标准评审 · 起点白金作家视角opus2026-07-13对象=试拆 19 卡)
> 校准基准。视角=长篇结构工艺:伏笔埋收距离/信息差维护成本/装置与主线耦合度。
## 逐卡(卡名 | 成立性 | 可用性 | 可参考性 | 判词)
1. 延时应答式洗脑成功伪装 | 4 | 3 | 3 | "伪装挂在敌方已知标签反面"真高级工艺;失败模式表述拧巴,命名太贴设定
2. 面瘫外化式心绪对冲可视化 | 4 | 4 | 3 | 表里双轨反差真本事;但是场景级跑梗不是埋收装置,硬套伏笔框架
3. 未来时态回望式处境降险 | 4 | 3 | 2 | 工艺真实;与 #19 几乎同卡、与 #18 同源,间隔建议自相矛盾
4. 筹码挂嘴边式第三方威慑锚定 | 5 | 4 | 4 | 全批最扎实之一——"不兑现的持续威慑",两条失败模式都真,可迁移
5. 拟人化道具独白式规则灌注 | 4 | 4 | 4 | 对治 AI 设定倾倒很有用;但"信息差"标签不成立(主角读者同步获知)
6. 新闻播报式闹剧事件确认 | 3 | 2 | 3 | 真喜剧工艺但卡自相打架(定位与摘要矛盾、现编标签、两对埋收混一团)
7. 宿主梦境式欲望外泄落点 | 3 | 2 | 2 | 唯一真货"用意象承载内心状态";间隔纪律照抄原文段落结构换书即废
8. 亲密搭档冒充家长式谎言托管 | 5 | 4 | 4 | 真结构工——"谎言必须有到期日"是白金级提醒
9. 计划外变量即时消解式伏笔偷换 | 5 | 4 | 4 | 高级货:埋近收远双层伏笔+"反对旁白补完",全是真伏笔纪律
10. 剧透先知式选项四象限抉择可视化 | 4 | 4 | 3 | "被放弃的选项作伏笔总账"真巧思;命名撒谎(没有象限)
11. 路线研究借口式职务身份脱敏注入 | 4 | 4 | 4 | 直击信息差维护成本;命名黑话拖后腿
12. 面部肌肉即时复位式警觉伪装 | 4 | 3 | 3 | "微表情伏笔+别用独白填死留白"真本事;身份错认标签乱贴
13. 敌意阈值即时外化式内心杀意标定 | 4 | 3 | 3 | "未执行本身成为信息"高级;拿别的卡名当装置分类,标签近亲繁殖
14. 路人搭讪道具借用式情报截流 | 4 | 3 | 3 | 真调度技巧;但是场景走位不是伏笔装置,"间隔纪律"只是单场闭环
15. 首镜胖瘦差式肉身身份确认 | 3 | 3 | 2 | 反面警告有用;装置类型自打耳光(卡名"确认"标签"错认"
16. 数字自算式减重目标具象化 | 3 | 3 | 3 | "清单即承诺"内核成立;信息差标签硬错(算自己体重哪来信息差)
17. 数值面板首秀式身份自证 | 5 | 4 | 3 | 最强之一——"面板首秀=为后续数值机制铺契约",三条失败模式全干货,标签少见全对
18. 苦主自嘲式绝境降压对冲 | 5 | 4 | 3 | 降压 family 最好一张:失败模式全锋利+给了节奏;与 #3 #19 三卡同功
19. 回望式时间线降维处境评估 | 5 | 3 | 3 | "先知逐步失灵制造反压"是全批最锋利一句、真白金结构;但与 #3 同卡且粒度错(全书级决策塞进场景卡)
## 系统性问题
1. 去重失败同书同功卡扎堆:超神独占 7 张3/18/19 三卡同功12/13 同章同族15/16 同书同题——应按功能合并,取各卡最锋利的失败模式并入
2. 装置类型标签体系混乱通胀乱贴:信息差滥用到不成立处、现编标签、拿卡名当分类——标签集合没有闭合定义
3. 框架硬套:场景级语气/走位技巧塞进"埋设—履约—间隔"伏笔框架,逼出照抄原文的伪纪律——伏笔卡和场景手法卡应用不同字段模板
4. 抽象度两极分化:贴死情节换书即废的偏多;可迁移内核被埋在书专属外壳下,检索命不中
5. 伏笔卡普遍缺"回收点+记忆维持"reminder 节奏)这一环——长篇伏笔的真正成本所在;失败模式质量参差说明该字段没有统一检验标准
## prompt 改进建议
1. 装置类型闭合枚举+每类一句判定测试(信息差=必须存在角色A知道而B/读者不知道的明确落差;契诃夫之枪=预先可见放置+后续引爆,一次性道具不算;身份错认=必须有人把A当成B——不满足任何一类宁可标"场景手法(非装置)"
2. 拆成两类卡模板:结构型伏笔卡强制三件套(埋点/回收点/隔章记忆维持);场景型手法卡改填(复用节奏/异质化要求/每章上限)
3. 命名强制"手法内核在前、书专属外壳只进出处";拆完一本跑一次同书按功能去重关
## 一句话总结
强的极强4/8/9/17 白金货弱的贴死原书6/7/15 换书即废),中间一大批被"标签乱贴+同功重复+框架硬套"拖累。先修标签判定和去重,整体抬一个档。

View File

@ -0,0 +1,153 @@
#!/usr/bin/env python3
"""review-cards skill公共知识卡三角色审核拆书流程常设步骤MiniMax-M3 执行)。
创始人拍板2026-07-13审核是流程内可复用资产放量时每批卡由 M3 扮演
番茄作家/起点作家/主编三角色审核fable/opus 只在起量前校准本 skill 质量
金标准见 golden/起量后做一次总审核
流程三角色各一次 M3 调用全批卡 三组评分汇总 判定pass/revise/reject
写回 draft_payload.审核 可追溯--calibrate golden 金标准对照输出一致性
"""
import json
import pathlib
import statistics
import sys
import click
import psycopg
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[2] / "llm" / "scripts"))
from llm import chat, extract_json # noqa: E402
DSN = ("postgresql://root:f6710e2d0294eb1c10e26a805a64bc54@100.64.0.8:5433/muse-example"
"?keepalives=1&keepalives_idle=15&keepalives_interval=5&keepalives_count=3")
TENANT, ACTOR = 1, "1"
GOLDEN = pathlib.Path(__file__).resolve().parents[1] / "golden"
# 三角色身份(与金标准评审同源)
ROLES = {
"番茄作家": "番茄小说网顶级畅销作家多本10亿+在读爆款)。独特视角:爽点节奏、读者留存、商业性——这卡能不能帮 AI 写出让人上头的东西。",
"起点作家": "起点中文网白金作家(以结构工艺著称)。独特视角:长篇结构工艺——伏笔埋收距离、信息差维护成本、装置与主线耦合度。",
"主编": "头部网文平台资深主编(二十年审稿)。独特视角:可复制性与指导价值——这卡进知识库是资产还是噪声;最懂垃圾写作课的套路话术。",
}
# 统一判定闸(自 opus 金标准三评审蒸馏的共性红线)
CRITERIA = """审查判定要点(每张卡都过一遍):
1. 换书测试抹掉书名/专名/具体数字换一个完全不同题材都市悬疑/古装宫斗这卡还成立还能指导落笔吗不成立=一次性妙笔而非范式
2. 命名黑话检测卡名是"作者会说的话"还是"XX式YY化ZZ" AI 修饰语堆叠摘要是通用手法陈述还是原书剧情复述
3. 标签判定装置类型是否乱贴信息差=必须存在角色A知道而B/读者不知道的落差契诃夫之枪=预先可见放置+后续引爆身份错认=必须有人把A当成B
4. 伪精确检测"隔两章以上"这类数字是从原文数出来的还是编的编的=危险的 false precision
5. 同功重复与本批其他卡是否同一手法换皮先知降压/面瘫外化这类 family
6. 干货位检查失败模式字段是否比手法本身更值钱说明手法总结空洞
7. 专名泄漏字段里出现原书人名/地名/数字/=破坏跨书复用"""
REVIEW_PROMPT = """你是{role_desc}
背景muse AI 长篇创作系统从经典网文拆出公共范式卡未来 AI 写新书时检索这些卡作写作参考你负责质量审核内容是否成立AI 创作时是否可用是否可参考跨书复用
{criteria}
下面是本批 {n} 张卡JSON逐卡评分1-5 整数并给一句毒舌判词
输出规则只输出一个 JSON 对象
{{"reviews": [{{"name": "卡名", "cheng": 成立性, "yong": 可用性, "can": 可参考性, "verdict": "一句话判词"}}], "overall": "本批系统性问题一句话"}}
卡片
{cards}"""
def load_cards(conn, work_id=None):
sql = """SELECT id, draft_payload FROM muse_knowledge_draft
WHERE tenant_id=%s AND source_type='parse_book' AND deleted=FALSE"""
args = [TENANT]
if work_id:
sql += " AND source_id=%s"
args.append(work_id)
return conn.execute(sql + " ORDER BY id", args).fetchall()
@click.group()
def cli():
"""公共知识卡三角色审核M3 常设步骤)"""
@cli.command()
@click.option("--work-id", type=int, help="只审该书的卡;不给则全部")
@click.option("--batch", required=True, help="审核批次号")
@click.option("--model", default="MiniMax-M3", show_default=True)
@click.option("--dry-run", is_flag=True, help="只打印不写库")
def review(work_id, batch, model, dry_run):
"""三角色审核并写回 draft_payload.审核 节。判定均分≥3.5 pass / ≥2.5 revise / 其余 reject。"""
with psycopg.connect(DSN) as conn:
rows = load_cards(conn, work_id)
if not rows:
click.echo("无待审卡")
return
cards_json = json.dumps([r[1] for r in rows], ensure_ascii=False, indent=1)
all_reviews = {}
for role, desc in ROLES.items():
content, usage = chat(REVIEW_PROMPT.format(
role_desc=desc, criteria=CRITERIA, n=len(rows), cards=cards_json), model=model)
data = extract_json(content)
all_reviews[role] = {r["name"]: r for r in data.get("reviews", [])}
click.echo(f"[{role}] 评 {len(data.get('reviews', []))}"
f"(in={usage.get('prompt_tokens')}) 总评: {data.get('overall', '')[:80]}")
# 汇总判定并写库
stats = {"pass": 0, "revise": 0, "reject": 0}
for cid, payload in rows:
name = payload.get("名称")
scores, per_role = [], {}
for role in ROLES:
r = all_reviews[role].get(name)
if r:
s = [r.get("cheng", 0), r.get("yong", 0), r.get("can", 0)]
scores += s
per_role[role] = {"": s, "判词": r.get("verdict", "")}
if not scores:
continue
avg = round(statistics.mean(scores), 2)
verdict = "pass" if avg >= 3.5 else ("revise" if avg >= 2.5 else "reject")
stats[verdict] += 1
click.echo(f" {verdict:6s} {avg}{name}")
if dry_run:
continue
payload["审核"] = {"批次": batch, "模型": model, "均分": avg,
"判定": verdict, "角色": per_role}
conn.execute("UPDATE muse_knowledge_draft SET draft_payload=%s, updater=%s WHERE id=%s",
(json.dumps(payload, ensure_ascii=False), ACTOR, cid))
if not dry_run:
conn.commit()
click.echo(f"审核完成: pass {stats['pass']} / revise {stats['revise']} / reject {stats['reject']}"
+ ("dry-run 未写库)" if dry_run else ""))
@cli.command()
@click.option("--work-id", type=int, help="限定书")
@click.option("--batch", required=True, help="要对照的审核批次号(先跑 review")
def calibrate(work_id, batch):
"""与 golden/scores.json 金标准对照:输出逐卡偏差与整体一致性(起量前校准用)。"""
golden = json.loads((GOLDEN / "scores.json").read_text()) # {卡名: 金标准均分}
with psycopg.connect(DSN) as conn:
rows = load_cards(conn, work_id)
diffs, lines = [], []
for _, payload in rows:
name = payload.get("名称")
audit = payload.get("审核") or {}
if audit.get("批次") != batch or name not in golden:
continue
g, m = golden[name], audit["均分"]
diffs.append(m - g)
lines.append((abs(m - g), f" Δ{m - g:+.2f} M3={m} 金={g}{name}"))
for _, ln in sorted(lines, reverse=True):
click.echo(ln)
if diffs:
click.echo(f"对照 {len(diffs)} 卡:平均偏差 {statistics.mean(diffs):+.2f}"
f"平均绝对偏差 {statistics.mean(map(abs, diffs)):.2f},最大 {max(map(abs, diffs)):.2f}")
click.echo("校准合格线(拍板前建议):平均绝对偏差 ≤0.5 且无 ≥1.5 的单卡背离")
if __name__ == "__main__":
try:
cli()
except (psycopg.Error, RuntimeError) as e:
click.echo(f"[错误] {type(e).__name__}: {e}", err=True)
sys.exit(1)

View File

@ -228,7 +228,9 @@ flowchart LR
- **opus 试拆基准workflow 已完成)**:机动风暴 13 章,范式卡 2 张入库ch2/ch3 各 1 拒 1 越合同)+ch1 脚手架opus 也犯 JSON 中文引号/缺逗号病(已被 llm skill 容错吸收)。此产物只作 M3 对比基准,不算正式拆书。
- **P2 全语料清洗收口2026-07-13**8 书全清(门①创始人放行)——总删 1,685 段/约 6.1 万字(机破星河 2.4 万/机战无限 1.9 万/超神 0.6 万…),审计全在 example_clean_log批次 P2-20260713 主删 + fix/fix2/fix3 补删 + P2-sweep 高频水印收割),全库空行归一 8,786 章。守卫体系放量长成:行级垃圾特征+书名豁免+水印裁剪+20%顶带下限+敏感窗备选模型降级(见 clean/SKILL.md。误删实测 1 例 3 字已修复。已知残留待拍:机动风暴「重贴章题+第N更 求月票)」嵌正文行变体(求票嫌疑 270 处主源)、感言/请假条整章、作者疲劳话散句。
- **B2 试拆收口2026-07-13门②已呈报**5 本×前 3 章 M3 直调完成——scaffold 15/15 全过(绝对字数上限+压缩重试对症后,细纲 2.9%7.8%);范式卡三轮迭代后活卡 19 张(样张 `docs/试拆-门②样张.md`opus 同章基准 `docs/试拆-opus基准-机动风暴.md`)。**M3 三病理已档**:①归型偏科——内容有型区分但 type 一律标 craftprompt 两轮矫正无效,字段指纹改型又被「串型混填」挫败(一卡混两型字段);②重跑自噬——判重名录含本章旧卡+幂等软删+LLM 随机性组合损耗(已修:名录排除本章+0 卡不软删);③偶发脱敏违规/source 偷懒(守卫拦对+机械回填治)。
- **未决**:①门② 试拆样张质检+craft 偏科处理方向B4 环迭代 / 分型单 pass / 接受先行②B2 放量(硬停,等创始人新指令)③机动残留变体与感言章处理方式。
- **拆书流程增补2026-07-13 创始人拍板+落地)**:①**窗级大纲聚合**——大纲不从单章抽单章对大纲层可能零贡献510 万字窗(多章细纲+正文聚合一次整本完后拿全体细纲终检parse_outline.py + 93 表);②**三角色审核常设步骤**——番茄作家/起点作家/主编审核公共卡(成立性/AI 可用性/可参考性),**M3 执行**review-cards skillfable/opus 只做起量前校准+起量后总审核。校准已过opus 三评审金标准入 golden/M3 对照平均绝对偏差 0.45(合格线 0.5),四大系统病独立复现。首批 19 卡 M3 判定 pass 5 / revise 10 / reject 4。
- **金标准评审结论(拆书 prompt 的 B4 改造清单,见 review-cards/SKILL.md**:同功 family 撞车19 卡实为 1012 个独立技法)、命名黑话+专名泄漏、伪精确数字、伏笔框架硬套场景手法、失败模式才是干货位、采样偏科开局——七条改进已档,B4 环实施。
- **未决**①B2 放量(硬停,等创始人新指令;放量流程四步已固化=两 pass→窗大纲→终检→M3 审核②B4 按金标准清单改造拆书 prompt/schemacraft 偏科等病的根治层)③机动残留变体与感言章处理方式。
- **教训入档**StructuredOutput 工具 schema 属性名仅限 ASCII中文键 API 400——schema ASCII 键+入库脚本键名归一Tailscale 长事务需 keepalive+批量写(逐行两万往返曾半死 16 分钟)。
## 九·旧2026-07-10 快照,留档)