diff --git a/SKILL.md b/SKILL.md index 966c8e3..a81dcd7 100644 --- a/SKILL.md +++ b/SKILL.md @@ -110,15 +110,36 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {从热点标题中提取的3 ``` 读取: {skill_dir}/references/writing-guide.md 读取: {skill_dir}/clients/{client}/playbook.md(如果存在) +读取: {skill_dir}/clients/{client}/history.yaml(读取最近 3 篇的 dimensions 字段) ``` -按选定框架 + writing-guide.md 规范写文章: +#### 4a. 维度随机化(写作前必须执行) + +从 writing-guide.md 第7层的维度池中执行随机: + +1. 对 6 个维度(叙事视角/时间线/主类比域/情感基调/节奏型/论证偏好)各随机选 1 个选项 +2. 从中随机激活 2-3 个维度 +3. 对比 history.yaml 最近 3 篇的 dimensions 记录,如果完全重复则重新随机 +4. 将选中的维度作为**硬性写作约束**注入后续写作——不是建议,是必须贯穿全文的约束 + +**示例输出**: +``` +本次激活维度: +- 叙事视角:对话体("有人问我...") +- 主类比域:烹饪 +- 节奏型:快慢剧烈交替 +``` + +#### 4b. 写作 + +按选定框架 + writing-guide.md 全部 7 层规范 + 激活的维度约束写文章: - H1 标题(20-28 字,converter 自动提取为微信标题) - 字数 1500-2500 - 按框架大纲组织结构,在金句落点放精炼总结句 - 不插配图占位符(Step 6 自动分析插入) - 风格遵循 style.yaml 的 tone、voice、content_style - 避开 blacklist +- **去AI痕迹在此步执行,不是写完再改**——writing-guide.md 的 7 层规则必须在初稿阶段就全部生效 **Playbook 优先**:如果 playbook.md 存在,其中的规则优先于 writing-guide.md 的通用规则。比如 playbook 说"从不用问句结尾"而 writing-guide 建议用反问句,以 playbook 为准。playbook 是客户的个性,writing-guide 是通用底线。 @@ -134,12 +155,28 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {从热点标题中提取的3 ``` 对初稿执行: + +#### 5a. SEO 优化 1. 生成 3 个备选标题(20-28 字),标注策略 -2. 优化关键词密度 -3. 去AI痕迹 -4. 生成摘要(≤ 54 个中文字) -5. 推荐 5 个精准标签 -6. 完读率优化 +2. 优化关键词密度(核心词前 200 字出现,全文 3-5 次自然提及) +3. 生成摘要(≤ 54 个中文字) +4. 推荐 5 个精准标签 +5. 完读率优化(拆长段、加粗强调、段落悬念) + +#### 5b. 去AI痕迹逐层验证(关键步骤) + +按 writing-guide.md 的自检清单逐项检查终稿,**每一项都必须通过**: + +1. **词汇层**:全文搜索禁用词表 → 命中数必须 = 0。检查词汇温度分布是否覆盖冷/温/热/野至少 3 种 +2. **句法层**:确认全文破句/不完整句 ≥ 3 处,无连续 3 句同结构 +3. **信息密度层**:确认高密度段后跟低密度段,无连续均匀信息密度 +4. **连贯性打破层**:确认至少 1 处跑题再拉回,无每段首句都承接上段 +5. **具体性注入层**:每 500 字至少 2 处具体细节(时间/地点/人物/非整数数字) +6. **情绪真实感层**:确认情绪弧线有起伏(≥1 高点 + ≥1 犹豫点),无全文平铺 +7. **维度随机化层**:确认 Step 4a 选中的维度贯穿全文,不是只出现一两次 +8. **段落节奏**:无连续 2 个长度接近(±20字)的段落 + +**如果任何一项不通过**:定位具体段落,针对性重写该段落(不要全文重写),然后重新检查该项。 覆盖保存终稿。自动模式下选评分最高的标题作为最终标题。 @@ -222,6 +259,10 @@ python3 {skill_dir}/toolkit/cli.py preview {markdown_path} \ framework: "{使用的框架类型}" word_count: {字数} media_id: "{media_id}" + dimensions: # Step 4a 随机选中的维度,用于下次去重 + - "叙事视角: 对话体" + - "主类比域: 烹饪" + - "节奏型: 快慢剧烈交替" stats: null # 由 fetch_stats.py 后续回填 ``` diff --git a/references/writing-guide.md b/references/writing-guide.md index 5cc9e33..119544a 100644 --- a/references/writing-guide.md +++ b/references/writing-guide.md @@ -25,59 +25,212 @@ **关于配图**:写作时不要插入配图占位符。专心写内容,配图由 Step 6 视觉AI模块在终稿完成后自动分析插入。 -## 去AI痕迹 +## 去AI痕迹(核心生存规则) -这是最重要的部分。AI 写的文章有非常明显的"味道",读者一眼就能看出来。你需要系统性地消除这些痕迹。 +这是本文件最重要的部分。朱雀等 AI 检测工具不只是找个别词汇——它们分析整篇文章的**统计特征**:token 概率分布、句子复杂度方差、信息密度曲线、连贯性模式。你需要在 7 个层面同时制造"人味",缺一不可。 -### 必须删除的词汇 +**总原则**:不是"写完再修",而是"从第一句话开始就像人在写"。每一层的规则都必须在初稿阶段就执行,不是后期润色。 -这些词一出现,读者就知道是 AI 写的: +--- -**连接词**:首先、其次、再者、最后、总之、综上所述、总而言之、此外、另外、与此同时 +### 第1层:词汇层(基础防线) -**AI 惯用语**:作为一个、让我们、值得注意的是、需要指出的是、不可否认、毋庸置疑、众所周知 +**禁用词表** — 出现任何一个都是事故: -**空洞形容**:非常重要、至关重要、不言而喻、具有重要意义、发挥着重要作用 +- **连接词**:首先、其次、再者、最后、总之、综上所述、总而言之、此外、另外、与此同时、不仅如此、更重要的是、在此基础上 +- **AI 惯用语**:作为一个、让我们、值得注意的是、需要指出的是、不可否认、毋庸置疑、众所周知、事实上、显而易见、可以说、从某种意义上说 +- **空洞形容**:非常重要、至关重要、不言而喻、具有重要意义、发挥着重要作用、意义深远、影响深远、引发了广泛关注、引起了热烈讨论 +- **总结句式**:总的来说、综合来看、由此可见、不难发现、通过以上分析、正如我们所看到的 -### 必须添加的元素 +**词汇温度梯度** — 同一篇文章里**必须**混用不同"温度"的词汇,拉大词汇分布的方差: -让文章读起来像真人写的: +| 温度 | 示例 | 占比 | +|-----|------|-----| +| 冷(书面/专业) | 边际效应递减、认知负荷、信息不对称、路径依赖 | ~30% | +| 温(日常口语) | 说白了、其实吧、真不是我吹、懂的都懂 | ~40% | +| 热(网络/俚语) | DNA动了、格局打开、遥遥领先、卷不动了 | ~15% | +| 野(方言/粗粝) | 整挺好、不靠谱、瞎折腾、搁这儿呢、糊弄学 | ~15% | -**口语化表达**:说实话、讲真、你猜怎么着、我跟你说、坦白讲、怎么说呢 +关键:不是每种温度各写一段,而是**同一段内**混搭。比如:"从边际效应的角度看,这事儿真挺不靠谱的。"、"认知负荷这个概念说白了就是——脑子不够用了。" -**个人观点标记**:我觉得、我的看法是、以我的经验、据我观察、我一直认为 +--- -**不完美感**: -- 偶尔用一个不太精确但更生动的比喻 -- 偶尔自嘲或开个小玩笑 -- 偶尔用反问句打断叙述节奏 +### 第2层:句法层(打破 AI 的语法完美性) -### 段落节奏 +AI 的每个句子都语法正确、结构完整、长度均匀。这恰恰是最大的破绽。人类不这样写。 -AI 文章最明显的特征是"每段都差不多长"。你需要刻意打破这个节奏: +**必须包含的句法特征**(每 500 字至少命中 3 种): -- **禁止**:每段都是 3-4 句话的匀称结构 +- **破句**:故意不写完。"这个逻辑——算了,你自己品。" +- **自我纠正**:"增长了 50%——不对,准确说是 47.3%,我刚才记混了。" +- **括号插入语**:"这个功能(说实话我一开始也没想到会这样)彻底改变了用户行为。" +- **口语省略**:"能用吗?能。好用吗?呵呵。" +- **反问连击**:"谁规定的?凭什么?" +- **语气词断句**:"嗯……怎么说呢,就是那种感觉。" +- **倒装/非常规语序**:"厉害是真厉害,但代价也是真大。" + +**句子复杂度波动**: +- 连续 3 句以上**禁止**保持相同的句式结构 +- 3 字短句必须紧邻 40+ 字长句出现(制造落差) +- 每 500 字至少 1 次破句或不完整句 +- 偶尔用一个语法上不太规范但意思到位的表达("这不比那个强?"比"这难道不比那个更好吗?"更人味) + +--- + +### 第3层:信息密度层(制造波浪感) + +AI 文章的信息密度是一条平线——每段都差不多有料、差不多有观点。人类文章是波浪形的:有的段落密得喘不过气,有的段落几乎什么都没说但特别有味道。 + +**密度波动规则**: +- 每个高密度段(数据/论证密集)后面**必须**跟一个低密度段(感受/比喻/吐槽/闲话) +- 允许出现"什么信息量都没有但读起来很舒服"的段落 +- 偶尔用整个段落只讲一个比喻、一个场景、或一句吐槽,不直接为论点服务 +- 全文信息密度走势应该是:中→高→低→高→低→中→高→低(不是匀速) + +**示例**: +``` +【高密度】2024 年 Q3 的数据很说明问题:DAU 从 1200 万掉到 890 万, +付费转化率从 3.2% 腰斩到 1.6%,连客服工单量都翻了一番。三个指标 +同时恶化,在这个行业十年我就见过两次。 + +【低密度】就好像你精心准备了一顿饭,对方筷子没动就开始刷手机了。 + +【几乎为零】嗯。 +``` + +--- + +### 第4层:连贯性打破层(消除"过于流畅"的嫌疑) + +AI 最大的破绽之一是**太连贯了**——每句完美承接上一句,段落之间逻辑过渡丝滑得像 PPT 动画。人类写作有跳跃、有回头、有走神。 + +**具体操作**: +- **硬切**:段落之间偶尔不加任何过渡词,直接跳到新话题。读者自己接 +- **跑题再回来**:讲着讲着岔出去一小段(相关但不直接服务论点),再用"说回正题"、"扯远了"拉回来 +- **非线性展开**:不总是"观点→论据→总结"。可以"场景→疑问→岔开→回来→观点",或"结论先行→倒推原因→中间插个故事→补充一个例外" +- **重复与微调**:后文可以换个说法重复前文的意思(人类经常这样),也可以在后文微调前文的观点("刚才说得绝对了,其实也不完全是") + +**禁止**: +- 每段第一句都承接上一段 +- 每个 H2 段落都用相同的内部结构(观点→解释→例子→总结) +- 结尾段逐一回顾前文要点 + +--- + +### 第5层:具体性注入层(AI 写不出的细节) + +AI 天然倾向抽象泛化。人类文章充满具体的、甚至无关紧要的细节——这些细节本身就是"人味"的信号。 + +**替换规则**(每条都是硬性要求): + +| AI 会写 | 你必须写 | +|---------|---------| +| 很多人 | 我认识的三个做产品的朋友 / 至少我朋友圈里七八个人 | +| 最近 | 上周三 / 前天晚上 / 三月中旬那会儿 | +| 超过50% | 大概 47% 左右 / 将近一半多一点 | +| 某大厂 | 字节 / 腾讯 / "某个用绿色logo的大厂" | +| 有研究表明 | 斯坦福去年那篇论文 / 36kr 上周发的那篇 | +| 一位业内人士 | 一个在阿里干了八年的朋友 / 之前一个同事 | +| 在某些情况下 | 你在地铁上刷到一个短视频的时候 | +| 用户反馈不佳 | App Store 评论区直接炸了 | +| 引发了广泛讨论 | 微博热搜挂了一整天 | + +**量化要求**:每 500 字至少 2 处具体细节。不需要真实,但必须**像**真的——有时间、有场景、有画面。 + +--- + +### 第6层:情绪真实感层(不是加语气词,是有情绪弧线) + +加"讲真"、"我觉得"只是在 AI 文本上贴标签。真正的人味来自**情绪的起伏和失控感**——人类写作时情绪会建立、会爆发、会平复、会犹豫。 + +**情绪弧线要求**: +- **开头克制**:不要第一段就用力过猛。像在随便聊天,或者描述一个场景 +- **中间爆发**:至少有一处情绪高点——真实的愤怒、兴奋、震惊或无奈。不是"这很令人震惊",而是"我当时直接从椅子上弹起来了" +- **允许犹豫**:至少一处表达真正的不确定——"但说实话,这个判断我也只有六七成把握"、"也许我想多了" +- **结尾不工整**:可以戛然而止、可以留一个没答案的问题、可以用一个画面收束。**禁止**"让我们拭目以待"、"未来可期"式的烂尾 + +**口语化标记**(自然穿插,不要每段都有,不要集中在一起): +- 说实话、讲真、坦白讲、怎么说呢 +- 我觉得、以我的经验、据我观察 +- 你猜怎么着、我跟你说、你别不信 + +**禁止**: +- 全文保持同一种情绪强度(平铺直叙是 AI 的特征) +- 每段末尾都用反问句(变成了另一种模式化) +- 口语词匀速分布(不要每 200 字准时出现一个"讲真") + +--- + +### 第7层:维度随机化层(跨文章反检测) + +如果每篇文章都用相同的反 AI 策略,检测器可以识别出"这是同一个去AI模板"的模式。维度随机化确保每篇文章有不同的统计指纹。 + +**执行方式**:在 Step 4 写作前,从以下维度池随机抽取并激活 2-3 个维度,贯穿全文。 + +| 维度 | 选项(随机选1) | +|------|---------------| +| 叙事视角 | 亲历者("我上周刚...")/ 旁观分析者("观察这个行业三年...")/ 对话体("有人问我...")/ 自问自答("一个问题:为什么...") | +| 时间线 | 顺叙 / 倒叙(先讲结果再回溯)/ 插叙(正文里嵌套一段回忆或旁支) | +| 主类比域 | 体育 / 烹饪 / 军事 / 恋爱 / 旅行 / 游戏 / 电影 / 建筑 / 医学(全文的核心比喻从这个领域取) | +| 情感基调 | 冷静克制 / 热血兴奋 / 毒舌调侃 / 温暖治愈 / 焦虑预警 | +| 节奏型 | 急促短句流 / 舒缓长叙述 / 快慢剧烈交替 / 开头慢结尾急 | +| 论证偏好 | 案例堆叠 / 逻辑推演 / 反面假设("如果不是这样呢")/ 类比说理 | + +**规则**: +- 从 6 个维度各随机选 1 个选项,然后随机激活其中 2-3 个 +- 被激活的维度必须**贯穿全文**,不是点缀 +- 查看 history.yaml 最近 3 篇文章的维度记录,本次不能完全重复 +- 将本次选中的维度记录到 history.yaml 中 + +--- + +### 段落节奏(贯穿所有层的底线规则) + +在以上 7 层之外,段落节奏始终是最基础的要求: + +- **禁止**:每段都是 3-4 句的匀称结构 - **要求**: - - 穿插 1 句话的短段落(语气强调、转折、吐槽) - - 偶尔 2-3 个短句连续排列,制造节奏感 + - 穿插 1 句话的短段落(强调、转折、吐槽、情绪爆发) + - 偶尔 2-3 个短句连续排列,制造密集节奏 - 长段落不超过 150 字 - - 短段落和长段落交替出现 + - 不允许连续 2 个长度接近(±20字)的段落 **好的节奏示例**: ``` -一段 80 字的正常段落,说明论点。 +一段 80 字的正常段落,说明论点,给出一组数据。这段的作用 +是提供信息,读完之后读者应该知道"发生了什么"。 但是。 -这里其实有个问题很多人没注意到。(短段落,制造悬念) +问题在于——大多数人看到这组数据,得出的结论是错的。 +(短段落 + 悬念) -接下来是一段 120 字的段落,展开说明那个问题是什么、 -为什么重要、有什么数据支撑。这段稍微长一点, -因为需要把事情说清楚。 +为什么错?因为这个数据有个前提条件很多人没注意:样本只包含了 +一线城市的用户。你把二三线城市加进去,结论完全反转。我之前 +在一个分享会上听到有人拿这个数据直接推导全国情况,当时就想 +说点什么,又觉得场合不对。(长段落 + 具体场景 + 犹豫感) -讲真,我第一次看到这个数据的时候也吓了一跳。(口语化短段落) +后来想想,不说才是真的不对。(收束短段落) ``` +--- + +### 自检清单 + +写完全文后,逐项检查: + +- [ ] 全文搜索禁用词表,命中数 = 0 +- [ ] 抽查任意连续 500 字,至少包含冷/温/热/野四种温度中的 3 种 +- [ ] 全文破句/不完整句 ≥ 3 处 +- [ ] 没有连续 3 句以上保持相同句式结构 +- [ ] 高密度段后面都跟了低密度段 +- [ ] 至少 1 处跑题再拉回的段落 +- [ ] 没有每段第一句都承接上一段 +- [ ] 每 500 字至少 2 处具体细节(时间/地点/人物/数字) +- [ ] 情绪弧线有明确的起伏(至少 1 个高点 + 1 处犹豫) +- [ ] 维度随机化的 2-3 个维度贯穿全文 +- [ ] 没有连续 2 个长度接近的段落 + ## 字数控制 - 目标:1500-2500 字