用途
patina 是一个“AI 写作模式去除编排器”。它面向 AI 生成的文本,负责找出并去除其中特有的 AI 写作特征,把文字改写成看起来由人类撰写的版本。支持的处理语言为韩语(ko)、英语(en)、中文(zh)、日语(ja)。其改写结果宣称经过意义保留(Meaning-Preservation, MPS)校验。
主要能力
- 多语言处理:通过
--lang或配置中的language设置切换 ko / en / zh / ja。 - 四种输出模式:
rewrite(改写,默认)、audit、score、diff;另有--strict多趟严格模式(使用 rewrite 输出模式,不可与 audit/diff/score 同用)。 - 三类风格轴:
document-type(文档类型,决定文体惯例与 pattern-overrides)、persona(可复用的声音,缺省时保留原文声音)、register(casual | professional,缺省时保留原语域)。三者互不推断。 - 模式包加载:按语言自动扫描
patterns/{lang}-*.md,并加载用户自定义custom/patterns/{lang}-*.md;可通过skip-patterns排除特定包。模式分为结构模式(phase: structure)与句子/词汇模式两组。 - 文档类型:优先读取
custom/document-types/{document-type}.md,否则读取document-types/{document-type}.md,均无则用default。namuwiki仅限韩语,其他语言回退到default。 - 语义锚点提取(MPS):抽取 Claim / Polarity / Causation / Quantifier / Negation 五类锚点,每段最多 3 个,作为内部工作记忆,不对外输出。文本为 1 段以内且 2 句以内时跳过,MPS 记为 N/A。
- 统计式可疑区间检测:基于 Burstiness(句长变异 CV)与 MATTR(移动平均类符形符比)等指标标记可疑段落,默认仅对
[ko, en, zh, ja]运行;zh/ja 使用字符 token 回退方案。 - AI 词汇重叠检测:用平面词典(
lexicon/ai-{lang}.md,并加载custom/lexicon/ai-{lang}.md)匹配 AI 特有措辞,按词密度阈值与最小命中数判定。 - 韩语专用确定性诊断:包括
translationese、koPostEditese.v1等仅作编辑提示的建议性元数据,以及参与 hot 判定的ko_diagnostics_hot、ending_monotony等复合信号。
使用方式
默认路径:带验证的 CLI 执行
除非用户明确要求 --instruction-only(或以同等明确的方式要求只用指令流水线),所有 /patina 调用与自然语言校订请求都走此路径。示例命令:
node <skill-directory>/bin/patina-skill.js --input <source-file> [--lang ko] [--backend codex-cli]
--input FILE为必填;模式从--mode rewrite|audit|score|diff或别名--audit、--score、--diff、--strict中择一(默认rewrite),模式旗标不可叠加。- 值旗标仅有
--lang、--document-type、--persona、--register casual|professional、--backend、--model、--config、--provider、--api-key-file。 - 所有旗标均为可选覆盖项,省略的值由配置选择规则决定(分发默认值 →
~/.patina.yaml→ 项目.patina.yaml,若给了--config则用该文件)。 - 辅助程序在 stdout 返回一行无内容的 JSON 摘要,包含
schemaVersion、ok、status、code、exitCode、receiptPath、outputPath、reportPath、sourceHash、outputHash、notice。 - 只有当宿主观察到进程真实退出码为 0,且摘要为
ok: true、status: "verified"、exitCode: 0,并且对应 receipt 的终止状态为verified、exitCode: 0时,才可原样返回或复制outputPath文件内容。 - 默认不改写原文件;仅当用户明确要求覆盖原文件时,才在应用前重读目标文件、计算 SHA-256 并与该次调用的
sourceHash比对,不一致则拒绝。 - audit/score/diff 为报告模式,成功时
status: "unverified-report",结果为reportPath的 JSON,不得当作已验证的改写结果呈现。 - 失败(
ok: false)时原文保持不变,报告退出码与稳定code后停止:exit 1 为配置/运行时/后端/存储失败,2 为参数/配置/输入错误,4 为验证拒绝,130 为取消。 - 输入上限为 20,000 字符、80,000 字节;配置与执行合计预算 180 秒。
- 多文件时逐个文件单独调用辅助程序;失败的文件记录代码、保持原样并继续下一个。
- 无法使用命令执行工具时,应报告无法运行 CLI 并停止,或请求用户明确选择
--instruction-only,不得悄悄改用指令流水线。
可选路径:仅指令(--instruction-only)
仅在用户明确选择时启用,按 SKILL.md 中 1~6 步的原有流水线执行。该路径不调用 CLI、不生成 receipt,结果正文外必须标注:
instruction-only; CLI not run; no CLI verification
配置加载顺序
优先读取 SKILL.md 同目录的 .patina.default.yaml 作为分发默认值,然后按顺序读取 ~/.patina.yaml、./.patina.yaml。优先级为 .patina.default.yaml → ~/.patina.yaml → ./.patina.yaml → $ARGUMENTS。YAML 映射递归合并,blocklist、allowlist、skip-patterns 去重合并,其他数组由后设置的值替换。
可配置项包括:document-type、persona、register、patterns、skip-patterns、output、blocklist、allowlist。
批量处理旗标
--batch <files>:一次处理多个文件(glob 或显式路径列表)--in-place:用校订后文本覆盖原文件--suffix <ext>:结果保存为{原文件名}{ext}--outdir <dir>:结果保存到指定目录
后台与限制
- 辅助程序只检查所选后端的就绪状态,选择可来自旗标或配置文件。
patina doctor通过其他后端并不构成所选后端就绪的证据,也不存在后端替换链;所选后端失败时报告失败,不偷偷改用其他后端。 - 不存在的选项不应自行发明。
适用场景
适用于需要把 AI 生成的韩语、英语、中文、日语文本改写得更像人类写作的编辑场景,可用作改写、审计、评分或差异对比。
限制
- 输入上限 20,000 字符 / 80,000 字节,执行总预算 180 秒。
custom/自定义模式、文档类型、词典、persona 均只是优先加载项,具体可用性取决于是否提供对应文件。- 统计式检测默认仅在
[ko, en, zh, ja]上运行;zh/ja 使用字符 token 回退(不使用形态分析器)。 - 韩语建议性元数据(
translationese、koPostEditese.v1)仅作编辑提示,不参与评分、hot 判定、门限或作者判定。 namuwiki文档类型仅限韩语。- 其余配置项、默认值及完整算法细节以资料中指向的
core/stylometry.md、src/features/index.js#analyzeText()等文件为准,本页未展开的部分暂未提供。