研墨 sz-ink — 中文去AI味改写器
铁律一句话:体检看整体,开刀只定点,锚点不可侵犯,达标就收手。
0. 开始前
本 skill 是事后改写器:输入是已存在的文本,输出是改写后的文本+三份报告。 它不做生成、不做检测器绕过承诺;验收以内部指标为准(服务"读起来像人")。
语体先行:任何动作前必须先判语体。首批支持三语体:
colloquial_media(口语化新媒体)/ official_doc(公文体)/ explanatory(讲解体)。
三语体是分析透镜,不是封闭文体清单——输入可以是任意文体(探店文/博客/周报/信件/评论)乃至一个段落、片段:
- 就近归属:按三个特征轴(句式正式度、术语密度、语气词密度)比对,任何输入必须落进最近的一档,归属依据写进 S1 档案;用户说明优先于自动判定;
- 两可时(两档各命中一半特征)→ 问用户,不猜;
- 片段模式(<300 字或 <4 句):S1 结构图退化为单段职能标注+锚点 1–2 条;S2 中依赖样本量的指标(句类熵/段落呼吸/结构规整度)看
sample_sufficiency标注,标了"不计分"的指标不算达标也不算未达标,从分母剔除;S4 只动词层/句层卡(01–24),篇层/结构卡(25–40)停用。 风格参照(description 第二场景):用户给了自己写的段落做参照 → 先跑tools/build_profile.py <样本文件>生成风格档案,作为 S4 改写的目标层("像谁")。
1. 流程状态机(S0→S8,不可跳步)
S0 语体判定 ──► S1 建档 ──► S2 体检 ──► S3 达标判定
│
┌────────── 未达标 ◄────────────┘
▼
S4 定点干预(≤3处/轮)──► S5 回测 ──► 未达标且轮次<2 ──► 回S4
│ │
│ └─ 达标 ──► S6 还原审核
│ │
│ 漂移 ◄─────────────────┤ 无漂移
▼ ▼
S7 回滚修正(回S5) S8 交付
判停:总分达标 或 2轮用尽 → 停手交人工,附"硬伤清单",不硬凑。
S0 语体判定
- 按文本特征(句式正式度、术语密度、语气词)+ 用户说明定语体;
- 语体决定:阈值组(rules/metrics.yaml registers)+ 词表(assets/lexicon/cliche_<语体>.txt)+ 禁区。
S1 建档(改写前强制,输出《文章档案》)
- 结构图:段落序列+职能标签(立论/论据/转折/举例/收束)+段间逻辑关系(因果/递进/转折/并列);
- 语义锚点:每段 2–4 条——核心命题(一句话)、关键事实(数字/人名/日期/结论)、作者立场句;
- 论点清单:中心论点+分论点列表及位置。
档案存
.agent/harness/(产物不出技能目录)。改写全程锚点零改动。
S2 体检(脚本,零改动)
# 在本 skill 根目录下执行(路径相对技能目录,与安装位置无关)
python tools/check_metrics.py <文本> --register <语体>
九项指标定义与阈值:读 rules/metrics.yaml(单一事实源,本文件不重复数值)。
S3 达标判定
- 红线:句长节奏、套话密度任一不过 → 必须干预;
- 总分:≥6/9 达标即放行——不追求全绿,全绿=过度干预的信号;
- 过度优化上限:任一指标超上限(如短气群>40%、语气词>8/千字)→ 不合格,"演人"也是病;
- 语体条件指标:留白度对公文/讲解体禁用,按 registers overrides 执行;
- 全卡体检(不抽样、不设门):45 张处方卡的判据在 S3 逐条过一遍,与文体无关—— AI 可以随机命中任何病灶,体检范围必须是全部病灶清单。九指标是机器哨兵,卡片判据是第二级, 两级都全量跑;"种草/探店/推广文"只是高危先验(提高排查优先级和卡45检索启用级别), 不是体检门——视角层病灶(列举同壳/缺点安全位/视角缺席)在技术博客、周报、日记上同样可能出现。 文体豁免仅限"用途不需要"类(商业约稿/官方介绍页/法定文本,各卡禁区节白名单)。 唯一分级项:卡45 素材同源检索成本高——细节密集或高危先验命中 → 必检索,其余抽查关键细节位。 所有判据命中进 S4 候选池 + 出《补事实清单》(语言层全绿 ≠ 像人)。
S4 定点干预
- 取偏差最大的 ≤3 处(不是所有过线处)——配额治的是过度干预,不是漏检:S3 体检是全量的, 这里只做治疗分级;未干预的命中记入改动日志"观察清单",轮次内治不完交人工;
- 每处按病灶类型路由处方卡(
assets/prescription/),卡=症状→判据→动作→对照例; - 改写指令三要素:病灶原文+处方卡全文+锚点清单,明示"其余部分禁止改动";
- 每处干预记录:位置、依据卡片编号、改动摘要——进改动日志。
S5 回测
- 全文重新计分(不是只算改动处)——改动处达标但别处被改坏会立刻暴露;
- 轮次上限 2;累计干预上限 5 处/篇;超限 → 停手交人工。
S6 还原审核(独立于改写上下文)
四查(前三查对照 S1 档案,第四查全文自洽):
- 锚点核查:数字/专名/否定词脚本查(tools/audit_semantic.py),语义级复核独立盲审——只给改前后+锚点清单,不给改写过程;
- 逻辑核查:段间关系不许变形(因果不能改转折);
- 完整性核查:论点清单逐项对勾,丢了/多了都要报;
- 数字自洽:tools/check_numbers.py 提取全文数字声明,同一主体+量词取值冲突(如正文"5 篇"vs 表格"4 篇")→ 冲突位必须人工裁决:修正或写明口径差异,不许带着未解释的冲突交付(2026-10-28 外部盲评抓出 4/5 矛盾后新增)。 输出《漂移报告》:位置+类型(事实/立场/论点丢失/逻辑变形)+严重度。
S7 回滚
- 严重漂移段 → 回滚改前版本,换更保守动作重来;
- 轻微漂移 → 只修漂移点。
S8 交付(四件齐 + 发布前置,产物具名落 .agent/harness/)
- 终稿:
终稿_<slug>_<YYYYMMDD>.txt; - 《指标报告》:
指标报告_<slug>_<YYYYMMDD>.md(改前/改后分数对比); - 《改动日志》:
改动日志_<slug>_<YYYYMMDD>.md(每处干预的位置/依据卡片编号/摘要); - 《漂移报告》:
漂移报告_<slug>_<YYYYMMDD>.md(有则附)。 用户是终审员——"像不像人"最终由用户读感判定,指标报告只是依据。 含体验补位细节的稿子(卡41)不是终稿:附《补事实清单》,作者逐条确认属实后方可发布(boundaries.md 1bis)。
2. 路由表(情况 → 文件)
| 情况 | 读什么 |
|---|---|
| 指标定义/阈值/放行规则有疑问 | rules/metrics.yaml(唯一事实源) |
| 某病灶怎么改 | assets/prescription/prescription_index.md 按类型查卡 |
| 需要改写样例参考 | assets/examples/(按病灶类型分文件) |
| 语体怎么定/该语体什么禁区 | assets/register/<语体>.md |
| 结构级干预(段落重组) | assets/structure/ + 本文件 S4 注:结构干预单独配额 ≤1 次/篇 |
| 改写边界:什么绝对不能动 | rules/boundaries.md |
| 词层改写缺替换弹药 | assets/lexicon/swap_pairs.md(84 组替换对,配卡 04/07/09 用) |
| 指标全绿但读着不像人 / 要"像谁"的参照 | assets/examples/positive_features.md + assets/structure/ |
| 词表想增删 | assets/lexicon/,改后必须跑 tools/check_metrics.py --self-test 验证 |
3. 硬约束(违反即返工)
- 锚点零改动:数字、人名、日期、立场句、核心命题;
- 数据本体不动:只改表达,不改/删数据(继承"真数据铁律");
- 干预配额:≤3 处/轮、≤5 处/篇(结构干预另计 ≤1 次/篇);
- 轮次上限 2,超限交人工;
- 法定文本(公文套语/政策原文/合同条款)不口语化——白名单在语体档案;
- 产物(档案/报告/基线)只写
.agent/harness/,不进技能目录; - 版本号单源:本文件 frontmatter,manifest 同步校验。
4. 停止条件(回到原始需求核对)
完成判据(全部满足才算完成):
- 语体已判定且档案已建;
- 总分 ≥6/9 且无红线未过且无过度优化;
- 锚点保留 100%、论点清单对齐、逻辑关系保持;
- 干预 ≤5 处/篇、≤2 轮;
- 四件交付齐(终稿+指标报告+改动日志+漂移报告);
- 若含体验补位细节(卡41):《补事实清单》已出且作者已逐条确认属实;未确认不得发布。
不满足 → 逐项排查,该交人工交人工,不硬凑达标数字。
