| name | writing-dna |
| description | 个人写作风格指纹提取与复用工具。当用户希望让 AI 生成的内容"听起来像自己写的"、去除文章中明显的 AI 套话(赋能/重塑/生态/综上所述等)、把 AI 草稿改写成符合个人风格的成稿、或为自己建立一份可复用的"写作风格档案"时使用此 skill。触发场景包括:用户提到"AI 味太重"、"不像我写的"、"想要个人风格"、"去 AI 味"、"改写成我的风格"、"建立写作风格库"、"风格指纹"、"语气标尺",或上传过往作品要求分析风格、要求将某段文字改写得更像自己/某个具体作者风格,均应触发此 skill。也适用于公众号、小红书、知乎、博客、邮件等任何需要"保留个人声音"的中文写作场景。English triggers also apply: "remove AI flavor", "make it sound like me", "personal writing style". |
Writing DNA · 个人写作风格守护者
这个 skill 解决什么
AI 写得快,但写得不像你。无论 ChatGPT、Claude 还是其他工具,默认输出都自带一股"AI 味"——开口"在数字化转型的浪潮中"、过渡用"首先/其次/综上所述"、收尾必"卓越的/完善的/一站式"。
这个 skill 干两件事:
- 一次性提取你的"写作 DNA"——从你过去 5-12 篇代表作里抽取签名短语、句长偏好、开头/结尾习惯、emoji 用法、段落节奏,存成
<用户名>-dna.json。这份档案永久复用,换工具、换设备都带得走。
- 每次改写带"AI 味"的草稿——读取 DNA 文件 → 检测并清除套话 → 按你的风格重写 → 输出"内容不变、味道是你"的成稿,附带 before/after 对比报告。
何时使用
主动触发(DNA 提取):用户上传了多篇过往文章并提到"风格"、"指纹"、"我的写作习惯"、"分析写作"、"提取 DNA"等词时,启动 DNA 提取流程。
主动触发(DNA 改写):用户给出一段 AI 生成的文字并提到"AI 味太重"、"去 AI 味"、"不像我写的"、"改写成我的风格"、"用我的 DNA 改写"等词时,启动 DNA 改写流程。
不要触发:用户只是要求"改得通顺一点"、"翻译"、"摘要"——这些与个人风格无关。
首次回复:智能判断+引导(禁止输出 CLI 命令)
这个 skill 默认运行在工具对话框里。用户不应该被迫理解脚本链路、目录约定和参数细节;模型要先读懂用户已经给了什么,再决定下一步怎么做。
场景 A:skill 刚被安装/激活,用户还没输入实际内容
当前对话满足"用户消息是空 / 只说了'你好''试试这个 skill'/ skill 刚加载完成"时,是开场白时刻。这一刻你的第一条回复绝对不要用以下任何脚本化形式:
- ❌ 列出"克隆仓库 / 安装依赖 / 脚本验证 / 部署到工作区" 这类验证表
- ❌ 罗列
python run.py pipeline / python run.py extract 等 CLI 命令
- ❌ "快速开始" 编号步骤(1. 跑这个 2. 跑那个)
- ❌ 列脚本路径、依赖名、目录约定
- ❌ 任何带 ✅ / ❌ / 进度条样式的"安装结果"
而是用自然对话语气说一段话,结构包含:
- 一句简短自我介绍:你能帮用户做什么(避开"提取 DNA""签名短语"这种术语,用"分析你的写作风格"这类人话)
- 直接问用户想做哪件事:不要问"你要提取还是改写",问"你想先做哪件事"
- 告诉用户怎么开始:把文章/草稿拖进对话框、或者粘贴出来
参考示例(不要逐字照抄,按当前用户语境改写):
你好。我是用来帮你"守住自己写作味道"的——能从你过去的文章里提一份只属于你的"写作 DNA",下次让 AI 写东西就能按你的味道来。
用法是两步:
- 第一步(必做、一次性):先把 5-12 篇你过去写过的东西丢进来,我先帮你提一份"写作 DNA"。这是基础——没有它就没法做风格化改写。
- 第二步(之后每次用):有了 DNA 之后,每次拿到 AI 草稿,直接粘过来,我会按你的 DNA 改写。
第一次用的话,先把过往文章丢进来吧。.docx / .md / .txt 都能拖进对话框,也可以直接粘贴文字、用 --- 隔开多篇。
(如果你之前已经做过 DNA 分析、手上有 <用户名>-dna.json 文件,告诉我一声,我会跳过第一步直接进改写。)
关键逻辑:流程 B(改写 AI 草稿)必须有现成 DNA 文件才能进入。 用户首次使用、还没跑过流程 A 时,即使他粘了一段 AI 草稿过来说"改写一下",你也不能直接改——必须先告诉他:"要先做一次风格分析才能改,你能不能丢几篇过去的文章过来?" 不要承诺无法兑现的事。
核心原则:欢迎语是写给写作者看的,不是写给开发者看的。 任何用户首次看到的回复里如果出现了 python、脚本路径、文件树、依赖名——这条欢迎语就是失败的。
场景 B:用户已经在消息里给了实际内容
核心原则:
- 先看本轮对话里的附件、粘贴文本和关键词,再决定是提取 DNA 还是改写草稿
- 能直接判断就直接进入对应流程,不把"你要提取还是改写"作为默认问题
- 信息不足时只问一个必要问题
- 执行过程中的脚本和路径由模型处理;只有排查、复现或用户主动要求时才展开命令
- 必须在模板剥离确认、DNA 确认和改写效果确认三个节点停下等用户判断
意图判断规则
| 用户消息特征 | 判定 | 直接进入 |
|---|
| 上传了文件 + 提到"风格/指纹/提取/分析/DNA/我的写作习惯" | 提取 DNA | 流程 A(跳过确认,直接说"我先提取 DNA,流程是...") |
| 给了一段文字 + 提到"去 AI 味/改写/不像我/用我的风格/太 AI 了" | 改写草稿 | 流程 B(先确认 DNA 文件是否存在) |
| 用户只说了模糊的话(如"帮帮我""试试这个 skill") | 无法判断 | 回到场景 A 的欢迎语,让用户告诉你想做哪件事 |
简短的流程提示
判定后进入流程 A 或 B 之前,可以用一句话告诉用户接下来会做什么(禁止在这条回复中出现任何 python 命令或脚本路径):
我先帮你做风格分析(放样本 → 模板剥离 → 提取 DNA → 给你看结果让你确认),整个过程中你只需要确认三次:模板剥留、DNA 画像准不准,以及改写效果像不像你。
然后直接按判定结果进入流程 A 或流程 B,不要再问。
流程 A:DNA 提取(一次性)
输入要求
用户应提供 5-12 篇个人代表作,每篇 ≥ 800 字。具体效果:
| 篇数 | 效果 | 说明 |
|---|
| 1-4(< 1.7万字) | ❌ 不足 | 无法区分单篇特有与跨篇稳定特征 |
| 5(约2万字) | ⚠️ 下限 | 刚好让稳定特征浮现,不确定项偏多 |
| 8(约3.5万字) | ✅ 最佳 | 不确定项收敛,大部分特征确认 |
| 12(约5万字) | ✅ 上限 | 特征基本饱和,再增量边际收益极低 |
以上数值基于实测验证(见 scripts/test_sample_sufficiency.py,含留一法、同型 vs 异型拆分、饱和度曲线三项测试)。
文章数量不足 5 篇时主动告知"样本太少会让指纹不稳定,建议至少 5 篇",但允许用户坚持继续。
当用户对 DNA 提取结果或改写效果不满意时,不要盲目建议加样本。应运行诊断测试:
python scripts/test_sample_sufficiency.py
- 留一法距离 < 0.25 → 样本不是瓶颈,问题在提取规则或改写参数
- 留一法距离 > 0.25 → 样本不够稳,建议加 2-3 篇不同类型文档
- 异型距离明显小于同型距离 → 当前样本类型多样性不足,优先加不同类型而非同型堆量
- 饱和度曲线已平 → 再加任何篇数都不会提升效果,无需追加
文件可以是:
.docx 文件(本 skill 内置 DOCX→Markdown 转换链路)
.md / .txt 文件
- 直接粘贴的多段文字(用
--- 或明显分隔符分开)
- 文件夹路径(自动扫描该目录下所有
.docx / .md / .txt 文件)
执行步骤
Step 0:确定输入来源——先看对话,再看文件夹
用户触发后,按以下优先级确定输入:
- 用户在本轮对话中直接上传了文件(
.docx/.md/.txt)→ 直接用这些文件,不再问"文件在哪里"
- 用户在本轮对话中粘贴了文字(用
--- 隔开多篇)→ 识别分隔符,拆成多篇
- 用户指定了文件夹路径(如
inputs/raw_docx_articles/)→ 扫描该目录
- 以上都没有 → 告诉用户:"直接把文章拖进对话框就行,支持 .docx / .md / .txt"
关键是:不要在 Step 0 问用户"文件在哪里"——先检查对话里有没有,有了就直接干活。
Step 1:读取并清洗文本
逐篇读入(.docx 自动转 Markdown),去除 markdown 语法标记(保留纯文字)、去除代码块、保留段落结构。
Step 1.5:模板剥离与文体识别(PRD §8.1.3 · 三层流程,不可跳过)
PRD 的核心原则:
模板决定这类文档应该怎么写,DNA 决定你在这个模板里习惯怎么写。
这一步把"用户被文体格式要求强制写的内容"剥离出去,留下的才是真正的"个人写作 DNA"。任何文体(学术论文、邮件、公众号、政府报告、合同、新闻稿、博客、产品文档、小说……)都用同一套三层流程处理——不再针对单一文体硬编码规则。
Step 1.5a:跑跨文档对齐脚本(Layer 1 · 确定性算法)
python3 scripts/strip_template.py --input <用户上传文件列表或文件夹> --output-dir inputs/template_stripped_markdown/ --report outputs/template_profiles/strip_report.md
这个脚本不依赖任何文体先验,只做"确定性"的字面对齐检测:
- 跨 ≥60% 文档出现完全相同的整句 → 必然是模板
- 跨 ≥60% 文档用相同 markdown 章节标题 → 这些章节及内容是模板
- 跨 ≥60% 文档出现 ≥8 字相同短语 → 必然是模板套话
输出两份产物:
inputs/template_stripped_markdown/:剥离后的样本(这里的内容才是个人 DNA 的来源)
outputs/template_profiles/strip_report.md:剥离了什么、按哪些规则剥的人类可读报告
Step 1.5b:你(AI)做语义层模板识别(Layer 2)
读完 strip_report.md 之后,你必须主动做两件事:
-
文体识别:用户的样本看起来是什么文体?常见类型:学术论文 / 邮件 / 公众号 / 政府报告 / 合同 / 新闻稿 / 博客 / 产品文档 / 小说 / 教程 / 评论 / 散文 / 简历 / 商业计划书……
-
残余模板检测:脚本只能抓字面重复模板。你需要识别 Layer 1 漏掉的"结构相同但内容不同"的语义模板。各文体的典型残余模板:
| 文体 | 典型残余模板 |
|---|
| 学术论文 | "摘要/引言/方法/结果/讨论"段落写法、"前人研究表明..."、"本研究的贡献在于..." |
| 邮件 | "亲爱的 X、收到您的来信..."、"此致敬礼"、客套寒暄段 |
| 公众号 | "今天来聊聊..."、"点赞关注转发"、号召订阅话术 |
| 政府报告 | "为深入贯彻..."、"指标主要考核 + 满分 + 得分率" 句式、"现将... 报告如下" |
| 新闻稿 | "据悉/记者获悉"、5W1H 开头模式、"对此,X 表示" |
| 合同 | "甲方/乙方"称谓、"特此协议"、"未尽事宜" |
| 小说 | 第一/三人称固定开场、章节回目套语 |
| 教程 | "本文将介绍/学完本文你将"、"步骤 1/2/3" 套话 |
你必须用样本本身的内容去判断,不是用上表的字面值去匹配。上表只是提示你"哪类残余模板要找"。
Step 1.5c:把识别到的残余模板展示给用户、等待确认(Layer 3)
用对话方式把判断结果展示给用户,让用户拍板。模板:
看你的样本,我猜是 [X 文体]。
脚本(Layer 1)已经剥离了字面重复的内容(详见 outputs/template_profiles/strip_report.md)。
剩下的样本里,我还观察到几处看起来是 X 文体的格式要求、不是你的个人风格:
- "[具体短语/句式模式]" — 比如某篇里写了 "[原文片段]" — 这种结构在 N/M 篇里都有
- "[功能段落模式]" — 每篇都有讲 "[功能]" 的段落,但内容不同
- ...(最多 4 条,不要事无巨细)
这些是文体要求还是你的写作习惯?要从 DNA 提取里剥掉吗?
用户回答后:
| 用户说 | 你做 |
|---|
| "是文体要求,剥" | 从 inputs/template_stripped_markdown/ 里手动删除这些段落(直接编辑文件) |
| "是我的风格,留" | 保留 |
| "[某条]剥,[某条]留" | 按用户指示分别处理 |
| "我看不出来,你来定" | 不要替用户决定。说"那我先按现状继续,提取出来你再校",进入 Step 2 |
只有等用户确认完,才能进入 Step 2 调用 extract_dna.py。
Step 1.5d:把样本预检结论并入这同一条确认消息(不另起停等点)
模板剥离后,run.py pipeline 会自动跑一次样本预检(scripts/test_sample_sufficiency.py,多维:篇数 / 字数分布 / 文档间相似度 / 近重复整篇)。把结论用人话、问题驱动地接在上面的剥留确认里——只点有问题的维度,正常的一句「其余正常」带过,控制在 2-4 行。不要把用户甩到 outputs/debug/ 看文件。例:
顺便看了下样本质量:有两篇内容几乎重合(像同一篇的初稿和定稿),实际等于只有 4 篇不同的;最短一篇才 300 字,偏短。其余正常。
分级处理(依据预检输出的 severity):
- severity = serious(篇数 < 5 / 高度同质 / 多数近重复整篇)→ 软阻断:提醒后要用户显式说「我知道风险,继续」才往下;但用户坚持就放行(保住「允许坚持继续」承诺)。
- severity = light(接近饱和、略不均、类型偏单一)→ 只提示,不拦。
- severity = ok → 一句带过即可。
末尾固定挂一句入口(否则用户不知道能要细节):「想看每篇字数、哪两篇重复这些明细,说一声"展开"就行。」用户说「展开 / 哪两篇重复 / 真的吗(怀疑)」→ 在对话里展开该维度明细,并此时才附 outputs/debug/sample_sufficiency_test.md 路径;没要就不主动倒明细、不报路径。
核心原则:
- Layer 1(脚本)抓 90% 的字面模板。Layer 2 + 3(你 + 用户)抓剩下 10% 的语义模板。
- 这一步的目标只有一个:让进入 DNA 提取的内容真正是"用户独特的表达",不是"用户在某种文体里被迫写的"。
- 不要跳过 Layer 3 用户确认这一环——你判断错了文体或者把个人风格当成了模板,用户能纠正。
Step 2:调用提取脚本(输入必须为 Step 1.5 模板剥离后的文件)
python3 scripts/extract_dna.py --input inputs/template_stripped_markdown/ --user-name <用户名> --output <用户名>-dna.json
脚本会输出一份 JSON。关键字段及含义见 references/dna_schema.md,简版如下:
signature_phrases:跨多篇出现 ≥ 2 次的标志性短语
openers / closers:开头/结尾常用句式
sentence_features:平均句长、短句占比、段落平均行数
blacklist_phrases:用户从不使用的套话(用于改写时硬性禁用)
emoji_policy:常用 emoji 白名单、从未用过的 emoji 黑名单
tone_descriptors:自动总结的语气特征(如"自嘲带刺"、"克制理性"、"温暖热情")
Step 2.5:生成语义 DNA 画像 JSON + 词云图
extract_dna.py 输出的是统计型数据(n-gram 频率、句长等),用于后续改写参数。用户看到的词云图需要语义型画像 JSON——由你(AI)结合模板剥离后的原文和 Step 2 的统计数据,写出一份定性分析,存为 <用户名>-formal-dna.json。
JSON 结构(参照 outputs/dna_profiles/user_dna_profile.json):
⚠️ 关键提示:以下 JSON 字段值是占位符,描述的是"该字段应该装什么类型的信息",不是"该字段应该填什么具体内容"。
你必须根据用户的实际样本归纳每个字段的内容。如果用户写的是公众号、小红书、博客、邮件这类自由文体,绝对不要在字段值里出现"一是/二是""制度/机制/流程/权责""建议+主体+动作+内容""判断后接事实""稳健规范"等公文化表达——这些是政务公文的格式要求,不是任何用户的"个人风格"。
{
"author": "<用户名>",
"overall_assessment": "<一句话概括用户写作风格定位,基于实际样本归纳——可能是'克制温柔的观察者''逻辑精确的技术作家''随性自嘲的吐槽派''稳健规范的公文作者'等,由样本决定>",
"structure_habits": {
"within_section": "<段落/章节内组织方式:根据样本归纳,可能是'先抛矛盾再展开''先举具体例子再总结''意识流推进''先判断后展开'等。不要默认套'先判断后展开'>",
"transition_mode": "<段间/句间过渡方式:根据样本归纳,可能是'用空行切场景''用问句开新段''用具体词汇衔接''一是…二是…枚举'等。绝对不要默认填'一是…二是…',除非样本实际大量使用>"
},
"argumentation_style": {
"problem_analysis": "<分析问题的方式:根据样本归纳,可能是'诉诸细节''先抛情绪再讲事实''反问引入''先定性再枚举'等;如果样本主题不写论证类内容,填'未明显体现'>",
"suggestion_delivery": "<给建议/结论的方式:根据样本归纳,可能是'反问引发思考''具体场景假设''直白陈述''建制式建议'等>"
},
"language_features": {
"sentence_length": "<句长特征:根据 sentence_features 实测值描述,例:'平均 22 字、短句占 45%,节奏紧凑'或'长句为主、分号连接多信息单元'>",
"tone": "<语气特征:根据样本实际语言风格归纳,可能是'冷静克制''随性自嘲''热情张扬''温柔细腻''稳健规范'等>"
},
"rewrite_rules": [
"<根据用户实际样本归纳的 4-6 条改写规则;每条规则必须能在样本中找到具体证据>",
"<示例(仅当样本支持时使用):'保留口语化感叹词''句末多用反问''标题用具象动词''用空行而不是连接词分段'等>",
"<不要照搬以下任何一条字面值,要按实际样本生成:'问题用一是二是三是''建议用建议+主体+动作+内容''判断后接事实'>"
]
}
写完 JSON 后自检三遍:
- ❓ 公文体污染检查:我有没有不假思索地填了"一是…二是""制度/机制/流程/权责""判断后接事实""稳健规范"?如果有,回去看样本——这些词在样本里真的高频出现吗?还是我抄了示例?
- ❓ 个人风格 vs 文体要求检查:用户的样本如果都是同一文体(政府报告/合同/新闻稿/学术论文),那"分点叙述""判断后接事实""稳健规范"很可能是文体要求(用户被迫这样写的),不是个人风格(用户在没人要求时也会这样写的)。这两者必须分开。把文体要求误判为个人风格 = DNA 完全失效。
- ❓ 抽象标签检查:字段值里有没有抽象的分析者标签(如"建议+主体+动作+内容""手段→动作→目的")?这些是分析者用的术语,不是写作者本人的语言。改成更具体的描述,或删除。
生成 JSON 后立即调用:
python3 scripts/render_dna_feature_cloud.py --input <用户名>-formal-dna.json --output <用户名>-dna_feature_cloud.png
Step 3:⏸️ 必须停下,等用户确认 DNA 准不准
这一步绝对不能跳过,也绝对不能替用户做判断。
提取完 DNA 后,你必须:
-
用图片语法贴一次(且仅一次)特征云 PNG:

