9.6 KiB
name, description, disable-model-invocation
| name | description | disable-model-invocation |
|---|---|---|
| capture-ai-flavor-cases | 从已有作品或创作反馈中抽取可复核的 AI 味案例卡,保留来源哈希与位置并产出规则候选。需要反向积累人感样例、记录一次写作事故或把重复观察送入规则评审时使用;不直接修改正文、范式或生产规则。 | true |
抽取 AI 味案例卡
在五技能接力链中的位置
本 Skill 是技能 5「挖掘」的执行入口(链路登记见 meta/chains/README.md 的 AI 味接力段):
创作/已有作品 → 案例卡采集(本 Skill)→ 人工标注 → canonical → 规则候选(propose-rule)
→ 四类样例 + 回放 + 评审 → humanization/rules active → 技能 2/3 消费
- 它不碰本次创作正文:只记账(作者回退、误杀、门禁失败都走
feedback入卡),在背后进化规则库; - 规则候选永远从
candidate起步,激活要走humanization/的装载门(四类样例齐备)与评测; - 模型换版本后的规则巡检:对 active 规则用
evaluate-frozen-replay回放,失效规则降级,同样经本链路的评审入口回写。
目的与边界
本 Skill 只生产质量证据层的 ai_flavor_case 卡片。它不是作品实体卡,也不是公共范式卡;卡片默认处于 shadow,不能进入生成上下文,不能直接改变正文或规则。
输入有两条来源链:
backfill:扫描已有作品,记录表面候选、全文哈希、章节/行位置和上下文。来源未明确授权时只保存哈希与位置,不把原文写入仓库。live_feedback:记录创作中发现的具体问题、候选正文哈希和人工判断,允许快速入卡,但同样先停在shadow。
确定性脚本负责发现、哈希、状态、结构门禁和自动落库;“这是 AI 味还是有意写法”由人工/独立评审标注。不得把正例样本单独归纳成全局规则。
数据与副作用合同
- 读取:用户明确提供的文本文件,以及本 Skill 输出的案例卡 YAML/JSON。
- 写入:检测命令指定的回执文件,以及
muse-example中的案例卡与重验证账本;生命周期入口更新案例卡当前投影、写质量评测账;不写正文、knowledge/正式资产或生产规则目录。 - 自动落库:
scan、inventory、feedback在检测完成后自动以一个事务写入数据库。--offline是显式例外,只用于离线合同测试或数据库恢复准备;不能把离线文件当正式内容。 - 恢复入口:
persist_cases.py只用于把已审计的 inventory/revalidation 文件恢复或迁移入库,正常检测不得依赖它单独执行。 - 模型:扫描、哈希、校验和候选归纳前置门不调用模型;语义标注可由独立评审完成,结果必须回写卡片的 review 字段。
- 失败:任何来源、哈希、状态或反例门失败都返回
CASE_CARD_CONTRACT_FAILED,不输出部分成功的规则。
运行
采集只是第一步;确认与规则生命周期由同目录 mine_ai_flavor.py 承担:
# Shadow 卡人工标注(默认写回数据库当前投影)
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/mine_ai_flavor.py annotate \
--cards /tmp/cards.yaml --card-id case-... --label sf --carrier narration \
--reviewer qingse --note "当前上下文无叙事功能" --output /tmp/annotated.json
# 来源已 verified 后确认 canonical;数据库再次检查 verified 回执
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/mine_ai_flavor.py confirm \
--cards /tmp/cards.yaml --card-id case-... --verification /tmp/revalidation.json \
--reviewer qingse --note "作者确认" --output /tmp/canonical.json
# 规则候选合同回放;带 holdout 才有资格进入激活门
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/mine_ai_flavor.py evaluate-rule \
--rule humanization/rules/structural/s002.yaml --samples /tmp/projected-samples.yaml \
--cards /tmp/canonical-cards.yaml --verification /tmp/revalidation.json \
--holdout /tmp/holdout.json --output /tmp/rule-evaluation.json
正常检测入口仍如下:
# 既有作品反向扫描;research_only 是默认安全值,输出 hash-only 卡
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/capture_cases.py scan \
/path/to/work.txt --work-ref work-7 --output /tmp/ai-flavor-cases.yaml
# 命令结束时自动写入 muse-example;同时生成 .inventory.json/.revalidation.json 回执
# 批量回填并固化可复核清单;只写来源哈希、位置和观察,不复制第三方正文
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/capture_cases.py inventory \
/path/to/works --source-root-ref 小说清单 --output /path/to/backfill-inventory.json \
--generated-on 2026-08-13
# 8 本作品的卡与逐卡重验证在同一检测运行中自动入库
# 创作反馈快速入卡(正文只在本次受控输入中读取)
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/capture_cases.py feedback \
--text-file /tmp/candidate.txt --work-ref work-12 --run-ref run-abc \
--issue "段尾抽象升华没有功能" --output /tmp/feedback-card.yaml
# 创作反馈也会自动入库,保留 run_ref 绑定
# 明确只做离线构造(不会写库)
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/capture_cases.py inventory \
/path/to/works --output /tmp/inventory.json --offline
# 对卡片做结构与来源门禁
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/capture_cases.py validate \
/tmp/ai-flavor-cases.yaml
# 在确认/投影/规则使用前手工重验证来源;默认自动追加数据库回执。
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/capture_cases.py revalidate \
/path/to/ai-flavor-cases.yaml --source-root /path/to/source-root \
--checked-on 2026-08-14 --output /tmp/ai-flavor-revalidation.json
# 仅需离线回执时显式加 --offline
# 只有已标注正反证据且来源重验证通过时才生成 candidate 规则;命令不会生成 active
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/capture_cases.py propose-rule \
--cards /tmp/cards-a.yaml /tmp/cards-b.yaml \
--rule-id candidate-lexical-001 --name "空洞元话语" \
--verification /tmp/ai-flavor-revalidation.json \
--output /tmp/rule-candidate.yaml
owned、licensed 和 public_domain 才允许把片段写入卡;research_only、unauthorized 只能 hash-only,且永远不能确认。source_sha256 针对原始文件字节,excerpt_sha256 针对保存的片段,二者不可由模型自报。
重验证不会在看板打开时自动发生;它是确认、样例投影和规则消费前的显式 fail-closed 门。来源找不到不是“仍然有效”,而是 unavailable。
状态与升级
scan/feedback产生shadow + unclassified。- 人工标注为
sf(确实应修)、snf(表面相似但不应修)、boundary或regression;标注不等于确认。 - 来源重验证结果为
verified后,只有可审阅且获授权的卡才能canonical,再投影为样例。 - 规则候选至少需要两个不同来源作品,并同时包含一张
sf与一张snf/boundary/regression卡;所有引用卡必须有verified回执。候选状态固定为candidate。四类样例、跨任务回放和规则评审完成后,才由现有质量链决定是否激活。
详细字段和失败码见 references/case-card-contract.md。规则候选的完整合同评测见 humanization/src/deai/evaluation.py;project-sample 产出的四类样例可用 --samples 作为评测输入;样例带 case_card_id 时,评测还必须提供 --cards 与 --verification,脚本会复核 canonical、verified 投影、样例正文和规则引用。holdout 必须保留 sf_hit、snf_false_repair、boundary_false_repair、regression_safe 等分层计数及派生指标;没有 holdout 和人工审批,候选永远不能写成 active;唯一例外是所有者留痕豁免——激活门代码不放宽,豁免必须在规则 evidence 写明决定、日期与理由(见 humanization/rules 2026-08-16 批量豁免)。
首版回填清单与候选规则种子见 references/fixtures/;其中既有作品只保留 hash/位置,不能直接确认。
backfill-inventory-*.json 与 revalidation-*.json 是可复核的导出/恢复证据;正式内容在 muse-example 的
example_ai_flavor_case、example_ai_flavor_revalidation_batch、example_ai_flavor_revalidation 三张表。
dashboard/server.py 的 /ai-flavor 默认查这三张表,数据库不可用时才明确标注离线回退;页面不会因打开而重新读取原文。
状态语义:案例卡 shadow 只供复核,canonical 仅表示获授权且完成评审,rejected/archived 不进入生成上下文;重验证 verified 才能确认、投影样例或消费规则,stale(全文哈希变化)、unavailable(来源不可得)和 card_mismatch(锚点变化)都使当前卡在这些动作上失效,但历史回执保留。
机械验收
.venv/bin/python .claude/skills/capture-ai-flavor-cases/scripts/test_capture_cases.py
.venv/bin/python .claude/skills/access-database/scripts/test_skill_catalog.py
git diff --check
测试必须覆盖:来源 hash、重验证 verified/stale/unavailable/card_mismatch、未授权 hash-only、重复 ID、live feedback 来源绑定、shadow 不能投影样例、缺重验证回执不能确认、跨作品/反例门,以及候选评测不足时不能 active。