【学习笔记】human-writing——让 AI 写出活人感的中文 Skill
项目地址:KKKKhazix/human-writing(MIT 协议,v1.0.0)。这是一个通用中文创作与改稿 Skill,显示名「活人感写作」,目标是让知乎回答、论坛长帖、公众号文章、博客、人物故事、行业解读、小说、口播和演讲稿等场景下的 AI 输出,读起来像「一个具体的人在认真说话」,而不是机构腔、营销腔或模型腔。
这篇笔记记录我读完它的全部文件(SKILL.md 入口 + 5 份 references 参考文件 + check_prose.py 检查脚本)后的理解。它的设计很有启发性,核心不在某一条单点规则,而在它把写作约束拆成分层的、按需加载的模块这件事本身。
一句话定位
一套通用中文创作与改稿 Skill。它先确认有没有东西可写,再处理结构、节奏和措辞。
它管三件事,对应一个三列表格。
| 01 材料 | 02 推进 | 03 中文 |
|---|---|---|
| 现实写作核准事实、数字、引语和亲历。虚构写作检查人物、行动与因果。 | 每个新段落都要带来新事实、新动作、新例子、新区别或新后果。 | 白话打底,重视词序、停顿、照应和分寸,清除报告腔与模型腔。 |
这套顺序很关键:材料 → 推进 → 中文。先解决”有没有东西可写”,再解决”结构有没有往前走”,最后才是”句子顺不顺、有没有 AI 味”。大多数写作提示词把顺序搞反了,一上来就抠词藻,结果是在给一篇空文章做美容。
它最反直觉的设计:材料门槛优先于动笔
SKILL.md 开篇第一关不是提纲,不是语气,而是一个冷冰冰的提问。
这一关先于提纲和动笔。用户要求的字数不能跳过它。
它把作品分成现实写作和虚构创作两条入口,在动笔前就分流。
- 现实作品靠两类材料。用户明确提供的经历、事实、数字、原话,加上能核验的案例、数据、流程。模型临时想出的”比如有个人”、没有来源的典型场景、常识推演、抽象观点的后果、比喻和同义改写,全部不能拿来撑篇幅。
- 虚构作品可以创造人物、现场、对白、心理与结局,但每个主要段落或场景仍要有动作、选择、关系变化、信息变化或后果。只换景色和说法,没有事情发生,也算注水。
它甚至给了一条可量化的硬线。非虚构作品计划写到一千二百字时,先在内部逐条写出至少五件具体材料,并注明它来自用户哪句话或哪份可靠来源。只写一个概括性的类别不算,五件材料还要能组成一条实际过程,不能是五句相邻的道理。
列不出五件,就先别写长稿。这一轮不能输出标题和长文正文。
材料不够时只有三条出路。
- 有公开材料可查时,先研究,研究后重新计数。能用检索工具却没有检索,仍然算没有材料。
- 需要用户材料时,一次问完最多三个问题,且不同时交稿。
- 用户明确不许追问时,缩小题目,最多交一篇六百字左右的短答。
这里最狠的一句是。宁可明显短于目标字数,也不能用假例子和重复解释填满。篇幅是目标,材料边界是底线。 它直接拦截了一种最典型的模型稿:用户只给三条抽象想法又要求一千多字,模型就把每条换四种说法写成十二段。
现实稿动笔前还要记清每件重要材料从哪里来,说不出来路的内容不能托住事实段落。虚构稿则改成检查每个场景由哪个人物目标、动作或变化托住。这是一组对照设计的:现实稿查”出处”,虚构稿查”托住”,都不允许内容悬空。
模块化加载:按任务读取,而不是一次塞满
整个 Skill 的结构是这样的。
human-writing/
├── SKILL.md 入口:材料门槛、现实与虚构分流、写作流程、交付禁令
├── references/
│ ├── forum-prose.md 知乎回答、论坛长帖、公众号、长篇散文写法
│ ├── reality.md 真人、历史、新闻、数据、评测、亲历的事实边界
│ ├── fiction.md 小说、故事、对白、剧本的创作规则
│ ├── formats.md 短内容、口播、演讲、教程、评测、诗歌等形式规则
│ └── revision.md 初稿完成后的删改、节奏、词语、事实检查(七遍审稿)
└── scripts/
└── check_prose.py 检查成稿是否命中明确禁用项这个结构本身是一种提示词工程方法论。SKILL.md 明确要求按任务按需加载,而不是为了保险一次全读。
- 新写或大幅重写知乎回答、论坛长帖、公众号、博客、评论、人物稿和行业稿,读
forum-prose.md。 - 真人、历史、新闻、产品、数据、评测、教程、商业信息和用户亲历,另读
reality.md。 - 小说、故事、虚构散文、对白和剧本,改读
fiction.md。用户要求帖子体小说或第一人称故事时,再同时读forum-prose.md。 - 短内容、个人叙事、教程、评测、口播、演讲、剧本、对白和诗歌等形式需要特殊处理时,读
formats.md。 - 初稿完成后再读
revision.md。不要在动笔前加载详细审稿规则。
这条「初稿前不加载审稿规则」的约束我印象很深。它对应了 revision.md 开头的一句话。
这份文件只在初稿完成以后读取。它不能参与第一稿生成。
背后的逻辑是创作时以正向目标为主,不要在动笔阶段就一边写一边自我审查,那样会把文章改得过于安全、过于正确,反而失去活人感。改稿是另一份独立工作,留到初稿成型后再做。
多条规则冲突时的优先级
Skill 还给了一套明确的冲突仲裁顺序,这在复杂任务里非常有用。
- 当前用户明确指定的文体、现实或虚构性质、语气和交付形式。
- 作品对现实作出的承诺。现实内容服从事实边界,虚构内容服从人物、因果与世界规则。
fiction.md、reality.md和formats.md中与当前任务直接相关的规则。forum-prose.md与 SKILL.md 里的默认散文写法。revision.md的改稿规则与检查脚本的提醒。
核心原则是具体文体覆盖通用写法。现实稿的来源要求不能压到纯虚构上,散文的完整主干不能压到诗歌分行和人物对白上,检查脚本的警告项不能替作者决定文体。这个分层让 Skill 既能管长篇散文,又能兼容剧本和诗歌,而不会把所有文体强行套进同一个模具。
“活人感”到底从哪里来
这是整个 Skill 最容易被误解的概念。SKILL.md 特意强调。
不要把”活人感”理解成口头禅、粗口、错别字和网络梗。它首先来自材料,其次来自说话位置,最后才是语气。
forum-prose.md 进一步拆解了说话位置这件事。它要求动笔前在内部回答五件事,但不把答案原样交给用户。
- 谁在说这件事。他凭什么知道,又有哪些地方只是在推测。
- 什么事情让他现在想说。可以是一条新闻、一次经历、一个疑问或一件一直想不通的小事。
- 手里有哪些能托住文章的东西。优先找动作、数字、时间、地点、原话、失败、代价与后来结果。
- 他对哪一点有明确判断。这个判断依据什么,又到哪里为止。
- 读者知道上一段以后,最自然会追问什么。
它反复说明一个观点:没有亲历不等于作者要消失。作者仍然可以说明自己更相信哪种解释、哪条材料让他改变看法、哪个流行说法让他觉得不对。第一人称表达判断,不等于伪造第一人称经历。
forum-prose.md 里有一段话特别清楚地点出了现实文章最有活人感的部分。
现实文章最有活人感的部分往往是知识的来路。虚构帖子写的是叙述者在故事内部怎样知道、误解和发现,不替它伪造现实出处。
也就是说,写清”我在哪里知道这件事""起初哪里想错了""哪条材料改变了判断""哪一块到现在仍拿不准”,这些来路信息才是活人感的核心来源,而不是”老铁""谢邀""泡杯茶慢慢说”这类论坛服装。
Skill 还专门用一节「不要穿论坛服装」来拦截这种误解。烟头、啤酒、冷馒头、深夜屏幕和突然响起的电话,也不能凭空替文章增加真实感。现实稿里,没有来源的精确时间、神态、天气、房间摆设和对白都是假细节。假细节越具体,AI 味越重。
推进规则:每段必须带来新东西
这是 forum-prose.md 的主干。它把”文章怎样往前走”还原成局部问题。
长帖可以有总方向,不需要预先搭一副起承转合的架子。写完一段,只问一句,读者现在最想知道什么。
它列了一组常见的自然推进关系。
- 先讲发生了什么,读者会追问为什么。
- 先给一个判断,读者会追问你凭什么这样想。
- 先讲一个人的处境,读者会追问他后来怎么办。
- 先解释通常情况,读者会追问眼前这次哪里特殊。
- 先讲结果,读者会追问中间到底出了什么岔子。
然后给了一条硬性要求。新段落必须增加一件新东西。新的事实、新的动作、新的例子、新的区别或新的后果都可以。同一观点改换说法不算推进。
revision.md 的第二遍审稿就是专门查这件事。给每段标一个主要作用(动作、事实、解释、例子、疑问、判断、背景或情绪),连续几段只做同一件事通常会拖。它甚至给了一个压缩试验。
做一次压缩试验。若删掉三分之一以后事实、动作、判断和阅读体验几乎没变,原稿就是在注水。保留删短后的版本。
它还点破了长文最常见的注水方式。把一个观点解释四遍。 整篇靠”第一层""另一层""更深处”推进时,把这些路标删掉,让事实差异与读者问题承担连接。
句子层面:先交主干,白话打底
forum-prose.md 的句子规则很实用,核心是「主干早点来」。
别写成这样。
在经历了长达数年且始终缺乏稳定收入来源的反复尝试以后,最终促使他改变原有方向的,是一次来自老同事的邀请。
可以写成这样。
他折腾了几年,一直没挣到稳定的钱。后来老同事找过来,问他愿不愿意一起做项目,他才换了方向。
道理是读者先看到这个人怎样折腾、谁来找他,随后才落到换方向,不用先扛完一大串定语。一句话里有三四个”的”,先找真正做事的人,把他放到前面。
它还提倡「沿着动作往后长」的汉语习惯。一个动作带出新东西,下一句接着讲这件东西。一个结果出现,下一句讲谁受到影响。同一个人连续做几件事,指向清楚时可以省去重复的”他”。
关于古意和白话的平衡,Skill 的态度也很克制。
白话打底,古意看场合。“天快亮了,他还没回家”本身就是好中文。“天将明,人未归”更紧,也把语气推远了一些。周围的文章承得住这种距离时才用。
成语和典故只在三个条件同时成立时留下:意思准确,普通读者不用查,放进去比白话更省。需要另起一句解释的典故,说明它没有真正进入文章。
它还点出一个容易踩的坑。不要为了所谓韵律,把句子凑成一排四字格。 散文先看意思怎样推进,意思顺了,声音才有来处。
成稿硬禁令:不可协商的红线
SKILL.md 列了一组成稿绝对不能出现的项,覆盖标题、小标题、正文、图片说明和引用转述。命中一项就不能交稿。
- 不用中文冒号「:」和英文冒号「:」(网址、代码与机器字段除外)。
- 不用破折号「—」「——」和连接号式破折号「–」。
- 不用「不是……而是……」「并非……而是……」「不在于……而在于……」「与其说……不如说……」「不只……还……」「表面……实际……」「看似……实则……」及其变形。
- 不用「不丢」「说白了」「说穿了」「先说结论」。
- 不把「更微妙的是」「还有一层」「只说对了一半」「值得注意的是」「需要指出的是」「从某种意义上说」当洞察路标(文字确实在说楼层、数量等本义时不受影响)。
- 不用商业汇报和模型惯用黑话替普通事情抬价。
- 非虚构内容不用仓库、抽屉、温度、死亡、坍塌、浪潮、钥匙、底座等借喻包装抽象概念(文章真的在写这些东西时不受影响)。
- 原话命中这些禁令时,改成转述或省略,不能靠引号保留。
这组规则初看很严苛,甚至有点反直觉(连冒号和破折号都禁)。但它的意图很清楚:这些都是模型最容易用来”显得深刻”的廉价句式。翻案句(不是 A 而是 B)尤其典型,它用对比制造一种洞察感,实际上往往只是把同一个意思换方向说一遍。
修改违禁句时的处理顺序也值得学。先找它原本想说的事实,随后用普通句子说出来。不要寻找另一种漂亮句式替换。 否则就是从一种 AI 味换成另一种 AI 味。
revision.md 的七遍审稿法
这是我最想详细记录的部分。revision.md 把改稿拆成七遍,每遍只做一件事,顺序固定。
第一遍看谁在说。 读完回答四件事:作者凭什么知道,哪一处能看出他真的在意,哪个判断有材料托着,哪几段换一个模型也能原样写出来。第四类段落优先处理,补不东西就删。不要用增加”我觉得""说真的”修复匿名感,声音来自取舍,不来自代词。
第二遍看文章怎样往前走。 给每段标主要作用,连续几段只做同一件事会拖。给每段写一个不公开的材料出处(现实稿)或标出它由哪个人物目标托住(虚构稿)。只能写出”这是进一步解释”或”这是可能的影响”,说明没有新东西,删到长度与材料相称。
第三遍拆掉表演性中文。 这一遍最细,分成五类。
- 假深刻。单独截图很好看、放回正文却没有增加事实、解释或情绪的句子,大部分删掉。连续几段都用一句短判断收尾,留下最有材料的一处。
- 假具体。搜索精确时间、天气、神态、房间摆设、烟酒食物和突然出现的原话。现实稿逐项问它来自哪里,虚构稿只问它是否属于当前视角、是否影响行动。
- 假口语。“老铁""兄弟们""咱就是说”只有当前说话者真会这样说时才留。不要为制造活人感主动添加粗口、错别字、三连省略号和括号吐槽。
- 抽象名词。一句话能换进十篇商业文章,说明它没有当前材料。
- 比喻换场。现实散文里道路、战争、建筑、温度、仓储、海洋、身体等借喻短距离出现三套时,先全部还原成本义。本义已经清楚,一个也不用放回。
第四遍听一遍中文顺不顺。 圈出”……的,是……”和一句里多个”的”,先找做事的人。顺着每个逗号和句号看后一句接的是不是前一句刚出现的人、物或动作。读出声,哪里需要回头找主语、哪里一口气读不完、哪里每段都在同一个位置停,都要改。动作后面少解释一句,读者已经能看见人物犹豫就不要补”他很犹豫”。
第五遍清掉绝对不能出现的东西。 按硬禁令逐项全文搜索。这里把禁用词分成了两类。
- 绝对禁词(必须改):赋能、抓手、商业闭环、价值闭环、闭环、能力沉淀、打法、拉通、底层逻辑、顶层设计、认知跃迁、价值释放、能力建设、降本增效、内容矩阵、全链路、组合拳、打开想象空间、想象空间、结构性机会、关键命题、深层逻辑、技术底座、公共底座、技术主权、单点风险、主脊柱、材料锚点、认知增量、迭代闭环,共 30 个词。改成人、动作、钱、时间与后果。
- 语境词(本义准确时保留):沉淀、颗粒度、对齐、协同、链路、生态位、心智、范式、方法论、核心变量。确实表示化学沉淀、排版对齐、生态学概念等不可替代本义时保留,只是在给普通事情抬价时改写。
第六遍核现实或设定。 现实稿核时间、数字、身份、引语、因果与第一人称动作,核验说明留在后台。虚构稿核人物知道什么、时间空间、伤势物件与世界规则。混合稿核现实中必须准确的部分与创作空间有没有彼此冒名。
第七遍查结尾。 把最后两段分别删掉再读,删掉更有力就让文章提前结束。最后一段重新概括全文,即使概括得很漂亮,也先删掉。搜索”时代、文明、未来、世界、历史、奇迹、所有人、全人类”,正文没有持续处理这个尺度,结尾回到具体事实、人物动作或当前判断。开头物件在结尾回来时,确认读者对它的理解已经改变,含义没变不必回来打卡。
这七遍的顺序本身就是一种审稿哲学:先救人,再清句子。先保护已经活着的地方,再拆掉模型摆出来的姿势。
最后还有一句”冷读”收尾。
暂时忘掉所有规则,只回答。哪里让我相信作者确实知道这件事。哪里让我愿意继续读。哪一段像人在处理一个问题,哪一段像模型在完成写作任务。哪句话说得比材料大。文章在哪一句已经结束。
check_prose.py:把硬规则变成可执行的检查
这个 Python 脚本把上面那些软约束里的”硬”部分做成了自动化检查。它只报警,不自动改文。核心设计原则在 SKILL.md 里反复强调。
检查脚本只能执行已经写明的硬禁令,警告项不能替作者决定文体。 检查脚本里的硬禁词必须与 revision.md 完全一致。增加或删除硬禁词时,同一轮修改脚本,不能让脚本偷偷多出一套规则。
这条约束保证了脚本和文档永远是同步的单一真相源。
脚本的工作流程是这样的。先用 mask_non_prose 屏蔽代码块、网址、HTML 标签和 frontmatter,只检查正文,同时保留字符位置和换行,这样报错时能给出准确的行号。然后分两类输出。
**失败项(failures,返回退出码 1)**是硬禁令,命中就必须改。
- 禁用标点:中文冒号、英文冒号、破折号、连接号式破折号。
- 硬停词:不丢、说白了、说穿了、先说结论。
- 绝对禁用的黑话:那 30 个商业模型黑话词。
- 模型路标:更微妙的是、还有一层、只说对了一半、值得注意的是、需要指出的是、从某种意义上说(用正则匹配,会排除本义用法)。
- 禁用翻案句:用一组正则
PIVOT_PATTERNS匹配「不是……而是」「并非……而是」「不在于……而在于」「与其说……不如说」「不只……还/也」「表面……实际/实则」「看似……实际/实则」。
**提醒项(warnings,不影响退出码)**是形状检测,需要人工判断。
- 语境词。沉淀、颗粒度、对齐等 10 个词,本义准确时保留。
- 洞察路标过多。真正、本质上、更深层次、归根结底、换句话说、核心是、关键在于、这意味着等”软”路标,超过阈值(每 900 字 2 处)提醒。
- 长前置成分。“在……以后,""那些……的,""真正让……的,是”这类左分支句式,主干可能来得太晚。
- 重定语句。汉字数 ≥38 且含 4 个以上”的”的长句。
- 短段鼓点。可识别段落中 75% 以上只有一句话,可能形成统一的短段鼓点。
- 连续短促单句段。连续 4 个汉字数 ≤24 且只有一句话的段落。
- 段落开场重复。同一个开场词(其实、不过、当然、所以、但是等)出现 4 次以上。
- 多套比喻聚集。800 字内出现 3 套以上借喻(温度、生死战争、建筑灾害、仓储租赁、道路竞赛、机器器官、海洋航行七组意象词库)。
这套设计很巧妙。失败项是确定性规则,可以用脚本机械执行;提醒项是统计性形状,只能提示作者回头人工判断。 脚本永远不替作者决定文体,诗歌、剧本和实验写作只把失败项当硬要求,散文形状警告服从具体文体。
比喻聚集的检测尤其有意思。它不是简单禁用比喻,而是检测”短时间内出现多套不同来源的借喻”这种典型的模型化写作模式。一个段落里同时出现温度、战场、仓库三套比喻,基本可以判定是在用华丽词藻掩盖材料不足。
几个值得记住的设计取舍
读完整个 Skill,我觉得有几个设计决策值得单独拎出来,它们代表了作者对”如何用提示词约束 AI 写作”的成熟思考。
第一,把材料检查放在动笔之前。 这是最反直觉也最有效的一条。大多数写作提示词假设材料已经够了,直接进入结构和语言层。这个 Skill 反过来,先确认”有没有东西可写”,材料不够就允许缩短篇幅,甚至允许只交六百字短答。它把”宁可短不能假”写成了硬规则。
第二,现实与虚构在入口处分流,用各自的标准审稿。 现实稿查出处,虚构稿查”托住”,两条线互不污染。现实稿不能用想象补事实,虚构稿不需要为创造出来的细节寻找现实出处。这避免了把纪实写作的来源要求强加到小说上,也避免了把小说的创造自由滥用到纪实上。
第三,初稿前不加载审稿规则。 创作时以正向目标为主,改稿是独立工作。这对应了人类写作里”先写后改”的常识,但在提示词工程里很少有人这样设计,因为把所有规则一次给模型最简单。这个 Skill 选择了更复杂但更合理的按需加载。
第四,硬规则和软规则分离,软规则不交给脚本。 脚本只执行写明的硬禁令,警告项只提示不决策。这保证了脚本不会偷偷变成一个”自动改文器”,把文章改得面目全非。
第五,禁令修改时文档和脚本必须同步。 增加或删除硬禁词时,同一轮修改脚本,不能让脚本偷偷多出一套规则。这条约束保证了单一真相源,避免文档和脚本逐渐漂移。
怎么安装和使用
安装很简单,把下面这句话发给 Agent。
帮我安装这个skill:https://github.com/KKKKhazix/human-writingAgent 会读取仓库、找到 human-writing 文件夹并完成安装。安装后显示名为「活人感写作」,放在 ~/.agents/skills/human-writing/ 目录下(文件夹名必须保留为 human-writing)。
调用方式。
使用 $human-writing,把我的材料写成一篇有活人感和中文韵律的作品。不能直接安装时,可以从 Releases 下载 human-writing.skill,或把仓库里的 human-writing 文件夹完整复制到本机 Skills 目录。
我自己的几点思考
这个 Skill 给我最大的启发不是某条具体规则,而是它把”好写作”这件模糊的事拆成了可操作的分层约束。
平时让 AI 写东西,最常见的失败模式是两种。一种是空泛,模型用一堆漂亮但空洞的排比和翻案句撑篇幅。另一种是油腻,模型学会了一些”活人感”的表面特征(老铁、谢邀、泡杯茶),但本质上还是在表演。这个 Skill 同时对付这两种病。对空泛,它用材料门槛和推进规则从源头卡住。对油腻,它用「不要穿论坛服装」和假口语检查从语气层拦截。
它的材料门槛思路尤其值得复用到其他场景。本质上是把”先确认有没有东西可写”这个人类编辑的本能,变成了提示词里的硬约束。写代码文档、写技术方案、写产品需求,其实都可以借鉴这个顺序:先盘点手里的事实和依据,不够就先去补,而不是先搭一个漂亮的结构往里填空气。
另一个收获是它对”活人感来源”的排序。材料 → 说话位置 → 语气。 这个排序纠正了我之前的一个误解。我以前以为活人感主要来自语气和口癖,看完才意识到,真正让一篇文章读起来像活人写的,是它有具体的东西可讲,并且作者愿意交代这些东西的来路。语气只是最后一步的微调,而且是最容易学坏的一步。
最后,它的七遍审稿法本身就是一个很好的”改稿 checklist”模板,即使不用这个 Skill,也可以拿来手动对照自己的文章。尤其是第三遍的五个拆解(假深刻、假具体、假口语、抽象名词、比喻换场)和第七遍的结尾检查(删掉最后两段再读),这两步对我自己写东西也很有用。