- 同时用文字告诉用户完整路径:"特征云已保存到
<完整路径>,可以直接打开看"
- 如果对话框无法渲染图片,明确告诉用户去哪个目录找这个 PNG
- 不要重复贴:全场只展示一次。如果用户主动要求重看,再贴一次;默认情况下展示一次就够了
- 不要把横向条形统计图当作 DNA 确认图交付:正式确认优先展示
<用户名>-dna_feature_cloud.png。如果当前流程只生成了 <用户名>-dna_hotwords.png,它也必须是词云/特征云视觉,不能是横向 bar chart;看到旧版条形图时应重新运行新版 extract_dna.py 或改用 render_dna_feature_cloud.py。
-
基于实际 DNA 数据,主动向用户提 3-5 个具体问题(替代旧版"甩静态检查清单让用户自己对照"的做法)
问题必须满足以下规则:
- 每个问题都引用 DNA JSON 里的具体内容:举出实际短语、实际句长数字、实际开头片段;不要泛泛而谈
- 必须包含至少一个"区分文体要求 vs 个人风格"的问题——尤其当用户样本可能是某种特定文体(政府报告、合同、新闻稿、学术论文、产品文档等)时
- 不要让 3-5 个问题都围绕同一个 JSON 字段
- 问完后必须停下等用户回答,不要自己替用户做判断
参考问题模板(按用户实际 DNA 数据生成具体版本,不要逐字照抄):
- 你的样本里"<具体词或短语,从 signature_phrases 取>"出现了 N 次——是你的常用表达,还是项目类型/文体要求?
- DNA 显示你偏好<X字短句/长句>(实测平均句长 Y 字)——这符合你的自我认知吗?
- 我注意到你几乎不用"<某个词,从 blacklist_phrases 取>"——是因为你确实不喜欢这个词,还是样本里恰好没碰到?
- 你的样本看起来像[某种文体],其中"<某种结构模式>"很常见——这是文体格式要求,还是你自己的习惯?
- 词云显示"<高频词>"权重很高——这个词在你的写作中确实常用吗?
-
等用户回答后再继续
- 如果用户说"准"、"没问题"、"可以"→ 进入流程 B(改写)
- 如果用户指出某些地方不准 → 根据用户反馈调整
<用户名>-formal-dna.json(手动编辑),重新渲染词云图,再次确认
- 如果用户说"整体还行,但我还想补充 XXX" → 把用户补充的信息追加到 JSON 的
rewrite_rules 数组里
这一步的核心价值:DNA 不是"算出来就结束"的数据产品,而是"用户认可后才生效"的风格契约。没有用户确认这一步,后面改写得再好,用户也会觉得"不像我"。
DNA 版本管理
用户每次确认或修正 DNA,用 scripts/dna_versioning.py 存版本快照(save_new_version),不要直接覆盖:自动 +1 版写出 <用户名>-dna-vN.json,并更新当前版指针 <用户名>-dna.json。存完主动告诉用户:"这是第 N 版,旧版留着了,想退回说'用回上一版',想对比说'跟上一版比比'。" 听到「用回上一版 / 换回原来的」→ rollback(...);「跟上一版比比」→ diff_versions(...)。护栏:指针固定 <用户名>-dna.json,版本快照用 -vN 后缀(改写流程只认指针)。
流程 B:DNA 改写(复用)
前置条件
必须存在已完成 Step 3 确认的 <用户名>-dna.json 和 <用户名>-formal-dna.json,否则回到流程 A。
输入要求
用户提供一段待改写的文本(粘贴或上传 .md / .txt / .docx)。长度不限,但单次改写建议 ≤ 5000 字以保证质量。
执行步骤
Step 1:AI 套话检测
python3 scripts/detect_ai_slop.py --input <用户提供的文本或文件> --output outputs/debug/slop_detection_report.md
脚本会标记出:
- 高频 AI 套话(从
scripts/ai_slop_dict.py 加载词典)
- 可疑的句式模式(如"不仅…而且…"连续使用超过 2 次)
- 过度使用的连接词和总结性语句
输出 slop_detection_report.md,列出检测到的所有疑似 AI 套话及其位置。
Step 2:读取 DNA 文件
读取两个 JSON:
<用户名>-dna.json:统计型数据(签名短语、句长、emoji 等)
<用户名>-formal-dna.json:语义型画像(语气、结构习惯、改写规则)
Step 3:执行改写
python3 scripts/rewrite_with_dna.py \
--input <用户提供的文本或文件> \
--dna <用户名>-dna.json \
--formal-dna <用户名>-formal-dna.json \
--output outputs/rewrite_runs/<时间戳>_rewrite.md \
--report outputs/rewrite_runs/<时间戳>_rewrite_report.md
改写规则(按优先级;多目标冲突时,序号靠前者优先):
- 信息无损:原文每个事实点、数字、产品名、结论必须保留。
- 黑名单硬清除:DNA 中
blacklist_phrases 里的词组一个都不能出现。
- 签名短语自然植入:在合适处使用
signature_phrases,不要硬塞(每 150-200 字 1 个为宜)。
- 句长结构对齐:按
sentence_features 调整句长与节奏。
冲突取舍:宁可不塞签名短语,也不牺牲信息完整性(1 > 3);宁可保留信息,也不为对齐句长而删内容(1 > 4)。
长文分段协议:如果输入约 2500 字以上、含多个二级标题/章节,或用户明确说"整篇报告/长文",先主动告诉用户:"这篇较长,我按章节改,改完统一术语和数字。" 然后按章节或标题块逐块改写;分段只是逐块处理,不得重排章节顺序、不得擅自重组结构。合并后必须回查术语、事实数字、产品名、引用对象、标题层级和跨章节指代是否一致。
改写脚本会:
- 根据
detect_ai_slop.py 的检测结果,移除或替换 AI 套话
- 根据
signature_phrases,在适当位置自然植入用户的标志性短语
- 根据
sentence_features,调整句长和节奏(目标平均句长 ± 20% 范围内波动)
- 根据
openers / closers,调整开头和结尾的写法
- 根据
blacklist_phrases,确保不出现用户从不使用的表达
- 根据
emoji_policy,按用户习惯添加或不添加 emoji
- 根据
rewrite_rules(来自 formal-dna.json),应用用户专属的 4-6 条改写规则
Step 4:生成对比报告
脚本会输出 <时间戳>_rewrite_report.md,包含:
- 改动摘要:总共修改了多少处,分为哪几类
- Before/After 对比表:选取 5-10 个典型改动示例(原句 → 改写后)
- 风格匹配度评分:改写后的文本与 DNA 的匹配程度(基于 n-gram 重叠度、句长分布相似度等指标)
- 遗留问题提醒:哪些地方脚本无法自动处理,需要人工润色(如专业术语、特定语境的双关语等)
Step 5:⏸️ 必须停下,等用户确认改写效果
把改写后的文本和对比报告展示给用户,等待反馈。如果报告或调试信息显示有规则被跳过、降权、未命中,必须主动补一句:"有 N 条规则这次没应用(样本不稳 / 会伤信息),想知道哪几条说一声。" 用户追问"哪几条没应用 / 为什么没应用"时,列出具体规则和原因。
- 如果用户满意 → 完成
- 如果用户说"某些地方还不像" → 针对具体段落微调(你可以直接编辑
<时间戳>_rewrite.md,或让用户告诉你哪里不像,你手动修改)
- 如果用户说"太过了/用力过猛" → 降低 signature_phrases 的植入密度,重新跑 Step 3
- 如果用户说"还不够" → 增加某些特征的强度(比如更短的句子、更多的标志性短语)
改写的核心原则:不是"替换成另一种风格",而是"去掉 AI 的壳,露出用户的味道"。改写后的文本应该让熟悉用户的人一看就说"这确实像他/她写的"。
高级功能
多用户支持
同一个项目可以为多个用户维护不同的 DNA 文件:
outputs/dna_profiles/
├── zhangsan-dna.json
├── zhangsan-formal-dna.json
├── lisi-dna.json
├── lisi-formal-dna.json
改写时通过 --dna 和 --formal-dna 参数指定使用哪个用户的 DNA。
DNA 迭代优化
用户可以在使用过程中不断修正 DNA:
- 初次提取 → 确认 → 使用
- 使用中发现某些地方不准 → 手动编辑
<用户名>-formal-dna.json
- 积累了新的代表作 → 重新跑流程 A(覆盖旧的 dna.json)
- 长期使用后,DNA 会越来越精准
批量改写
支持批量处理多个文件:
python3 scripts/rewrite_with_dna.py \
--input inputs/to_rewrite/ \
--dna <用户名>-dna.json \
--formal-dna <用户名>-formal-dna.json \
--output outputs/rewrite_runs/batch_<时间戳>/ \
--batch
故障排查
常见问题
Q:提取的 DNA 不准确
- A:检查样本数量是否 ≥ 5 篇;运行
test_sample_sufficiency.py 诊断;确认模板剥离是否彻底(查看 strip_report.md)
Q:改写后还是有 AI 味
- A:检查
ai_slop_dict.py 是否覆盖了当前检测到的套话;手动编辑词典添加新条目;确认 blacklist_phrases 是否包含了用户痛恨的表达
Q:改写后不像用户写的
- A:检查
formal-dna.json 的 rewrite_rules 是否准确;回看 Step 3 的确认环节,用户是否有未充分表达的偏好;考虑增加样本重新提取
Q:脚本报错
- A:检查 Python 版本是否 ≥ 3.8;确认依赖已安装(
pip install -r requirements.txt);查看 outputs/debug/ 目录下的日志文件
技术架构
核心脚本说明
| 脚本 | 功能 | 输入 | 输出 |
|---|
extract_dna.py | 从清洗后的文本提取统计型 DNA | 模板剥离后的 .md 文件 | <用户名>-dna.json |
strip_template.py | 跨文档对齐,剥离字面模板 | 原始 .md/.docx 文件 | 剥离后的 .md + 报告 |
detect_ai_slop.py | 检测 AI 套话 | 待改写文本 | 检测报告 |
rewrite_with_dna.py | 基于 DNA 改写文本 | 待改写文本 + DNA 文件 | 改写后文本 + 对比报告 |
render_dna_feature_cloud.py | 渲染 DNA 特征云图 | <用户名>-formal-dna.json | PNG 图片 |
test_sample_sufficiency.py | 诊断样本充足性 | 原始样本文件 | 诊断报告 |
数据流
原始文档 (.docx/.md/.txt)
↓ docx_to_md.py (如果是 .docx)
清洗后的纯文本
↓ strip_template.py (模板剥离)
模板剥离后的文本
↓ extract_dna.py (DNA 提取)
<用户名>-dna.json (统计型) + <用户名>-formal-dna.json (语义型)
↓ render_dna_feature_cloud.py (可视化)
特征云图 (PNG)
↓ 用户确认
待改写文本
↓ detect_ai_slop.py (AI 套话检测)
检测结果
↓ rewrite_with_dna.py (基于 DNA 改写)
改写后的文本 + 对比报告
↓ 用户确认
最终成稿
注意事项
-
隐私安全:DNA 文件包含用户的写作风格特征,属于个人信息。不要将 <用户名>-dna.json 或 <用户名>-formal-dna.json 提交到公开仓库(已在 .gitignore 中排除)。
-
样本质量:DNA 质量取决于样本质量。确保样本是用户亲自撰写的内容,而不是他人代笔或大量引用的内容。
-
文体多样性:如果用户有多种写作风格(如工作邮件 vs 个人博客),建议分别为每种风格提取独立的 DNA,或在提取时明确告知脚本文体范围。
-
语言限制:当前版本主要针对中文写作风格优化。英文或其他语言的改写效果可能不如中文理想。
-
版本兼容性:DNA 文件格式可能随版本更新而变化。如果升级本 skill 后遇到兼容性问题,建议重新运行流程 A 提取新的 DNA。
更新日志
- v1.0 (2026-05-22): 初始版本发布
- 实现 DNA 提取和改写核心流程
- 支持 4 个 IDE 平台(Trae / Cursor / Claude Code / CodeX)的斜杠命令注册
- 完善模板剥离三层流程(确定性算法 + 语义识别 + 用户确认)
- 添加样本充足性诊断工具