Doc Writing
这个 skill 做两件事。先从维护者那里拿到只有他们才有的材料:事实、读者是谁、取舍的立场。
再把这些材料写成读者读起来省力的文档。第二步做的事和翻译一样:意思一个字不改,说法换成
读者顺着读下去就能懂的那种。要做好第二步,先要知道读者是怎么读的,以及模型为什么默认
写成读者难读的样子。
读者是怎么读的
读者一次只能拿着几件事。每读一句,他要把这句挂到已经拿着的某件事上;挂得上,这句就变成
他的,挂不上,他要么先悬着,要么自己去补中间缺的那一步。所以一句话应该从读者已经有的
东西出发,只加一样新的。每句都是全新事实的文档,读者没有落点,读几句就丢几句。
读者要在读的过程中判断什么重要。散文里能传递这个判断的信号只有几种:篇幅(作者花了多少
字)、重复(同一件事用后果、例子、数字再说一遍)、位置(一段的第一句)、明说的立场
(“不建议”“最常见的错误是”)。每段差不多长、每句停在同一个抽象层的文档把这些信号抹平了,
读者只能逐句自己判断哪句重要。
认出来便宜,补出来贵。读到一句例子,读者认出它在说上一句的事,用一下或跳过,几乎不花
力气;读到一句省了主语的话、一个当场造的缩略、一个跳过中间步骤的结论,读者要自己把省掉
的部分生成出来。人类维护者的文档删掉“冗余”后其实很短,但复述可以把抽象的话说具体,
也可以唤回前文、加深印象、让读者感知轻重。读者不必每句都接收新事实;适当重现已有内容,
能让他接着往下读。文档很短很密时,这些联系反而可能需要读者自己重建。
读者已经知道什么,决定什么算“已有的东西”。给同一个团队写的设计文档和给外部用户写的
README,同样的事实,该展开的地方不同。所以拿材料的时候要问清读者是谁,这不是形式。
模型为什么默认写成那样
模型没有这些限制。它拿着完整的上下文,不感到每句全新的成本,于是按覆盖来写:一条事实一句,
密度均匀,不分轻重。
它缺维护者才有的材料。没有事实就用模板填(“跨平台支持”“经过生产验证”),没有立场就把
选项对称平铺,没有具体读者就写“无论你是初学者还是专家”。
它受输出预算的压力。系统提示要求简洁,它就省功能词、用箭头和冒号标签代替句子、把规则写成
格言、把段落写成提纲。这最先出现在写作者自己觉得“本来就该短”的地方:规则、标题、列表条目。
它有自己的语域习惯。偏爱的词(赋能、值得注意的是、robust、seamless)、句式(“不是 X 而是
Y”、三件套、句末 -ing 尾巴)、标点(破折号、提示性冒号、满篇加粗)、骨架(总分总、每段一个
加粗小标题、段末总结),还有把一种语言的语法习惯带进另一种。读者一旦认出这是模型写的,
对内容的信任也跟着降。
这四条里,前两条决定文档有没有东西、读者能不能读进去;后两条决定读者认不认得出是模型写的。
四条都要处理,顺序是先前两条。只换词不补材料,骨架还在;只补材料不改表达,读者第一段就出戏。
何时使用
- 新写或改写 README、Getting started、使用指南、模块说明、设计文档、提案,中文或英文。
- 用户说文档“不自然”“像 AI 写的”“太空”“太密”,要求修。
- 从代码、issue、对话记录或用户给的清单整理出一份面向他人的说明。
- 翻译文档。翻译只做第二步:目标语言按本地写法,术语和标识符不过度翻译;结构、事实和
立场跟原文,不套用重写权限。
博客和个人文章有另一套语气与取舍,不在这里处理;营销页、发布公告以说服为目标,也不在。
从源码生成 API 参考交给工具。单纯纠正语法和错别字不需要读本 skill。
先拿到维护者才有的材料
事实
每一句陈述能指向来源:代码、命令输出、issue、测量结果或用户给的清单。没有来源的数字、
承诺、路线图、性能形容词不写。缺事实时问用户或说明缺少什么依据;只有来源确认未测或未决定
时才这样写,不为填满一节而编。
人类文档明显缺席的部分是正常状态,没有 CONTRIBUTING 就不写贡献指南。
从已给事实推出的结论只走一步,并且读者能用文中已有的事实自己验证。比如已知“每个 worker
各自限速 50 次/秒”和“共 6 个 worker”,写“总量是 300 次/秒”可以;写“这会让 P99 延迟上升”
不行,文中没有支持它的东西。通用领域知识(“TOML 字符串必须加引号”)可以用来解释为什么,
但写成读者能核对的具体陈述,不用它顶替项目自己没做的测量。
读者
具体到“来读这一页的人已经知道什么、来做什么、读完要做什么决定”。README 的读者在判断要
不要用和第一次怎么跑;设计文档的读者是要评审、可能反对的同事;指南的读者手里有一个具体
任务。写之前用一句话说出读者是谁,不确定就问。
事实真实不等于该写。维护者说“读者不需要知道底层用的是什么,我们不想让他们依赖它”,就写
“底层实现不在契约内,可能更换”,不点名。
立场
维护者会写“不建议”“不支持”“这个阈值没有数据支持,先这样定”“如果……就不要用这个”。文档要
替读者做取舍,告诉他哪条路是默认、哪条是例外、什么时候不该用这个东西;不把所有选项平铺成
对称的清单让读者自己挑。
再把材料写成读者省力的文档
用同类文档校准说话方式
仅靠规则提醒,写作时仍可能沿用原来的习惯。写文档的时候,上下文里离得
最近的文本通常是任务说明和模型自己刚写的东西,容易延续同一种腔调。本 skill
对人类文档的描述不能代替文本本身。动笔前完整读一两篇同类、同语言的维护者文档,
从头读到尾,留意问题怎样被解释、解释怎样接到后果。项目自己已经
有人写的文档最好,读者早就习惯了它的口气;没有的话从 human-samples.md
的样本里挑同类型的取来读。读的目的是把那种说话方式带进接下来的写作,不是模仿它的句子,
也不是把那个项目的事实或排版惯例搬过来。已经读过且适合当前任务的文本可以继续用。
离线或链接失效时,用可获得的项目文档校准;作者身份未知就不称它为人类样本。没有合适样本
仍可依据任务材料写作,在交付说明里说清限制,不让寻找样本阻断已有材料足够的任务。
写的时候你是谁
写的时候,你是这个项目的维护者,项目的文档一直是你在写,你面前坐着一个具体的读者,他刚
遇到这一页要回答的问题。你替他做取舍,用他能接上的东西开头,他会追问的事在下一句答掉。
这个身份只借它的说话方式,不借它的记忆:事实仍然只来自材料,材料里没有的你不知道,也不
因为“维护者应该知道”就补出来。它也不是在写博客。试验里让写作者兼有博客作者身份时,
产物变得好读,但也带进了博客的东西:俏皮的小节标题、格言式的收尾、结尾的要点小结、
从人物性格里补出来的细节。这些在文档里是另一种腔调。
写之前先定轻重
动笔前想清读者读完要做什么决定,哪些信息是做决定或完成操作不可缺的。容易误解、后果较大
的地方值得展开,把机制接到后果和例子上;独立参数和简单事实可以短写。篇幅由解释需要决定,
不为了让各节长短不同而拉长或删减。翻译和定向修订沿用原文范围,不借重新分配轻重改变原意。
TiDB 讲 Raft 用了六句:写入要写多数副本;所以丢少数副本也还有最新数据;比如 3 副本写 2 个
就算成功;相比主从同步,延迟取决于最快的两个;所以异地多活成为可能;两地三中心场景下只需
本中心和最近的一个中心写成功。同一篇讲部署只有两句。读者不用读内容就知道作者觉得 Raft
重要。
每句从读者已有的东西出发
先回答读者眼前的问题,再补他理解或行动时还缺的那一步。一个机制让人不知道该怎么做,
就说明后果;文字仍然抽象,就用材料里的场景或例子解释。读者已经能据此行动时,这一段
就可以结束,不必再走一遍“机制、后果、例子”的顺序。几句紧密相关的事实可以连着说,
不必每句都插入解释。例子和数字只能来自已有材料。
一节写出来每句都是全新事实、接不上的时候,有个办法:把它想成一个同事刚在聊天里问了
这一节要回答的问题,先照回复他的样子写,先答他最想知道的,顺着他会追问的顺序往下说。
写完把回复的壳去掉,删掉称呼、开场和“你问的”“简单说”这类口气,内容和顺序留下。回复
天然满足前面说的两条:问题就是读者已有的东西,先答被问的就是轻重。它的代价是回复只答
被问的,写完要对着材料检查有没有该覆盖而没覆盖的事。
要不要删一句话,看它在这里帮读者做了什么。复述即使不增加事实,也可能唤回前文、强调
重要性、加深印象或提醒接下来的操作;同一抽象层的重复、小结和过渡也可以承担这些作用。
不因为“前面说过”或“删后事实仍齐全”就删。只有具体判断它在当前上下文中没有帮助、反而
打断阅读或冲淡重点时,才删改;拿不准时,不为追求信息密度而压缩。
文档的结构由它有什么内容决定
README 第一句说它是什么、给谁用、解决什么问题,用陈述句。然后是读者做决定和上手需要的
信息:安装、最小可运行的例子、反直觉的关键行为、限制与已知问题、什么情况不该用。没有的
东西不留空标题。
设计文档的背景里放真实的问题或事故;方案说清决定了什么;单独一节写考虑过但没采用的方案
和原因;代价、已知问题和没有数据支持的数字明写;未决定的事列出来;实施与验证写具体动作。
小节标题可以直接是主张。
指南按读者任务的顺序组织,每一步给可复制的命令和预期结果。
列表用来枚举本来就并列的东西,比如支持的平台、命令行参数;解释、取舍和因果用段落写。
有几条就写几条,不为了凑成三条加一条,也不为了整齐删一条。条目里写事实,版本、数字、
名字、行为,而不是形容词。
写句子的时候
- 程度词和泛泛的保守话换成数字、条件和具体行为。保守话要说出是哪个参数、现在是什么值、
为什么不确定、之后靠什么决定。“具体参数可能需要根据实际情况调整”换成“请求超时默认
30 秒。这个值没有测过,是按以前项目的经验定的;上线后如果超时告警多,再考虑调大”。
- 例子和引文要读者不需要背景就能懂。一句话在原文档里成立,是因为前文定义了术语、读者是
同一个团队;搬进另一份文档时这些支撑就没了。
- 让一句话里的关系读得出来。机制和例外、原因和结论可以连在一起说;修饰太多、指代不清时
再拆句。句长由内容和目标语言决定,不按样本均值补字或截短。
- 正文写成读者能接上的句子,不省略必要的主语、条件和连接。标题、参数表和列表中的片段
若能独立理解,可以保留。要求简短时,先删无助于阅读的填充和次要展开,保留有用的复述、操作前提、限制、证据和
用户要求的内容;确实放不下时说明范围或分层展开,不静默少写。
- 口语程度跟着项目已有的文档走,没有样本就偏中性。不为了显得像人而故意口语化或故意留错。
- 同一个东西全篇一个叫法。优先用项目和读者社区熟悉的准确术语,不自己造缩略语,也不把
成熟术语一律拆成长解释。比如给服务维护者写“配置热更新”,比含糊的“热加载”更明确;
读者已懂这个概念,就直接用它,需要时再补“修改后须重启”等操作后果。术语是否需要解释,
取决于读者,不取决于它短不短、抽不抽象。
- 加粗只给读者扫读时必须看到的警告。标题写名词短语,或者读者真会问的问题。
- 直接从正面说结论。“不是 X,而是 Y”只在 X 确实是读者会有的误解时用。破折号表达的关系
不清时再调整标点或句子;“核心是:”“关键在于:”若只起填充作用,直接说后面的话。
- 中文按中文的语序和虚词写,英文按英文的冠词、时态和从句写。翻译时术语、命令和社区惯用语
跟随项目和读者的叫法,不为了“全中文”或“全英文”生造译名。两个方向的症状和过度翻译清单见
language-notes.md。
审阅与校对
初稿完成后,再以读者身份通读一遍,并对照来源核实事实、范围、承诺和不确定性。
沿着读者实际操作的顺序检查前提:例如恢复会覆盖数据,备份提醒就应放在恢复命令之前。
发现具体问题才改;表达已经合适时可以保留原稿,不为了显得审过而换词或删复述。
审校通常由写作者完成,不要求独立 Agent、固定轮数或额外审校报告。下面几种看法按需要使用。
检查读者能否从机制接到后果、从说明接到操作。难懂的地方有没有具体场景或例子?代码、数字
和直接描述的场景同样算例子,不必出现“比如”。节长、句长和举例词频只能提示回读的位置,
不能单凭它们判定需要改写;短文、查阅页和并列参数说明也不必刻意制造层次差异。
需要校准语气时,把文稿和读过的同类文档并排读相应的说明段;
样本与观察到的特征见 human-samples.md。逐段问:读者读到这里会问什么,
答了吗?哪些词是形容词而不是事实?哪句是模板填出来的?
仍有表达不自然的地方,按 ai-patterns.md 从内容层到词汇层查对应症状。
命中的地方回到材料问它在替什么占位,补事实或删掉;只换同义词不算修好。同一份文件里的
“不能当判据”表是硬约束:问句标题、“X 是一个……”开头、正文里的“首先……其次”、名词化长句、
举例和复述,人类文档里同样常见,不要为了“更像人”去改。
修订已有文档
只改形式,不改事实、承诺和不确定性。三类分开处理:
- 形式问题。形容词、口号、模板句、过渡和收尾(“极致性能”“让我们”“Happy coding”)删掉或
换成文中已有的事实;表达层痕迹按 ai-patterns.md 逐条改;
难以理解的电报体展开成句子;翻译腔按目标语言重排;读者缺少理解或行动依据时,补上相关
后果或例子,内容只能来自已有事实,不因段落密度均匀而扩写。动手前先锁住命令、参数名、
数值、URL 和引用原文。
- 无来源的主张。性能对比、“经过大量生产环境验证”、路线图、支持列表:能在代码或仓库里核实
的去核;核不了的保留原意和原有确定程度,在正文之外列为需要维护者确认的项,不擅自加强、
弱化或换成另一项未经证实的主张。新写文档时,不把缺少证据的主张写成事实。
- 疑似事实错误单独指出,不替作者下结论。
保留原文的 frontmatter、链接、代码、命令和技术标识符;项目已有的排版惯例(emoji 特性列表、
编号小节)不是本次要修的对象,除非用户要求。
交付
交付文稿本身,正文里不留写作过程或“已去 AI 味”之类的说明。保留支撑主张的来源链接、
引文和版本信息。链接按文档的目标发布位置处理;临时预览文件不改变目标位置,也不要求把
仓库相对链接改成本机绝对路径。实际迁移文档时才按新位置调整链接。另附一段短说明:
哪些常见内容因缺事实被略去或写成未决、哪些推论是自己走的那一步、哪些取舍是替读者做的、
哪些地方需要维护者补充。
AI 味的表达痕迹与诊断
SKILL.md 讲了模型默认写成难读文档的四个原因:不感到读者成本、缺材料、输出预算、语域习惯。
这份文件列的是这些原因留在文本上的痕迹,按可定位的位置分四组:词汇与标点、句法与节奏、
篇章结构、内容。每组写它长什么样、通常在替什么东西占位、怎么改。词表来自
维基百科编辑的观察和几份带频率统计的中文对照研究(见文末来源),不是主观印象;但单个
命中不是证据,多个叠加才是。文末的“不能当判据”表是硬约束,命中那些直接放行。
一、词汇与标点
这一层最容易识别,也最容易只改这一层就以为改好了。改完这层必须继续往下看。
英文高频词
维基百科 AI 清理小组按模型时期统计的词,出现一两个是巧合,一段里出现多个是最强的单项信号:
| 类别 | 词 |
| 动词 | delve, underscore(比喻义), highlight / showcase / emphasize(作“说明、体现”), foster, bolster, garner, leverage, streamline, enhance, ensure(非技术保证义), navigate(比喻义), boast(作 has) |
| 形容词 | crucial, pivotal, key(作形容词), robust, seamless, comprehensive, intricate, meticulous, vibrant, enduring, valuable, nuanced, holistic |
| 名词 | landscape / tapestry(抽象义), testament, interplay, realm, journey(比喻义), synergy |
| 句首 | Additionally, Moreover, Furthermore, Notably, Importantly, It's worth noting that, It is important to |
| 收尾 | In summary, In conclusion, Overall, Ultimately, Happy coding!, Feel free to… |
改法:空泛的动词换回 is / has / does 和具体动作;形容词有事实依据时换成数字或行为;句首连接词在
上下文能自行衔接时可删;收尾句若只剩礼貌套话可删,帮助回顾重点或明确下一步的内容保留。
中文高频词
| 类别 | 词 |
| 开场套话 | 值得注意的是、值得一提的是、需要指出的是、众所周知、不得不说、诚然、在当今……时代、随着……的不断发展、在……的背景下 |
| 过渡填充 | 综上所述、总而言之、总的来说、由此可见、不难看出、换句话说、简而言之、归根结底、本质上、核心在于、关键在于、一句话总结 |
| 渲染性强调 | 深刻的、深远的、至关重要、毋庸置疑、意义非凡、前所未有、极大地提升、显著、全面的、强大的、完善的、丰富的 |
| 商业黑话 | 赋能、助力、打造、抓手、闭环、颗粒度、对齐、拉齐、沉淀、痛点、降本增效、底层逻辑、顶层设计、链路、触达、拉通、洞察、赛道、卡点、一站式 |
| 工程师腔 | 兜底、兜住、收口、收敛、根因、落盘、坐实、压实、口径、更硬(这些在真实工程对话里存在,但模型把它们当万能动词) |
| 自媒体腔 | 保姆级、硬核、干货、拆解、盘点、避坑、一文读懂、划重点、建议收藏 |
| 正能量收尾 | 让我们拭目以待、未来可期、只有……才能、与其……不如拥抱 |
| 无源引用 | 研究表明、数据显示、有专家指出、业内人士认为、据报道(后面没有链接或来源时) |
| 客服元评论 | 希望本文对你有帮助、希望以上信息对您有所帮助、如有疑问欢迎……、让我来为你解释、好问题 |
改法同上。“进行 + 动词”“实现了对……的支持”这类形式动词改成动词本身。
标点与排版
- 破折号。 英文 em dash 和中文“——”都被模型当万能标点,用在人类会用逗号、括号、冒号、
句号的位置,尤其是“不是 X——而是 Y”的转折。人类维护者文档里破折号很少(英文 22 篇样本
16 篇为零)。检查它是否表达插入、解释或转折;关系不清时再换标点或重写,不按出现次数删。
- 提示性冒号。 两种:“核心是:”“关键在于:”“一句话总结:”后面接结论;一行以冒号结尾接列表,
删掉这行信息不减。中文对照统计里后者是倍率最高的单项(AI 是人类的 9.4 倍),前者 3.8 倍。
直接说结论;只为宣布列表存在的那一行删掉。句中总说分说的冒号是规范用法,不动。
- 加粗。 每条列表加粗小标题、正文里每个“关键词”都加粗、“注意:”。人类文档加粗留给
警告和少数术语首现。
- 标题 Title Case。 英文小节标题每个实词大写(“Getting Started With The API”)。GitHub
和多数项目文档用 sentence case。
- 每个标题前一条分隔线、跳级标题(
# 直接到 ###)、弯引号与直引号混用、
emoji 当项目符号。这些是聊天界面 Markdown 的残留。
- 中文全角半角混用不一致。 同一篇里“()”和“()”、“,”和“,”混着用。跟随项目惯例统一。
二、句法与节奏
否定式对比(“不是 X,而是 Y” / “not just X, but Y”)
先立一个读者并没有的误解再推翻它,或者用“不仅……更是……”把一件事说成两层。中文对照研究
把它叫“翻案腔”“洞见感骨架”,实测 AI 是人类的 3.4 倍,五家模型都有。人类写作也用,
但 X 通常是真实存在的常见误解。
改法:没有需要澄清的误解时,直接从正面说 Y;X 确实是读者可能有的想法时,保留对比帮助
辨别。是否保留取决于这处对比的作用,不给全文设次数上限。
三件套
“adjective, adjective, adjective”“短语、短语和短语”,三条列表、三个例子、三个理由。
模型用它让浅分析显得完整。人类文档的条目数随事实:有两条写两条,七条写七条。
改法:数一数每个并列结构,问第三项是不是凑的;是就删。
相邻句同构
连续几句逗号数相同、成分顺序相同、长度接近;或者每段都是“[陈述], [连词] [第二陈述]”。
单看每句都通,连着读像节拍器。中文对照统计里相邻句同构是 AI 的两倍。
改法:让句子结构跟着内容走,解释因果用长句,下判断用短句,列参数用列表。刻意长短交替
会制造另一种节拍,不用。
分词尾巴与浅分析(英文)
“…, highlighting the importance of X”“…, ensuring a seamless experience”“…, contributing to
the broader ecosystem”。句末挂一个 -ing 短语给前面的事实补一句意义。维基百科编辑称之为
superficial analysis。删掉尾巴,事实自己会说话。
避开 is / are
“serves as”“stands as”“represents”“marks”“features”“offers”“refers to” 替代 is 和 has。
维基百科指南引用的一项研究测得 2023 年学术写作里 is/are 用量下降超过 10%,此前多年没有
大的变化。写 “X is a …”“X has …”。
段首零主语评论、“这意味着”式复述
段落以“更重要的是”“从更深层次看”“这意味着……”“This means that…”开头,后面是对上一段的
同义复述。先看它是否在唤回前文、强调轻重或衔接下一步;没有新信息不等于没有作用。
只有当前上下文不需要这层衔接、复述反而打断阅读时,才删改。
电报体压缩
系统提示要求“简洁”“少输出”时,模型会省掉功能词、用符号代替句子;用户还观察到长文写到
后半更明显(未做过试验)。它和上面几条不同:来源是输出预算,和内容多少无关,所以事实齐全
的文档也会有。
最先出现的位置是写作者自己觉得“本来就该短”的地方:规则、标题、列表条目。写规则时滑向
格言体(“一句只推进一件事”:省了“话”,“推进”是比喻,“一件事”没说清什么算一件),写标题时
滑向冒号标签加对比(“定位:翻译,不是去味”:冒号标签、“不是 X”、当场造的缩略“去味”),
写条目时滑向单句提纲。这三个例子都出自本 skill 自己的早期版本,写进清单的同一天又用上了,
所以清单只能事后逐条对照,不能指望它改变生成。
- 篇章级,最常见:整篇写成提纲。三层编号小节(1.1、2.3),每个事实一条单句条目,被否方案
排成表格,全文没有一段把机制和后果连起来说的话。试验里加一句“回复务必精简”,同一份事实
清单从 7 个标题、3 条列表变成 16 个标题、21 条列表、12 处加粗。设计文档读者要的是推理过程,
提纲只给结论。
- 中文:连着省主语,读者要猜“它”指谁(“取不到令牌重新入队,延迟上限 30s,熔断后不发”);
箭头、等号、斜杠、冒号标签代替句子(“配置错 → 启动失败”“延迟 = 桶恢复时间”“读/写路径”
“结论:可行。风险:Redis 单点。”);自造缩略(“限速配”“主从切”);动词压成名词堆
(“完成限速配置校验前置”);半文言连用(“若无则跳过,有则覆盖,均需重启”)。
- 英文:丢冠词和 that / which(“Config lives in file. Worker reads queue, applies limit.”);
名词堆(“per-domain token bucket rate limit config page”);缩略(w/, b/c, cfg, impl, req/resp,
opt.);分号和括号把三句压成一句;“Note: / Tradeoff: / Result:” 标签句连排。
读者的感受是在看笔记。人类维护者也写片段,但写在模板槽位(“None.”)、列表条目、表格和命令
说明里;正文段落是完整句子。改法:需要解释关系的提纲改回段落,补读者缺少的后果、主语、动词
和连词。读者不熟悉的缩略语补全称;符号或标签让关系不清时换成陈述,熟悉且准确的术语和记号保留。改完可能变长,
篇幅是否合适仍取决于任务。长度受限时先删无助于阅读的填充和次要展开,保留有用的复述、必要事实、条件和用户要求;
无法兼顾时说明范围或分层展开,不静默漏写。长文也检查后半是否出现了指代和条件缺失。
过长前置定语(中文)
中心名词前的修饰让读者难以判断对象或条件时,调整语序或拆句。字数和“的”的数量只能提示
回读,不能单独判定长句有问题。
翻译腔(两个方向)
用英文的习惯写中文:每句带主语和代词回指、显式的“因为……所以”“当……时”、冠词式的“一个”、
名词化的“进行”“实现对……的支持”。用中文的习惯写英文:逗号串起的长句不断开、冠词和单复数
缺失、“carry out”“realize”“relatively”“a certain”“at present”这类逐字对译。过度翻译:把
issue、token、Pull Request 翻成“议题”“令牌”“拉取请求”,把 --dry-run 翻成“干跑”,把
“under the hood”翻成“引擎盖下”。新写的文档也会有,翻译任务里更集中。症状清单、语料计数和
改法见 language-notes.md。
拟人化喻体与抒情词
“像一位经验丰富的管家”,以及给抽象概念配的感官动词(安放、抵达、微光、滚烫)。技术文档里
几乎不出现。删。
三、篇章结构
总分总与模板节
开头总述 → 分点展开(每点等长)→ 结尾重复开头。README 则是 Overview / Features / Installation /
Usage / Contributing / License / Roadmap 一字不落,每节都填满。人类 README 的节随项目真实状态;
esbuild 只有 “Why?” 一节。
改法:没有事实也没有阅读作用的模板节删掉;篇幅随解释需要安排。结尾可以回顾重要内容,
不要为了凑齐总分总而重复,也不要为了去模板而删掉有用的回顾。
密度均匀、层次不降
每句都是一条新事实,段与段等长,没有一句在把上一句往具体处降。文档很短、很齐,读者要
自己补例子和后果。这是模型文档里最难察觉的一种,因为单看每句都对,也没有任何词表能命中。
量出来的差别(去掉代码块和表格):人类中文说明文档每千字有 0.6 到 2.7 处“比如 / 例如 /
也就是说 / 假设”这类举例标记,英文每千词 1.7 到 5.2 处 “for example / such as / that is /
suppose”;模型产物普遍为 0。人类中文句均 23 到 57 个汉字,模型产物 16 到 25;“的”在人类
说明文档里占汉字的 3% 到 6%,模型产物 2% 到 3.5%。这些数字来自本 skill 的语料和试验,
样本不大,作校准用,不作阈值。
改法:检查读者理解或行动时还缺哪一步,再补对应的解释。后果、场景和例子是可选的解释方式,
不必每段依次写全;是否复述还要看读者是否需要回忆上下文、感知轻重或记住行动。例子只能来自已有事实。“也就是说”
“比如”“所以”是否有用,要看它们后面的内容有没有帮助理解。
段末总结、节首预告
“总之……”“In summary…”“本节将介绍……”“In this section, we will…”只是形式线索。
检查后面的内容是否帮助读者回顾重点、恢复上下文、决定是否继续读或记住下一步;有这些作用
就保留,不按词头或所在位置直接删。
加粗段首小标题连排
“Format. …”“Migration. …”是加粗小标题列表的段落版。读者要跳读的独立主题可以这样标;
同一条论证里的几段不需要,人类更常写成主张式小节或直接连成段。
“挑战与展望”节
“尽管面临挑战……但仍然……”“未来,X 有望……”。这是维基百科 AI 清理列出的固定骨架,技术文档里
对应“路线图”“未来计划”里没有日期、没有 issue 的愿景条目。没有决定的事写“未决定”,没计划的
不写。
面面俱到的对称覆盖
每种方案、每个选项各一段、篇幅相同、不说推荐哪个。缺的是立场。写出默认路径,其他路径只说
什么时候需要它。
序数词小标题、每段一个编号
“一、二、三”或“1. 2. 3.”连续三个以上当小标题,或每段以“首先/其次/最后”开头。正文里偶尔用
“首先……其次”与人类无差别;通篇编号才是。
四、内容层
这一层是 AI 味的根,也是表达层痕迹反复长回来的原因。
下面的补写建议用于新写内容。修订已有文档时,未核实的原有主张按主文的保留原则处理,
另列待确认项;找不到证据不等于确认“未测”或“暂无”,也不授权删除或弱化作者的承诺。
- 编造。 没测过的基准、没定的时间表、模板带出来的“跨平台支持”、“经过大量生产环境验证”。
必须回到来源逐条核对;无依据的内容不新增,只有来源确认未测或暂无时才这样写。
- 形容词代替数字。 “高性能”“显著提升”“extremely fast”。有测量写数字和条件,缺少测量依据时不新增性能结论。
- 泛泛的保守话。 “可能需要根据实际情况调整”“results may vary”。写出是哪个参数、现在什么值、
为什么不确定、之后靠什么决定:“默认 30 秒没有测过,是按经验定的;上线后超时告警多再调大”。
- 对读者的假想。 “无论你是初学者还是专家”“Whether you're…”。写出这份文档实际面向谁。
- 把未知写成已知。 来源说“一个用户报告能用,未测”,文档写成“支持”。按来源的确定程度写。
- 无源引用。 “研究表明”“experts say”后面没有链接。查找来源;无法核实时,新稿不引入,已有文稿另列待确认项。
- 意义拔高。 “具有里程碑式的意义”“marks a pivotal moment”“stands as a testament to”。
技术文档不需要评价自己的重要性。
不能当判据的特征
这些看起来像 AI,但对照统计或人类文档样本显示人类同样用,甚至用得更多。命中这些不改;
为了“更像人”去改它们,会制造新的 AI 味。
| 特征 | 为什么放行 |
| 句长、段长不够参差 | 中文对照实测 AI 与人类无差别;刻意制造长短交替是在造新腔调 |
| “X 是一个……” / “X is a…” 开头 | 中英文人类 README 最常见的开头,第二句给具体事实即可 |
| 正文里的“首先……其次” | 与人类无差别,只管小标题通篇编号 |
| 句内同构排比(“提升效率,降低成本”) | 人类用得不比 AI 少,只处理句间连续同构 |
| 问句、问句小标题 | 人类正文问句是 AI 的十几倍;“Why shouldn't I use ripgrep?” 是人类写法 |
| 名词化、长句、书面被动 | 现代中文书面语的正常写法;TiDB、RocketMQ 文档的长句都是人写的 |
| 单个破折号、单个 however、弯引号 | 单独出现证明不了任何事,叠加才算 |
| 反复写全称、少用代词 | 人类技术文档比 AI 更常重复同一术语;同义词轮换才是 AI 味 |
| 重复起句的修辞 | “她来了。她看见了。她征服了。”是有意为之 |
| 真实的免责声明、范围说明、安全提示 | 保留 |
| 模板槽位、列表、表格里的片段 | “None.”“未测”“默认 8”是人类写法;只处理正文段落里的电报体 |
| 举例、说后果、复述、小结 | 可以帮助理解、唤回上下文、加深印象和强调轻重;没有新事实不能单独成为删除理由 |
| 工整的语法与一致的风格 | 工整不等于 AI;很多作者是专业的或被编辑过 |
| 项目已有的排版惯例 | antd、Vant 的 emoji 特性列表是社区习惯,跟随项目 |
优先级:误杀防护高于所有词表。词表里的词在当前句子里承担实义时放行(“underscore” 指下划线字符,
“收敛”指算法收敛,“闭环”指控制闭环)。
使用方式
写完初稿后按层过一遍,从第四层往上:先核事实,再看结构,再看句式,最后扫词表和标点。
顺序反过来会出现只换了词的假修好。修别人的文档时先锁保护清单(命令、参数名、数值、URL、
引用原文),再动表达。
来源
这些来源里的模型指纹会随模型版本变化(“delve” 2023 年到 2024 年初最多,2025 年已明显减少),
词表按需更新,判断原则不变。
人类维护者文档样本与观察
人类维护者写的文档样本,以及从中观察到的特征。样本有两个用处。动笔前挑与手头文档同类、
同语言的一两份从头读到尾,让接下来写的东西跟着这种说话方式走。写完需要校准时再并排
对照相应段落,看读者的问题怎样得到解释、作者怎样表达立场。两个用处都不模仿具体句子,也不把
某个项目的习惯当成全行业标准。下面的“值得看什么”一栏是给挑样本用的,不代替原文。
链接指向上游源文件,版本会变;访问受限时按 SKILL.md 的样本降级方式继续,不把找齐样本作为写作门槛。
英文样本
中文样本
| 类型 | 项目 / 文件 | 值得看什么 |
| 组件库介绍 | Ant Design 介绍 | 第一句 “antd 是基于 Ant Design 设计体系的 React UI 组件库,适合企业级中后台产品与前台桌面网站”;用引用块写 “强烈不推荐使用已构建文件” 并说原因;版本边界写成具体版本号 |
| FAQ | Ant Design FAQ | 问题是用户真问过的;回答直接说“不会支持”“这是设计如此” |
| 快速上手 | Vant 快速上手 | 按读者任务分节(现有项目 / 新项目);推荐工具时说明理由(“由 Vant 作者开发…第一优先级支持”) |
| 最佳实践 | TiDB 最佳实践 | 逗号串起的长句解释机制;“这部分用户不需要担心”;限制写成 5000 条 / 6MB / 10G;用 “比如把数据库当做计数器用” 这类具体反例 |
| 架构说明 | TiDB 整体架构 | 每个组件一段,说它做什么和不做什么 |
| 设计文档 | RocketMQ 设计 | 每个机制先讲问题(遍历 commitlog 检索低效)再讲结构;数字具体到 1G、20 位文件名、400M |
| 教程 | 阮一峰 ES6 入门:简介 | 用读者常问的问题做小节标题;历史叙述带具体年份和原因;“日常场合,这两个词是可以互换的” 这种替读者做的判断 |
| 推广型 README(对照) | Sentinel 介绍、Hutool README | 加粗小标题特性列表、“丰富”“完备”“广泛”。它们能成立是因为每条后面跟着具体事实(近 10 年双十一、500 台集群、Spring Cloud/Dubbo/gRPC)。写说明文档时不沿用这种口吻 |
观察到的共同特征
开头。 第一句说它是什么、给谁,或直接说要解决的问题:中英文样本各约一半以 “X is a…” /
“X 是一个…” 开头(中文 26 篇里 11 到 12 篇,取决于把 frontmatter 后哪一行算第一句),这个结构
本身不是 AI 味。第二句立刻给具体事实:版本、二进制名、
平台、去哪看。设计文档摘要直接写决定。口号只放在页头,正文不重复;没有 “In today's world”,
没有 “本文将带你”。Django、TiDB 会用一句 “This document explains…” / “本文档总结…” 说明范围,仅此一句。
先说 why。 esbuild、Vite、Sentinel 都先说现状有什么问题,再说自己做了什么。README 读者
第一件事是判断要不要继续读。
限制与不适用场景是正式内容。 ripgrep、SQLite 单开一节;antd、TiDB 用引用块或一句话
(“强烈不推荐”“这并不意味着在任何场景都能”)。维护者知道自己的东西哪里不行,并且写出来。
数字代替形容词。 10-100x、5000 条、6MB、1G、20 位、近 10 年。没有数字时用具体行为
(ripgrep:“won't search files ignored by your .gitignore… won't search hidden files and it won't
search binary files”),不用 “高效”“稳定”。
结构随内容。 esbuild README 只有 “Why?” 一节;Go 设计文档 Rationale 一节下有 14 个主张式
小节。节数、列表长度、段落长短都不整齐:中文样本约 90 个多项列表里 25 个是三条,
13 个超过八条;ripgrep 一个列表里混着 “It can…” “Like other tools…” “Applies…” 三种句式。
重要处写四段,次要处一句带过,模板里没内容的节留空或写 “None.”。
立场明确。 “Redundancy is bad.” “不推荐。对内接口不保证兼容性。” “Static analysis is not a
viable alternative.” “非常不推荐手动部署,后期的维护和升级会很麻烦。” 维护者替读者做了取舍,
并说理由;否定后面常跟条件或替代(“通常情况下慢 20%……如果可能,建议避免”)。
“冗余”在哪里。 人类说明文档删掉重复和举例后其实很短,但那些句子不是废话。TiDB 讲 Raft:
“每次写入都要写入多数副本,才能对外返回成功,这样即使丢掉少数副本,也能保证系统中还有最新的
数据。比如最大 3 副本的话,每次写入 2 副本才算成功……相比 Master-Slave 方式的同步……写入的延迟
取决于最快的两个副本,而不是最慢的那个副本。所以使用 Raft 同步的情况下,异地多活成为可能。
在典型的两地三中心场景下……”一个机制,后面跟后果、例子、对比、推论、场景五层。Django 每条
原则都是“主张 → For example → 限定”:“The various layers of the framework shouldn't know
about each other… For example, the template system knows nothing about web requests…
Although Django comes with a full stack for convenience, the pieces are independent.”
Effective Go 讲完 range 的例子后加一句 “Finally, Go has no comma operator”,是替读者答下一个
会问的问题。这些句子不增加事实,增加的是理解。模型产物里这一层普遍缺席:语料中文每千字
0.6 到 2.7 处举例标记、英文每千词 1.7 到 5.2,产物多为 0。
设计说明的推进方式。 提案类(Go、Rust RFC、KEP)按模板走问题 → 方案 → 被否方案 → 未决;
架构和最佳实践类(TiDB、RocketMQ)是“机制 → 后果 → 建议”:先讲 Raft 写多数派,再推出延迟取决于
最快的两个副本,再收“但这并不意味着任何场景都能跨机房”。两种都先给真实代码、数字或事故,再给结论。
不确定性有具体形状。 Go 提案写发布时间是 “perhaps Go 1.22 if the stars align”;Redis 写平台支持是
“our support for this platform is best effort and Redis is not guaranteed to work”;ripgrep 写某些
构建配置是 “bugs I don't know how to fix and don't have the time to fix”。每一句都说了不确定的是什么、
到什么程度、原因是什么。“may vary depending on your use case” 三样都没说。
结尾在内容结束处。 链接、许可、社区入口或最后一个事实。没有总结段,没有 “希望本文对你
有帮助”。
段末不总结,节首不预告。 读完一节直接进入下一节。需要引导时指向别处(“See the FAQ”“详见 X”),
而不是复述。
以上是这批样本的观察,不是禁止总结或复述的规则。新文稿中的重复仍要看其阅读作用:
唤回上下文、加深印象和强调重要性都可以成立,不能因为样本少见或没有新增事实就删掉。
不追求光滑。 样本里留着拼写错误、半角全角混杂、TODO 注释和个人化的旁白(“(Apologies!)”、
“那啥,试试 npmmirror”)。精确但不打磨过的句子是维护者文档的常态;反过来,每句都圆润、
每段都等长才显得不像人写。写的时候不要为了“完整”“工整”添内容;也不要故意留错。
推广口吻与说明口吻是两套。 同一篇 Hutool README 前半用加粗特性和“强大”,后半讲 PR 原则时
换成一句成段的个人说明。企业维护的 README(Redis、Vite、Sentinel)最接近 LLM 的节奏:加粗
小标题、“Whether you're…”“In summary”、评价性总结句。校准时以单维护者 README、RFC、FAQ、
最佳实践这类说明口吻为准。
使用方式
写完初稿后选同类样本对照三处:开头前三句、任意一个中段(列表和段落的比例、每条里的事实
密度)、结尾。差别明显的地方回到 ai-patterns.md 找对应症状。样本的项目
惯例(emoji 特性列表、编号小节)不自动迁移到别的项目。
中英文各自的表达习惯
这些是从维护良好的开源文档中观察到的习惯,用来校准,不是格式规范。项目已有约定时
以项目为准;同一份文档内保持一致比选哪一种更重要。
中文
混排与标点。 中英文之间是否留空格分两派:前端和数据库文档(antd、Vant、TiDB、阮一峰)严格加空格
(TiDB 是一个兼容 MySQL 协议和语法的分布式数据库),Java 系文档(Hutool、RocketMQ)基本不加(支持JDK8+)。
跟随项目已有写法;没有惯例时加空格。英文紧邻中文标点时不加空格。正文用全角标点,并列用顿号,
代码、命令、路径用反引号包住并保留半角。括号补充很常见并且常承载关键限定:(默认)、
(不要引用 @types/antd)、(需要注意的是超过订阅队列数的 Consumer 实例无效)。
术语与过度翻译。 领域术语和社区惯用语保留英文,不翻译成没人用的中文。26 篇中文样本里
issue 126 次、“议题”0;token 129 次、“令牌”0;Pull Request / PR 34 次、“拉取请求”只在 RocketMQ
指“拉取消息的请求”时出现;hook 5 次、“钩子”1;“哈希”6、“散列”0。Region、Raft、Producer、
tree shaking、Key-Value 同样保留。已被社区接受的译名照用(“开箱即用”9 次、“运行时”7 次)。
判断标准是目标读者社区怎么叫,不是能不能译:跟随项目已有中文文档;没有先例时保留英文,
第一次出现跟一句中文解释。命令、参数、代码标识符、文件名、错误信息原文一律不译(--dry-run
不是“干跑”)。英文习语不逐字译:“under the hood”是“内部实现”,“battle-tested”是“在生产
环境跑过”,“if the stars align”是“顺利的话”。全篇一个叫法,不轮换同义词。
用英文习惯写中文是最常见的不自然。 中文原生写法让主语直接做动作、用动词而不是名词化短语,
靠上下文而不是代词和连词衔接:
-
每句都带主语和代词回指(“它”“这”“这些”起句):中文承前省略主语,或重复名词。
-
英文的定语从句和 make / allow 结构照搬:“其他搜索工具所服务的许多使用场景”“这使得可以
在模式中使用环视”“仍然存在某个本 README 未列出的、你所依赖的其他功能”。中文把从句拆成
并列短句,按说明顺序排:“你依赖的某个功能,本 README 还没有列出来”。未列出不能改写为
不支持,也不能凭语境猜出其他工具是否支持。
-
冠词式的“一个”(“一个高性能的日志库”):删掉,或换成有信息的限定。
-
显式逻辑连词成套出现(“因为……所以……”“虽然……但是……”“如果……那么……”)、“当……时”连排:
中文常只留后半(“Redis 不可用,就放行不限速”),连词留给真正需要标记转折的地方。
-
句首“然而”“此外”“同时”“另外”对应 However / Additionally:语料 26 篇里句首“然而”0 次、
“此外”3、“同时”2、“另外”6,而且“另外”后面都跟着新事实,不是复述。
-
复数和时态标记照英文加(“用户们”“将会”“已经……了”):中文靠语境。
-
引号、逗号、句号用半角:中文正文用全角,见上。
-
对配置进行加载 → 加载配置;实现了对……的支持 → 支持……。
-
被 字句只在受事确实是话题时用:文件被删除后 可以,该功能被设计为…… 通常是英文思维。
-
长定语堆在一个名词前时拆成短句:基于令牌桶的、按域名维度的、可由运营配置的限速方案
→ 按域名限速,用令牌桶实现,运营可以改单个域名的额度。“的”本身不是问题,说明型文档里
“的”比推广文案还多;问题是一口气修饰到读者要回头重读。
-
它是……的、……是十分重要的 这类判断句多半可以换成陈述事实。
-
进行 作形式动词填充(进行安装、进行消费)在部分项目里很多,但前端文档几乎不用;
能直接写动词就直接写。
-
译文痕迹:我们认为,这种模式为 X 提供了最佳平衡 这类评价句,这听起来可能……但 的让步开头,
以及每个术语后都跟英文括注。本地写的文档直接给结论和条件。
节奏。 中文技术文档接受用逗号串起来的长句,只要一句只推进一个意思(TiDB、阮一峰的文档都这样写)。
段落长短随内容变化:一段可以只有一句(“这部分用户不需要担心。”“不推荐。对内接口不保证兼容性。”)。
重要的地方写四段,次要的地方一句带过,不追求每节等长。
人称。 维护者自称“我们”并承担决策(“我们对事务的大小做了限制”);对读者用“你”或省略主语。
“您”集中在阿里系和商业文档,人类文档里“你”“您”混用也不少见,但新写时选一个用到底。
指令用“请 + 动词”,步骤用“即可”“就可以了”收尾;不用“让我们”。
少见的写法。 26 篇中文样本(汉字约 4.7 万,另含代码和英文)里:综上所述 1 次(承接三条列表
后做真实推论)、值得注意的是 1 次(引出具体数字)、总而言之/赋能/致力于/本文将/
不仅……而且 0 次、让我们 1 次(“请让我们知道”)、首先/其次/最后 只有两处连成整套。
说明型正文里感叹号为 0,暂无计划 为 0;维护者写 不支持、无法、不再支持 加版本号。四字短语排比、“……性”
名词堆叠、强大的、一站式、优雅 全部出自推广型 README。这些不是禁词,出现时先问
这句在传达什么事实;删掉或换成事实通常更好。推广口吻(加粗小标题特性列表、社会证明数字、
标题 emoji)读者能识别,写说明文档时不沿用。
English
Voice. Maintainers write "we" for themselves and "you" for the reader, and use the
imperative for instructions ("Check out the getting started instructions"). Contractions
are normal ("loops like this one don't do what they look like they do"). Passive voice is
fine when the actor is irrelevant ("Files removed locally are not deleted").
Sentences. Mix lengths freely. A short declarative after a long explanation is the
usual anchor: "That is, this code has a bug." "SQLite does not compete with client/server
databases. SQLite competes with fopen()." One sentence, one point. Fragments are fine in
lists and captions, rare in body prose. README paragraphs run 1–4 sentences; many are a
single sentence introducing a command or code block.
Concreteness. Numbers, versions, flags, file names and error messages carry the
document; adjectives do not. "10-100x slower than they could be", "~14k min.gz'd",
"added in curl v7.87.0", "about 1 in 8,000 loops" are how maintainers say fast, small,
new and rare. Claims point outward ("See the FAQ", "see linkgit:git-rebase[1]") instead of
being restated. Staleness is marked: "as of this writing (2015)", "The currently existing
filter types (curl 8.5.0) are:".
Limitations. Stated flat, with the reason and often a workaround: "SQLite will work
over a network filesystem, but because of the latency ... performance will not be great."
"none of them seem to work right ... and I don't have the time to fix." Hedges name the
condition: "any site that gets fewer than 100K hits/day should work fine", "our support for
this platform is best effort". Empty template sections stay empty ("None.") rather than
being padded.
Punctuation. 16 of 22 sample files contain no em dash at all; commas, periods, colons,
-- and parentheses do that work. Parentheticals are the main aside mechanism and are very
frequent. Exclamation marks in prose are situational ("(Please file a bug report!)").
Question headings appear in a few READMEs and only as questions a reader would ask ("Why
shouldn't I use ripgrep?"); rhetorical questions in body text are rare.
Rarely seen. Across ~14,600 lines: "In conclusion", "Key Features", "seamless",
"delve", "crucial", "empower", "streamline" 0; "In summary" 1; "worth noting" 4;
"robust" 2; "Whether you're" 1. Bold lead-in bullets occur in 6 files and cluster in
corporate READMEs; single-maintainer READMEs and RFC-style docs use none. Not a banned
list: when one shows up, ask what fact it stands in for and write the fact.
Chinese habits carried into English. These show up when the writer thinks in Chinese,
including when translating Chinese docs:
- Comma-spliced run-ons (逗号串句): "The worker takes a task, checks the bucket, if no
token it requeues." Break into sentences or use a conjunction; English readers expect a
period where Chinese uses a comma.
- Missing or mechanical articles and plurals: "config file is in home directory" /
"the configs". Decide whether the noun is specific, countable, or generic.
- Topic-comment order: "This option, we do not recommend." → "We do not recommend this
option."
- Word-for-word verbs and hedges: "carry out" (进行), "realize" / "achieve" (实现) for
implement or support, "solve the problem of" (解决……问题), "relatively" (比较),
"a certain" (一定的), "the related / relevant" (相关), "at present" (目前), "and so on"
(等), "at the same time" / "meanwhile" as a paragraph opener (同时), "through configuring"
(通过配置), "make X become".
- Impersonal 建议 rendered as "It is recommended to" in every paragraph. Maintainers write
"We recommend" or the imperative ("Use TiUP"). Same for "In addition" (此外) and
"However" (但是) opening consecutive paragraphs when the Chinese used them as light
connectors; drop them.
- Evaluative idioms translated as imagery: 极具亮点 as "a real highlight", 非常方便 as
"very convenient and easy to use", 会很麻烦 as "will be troublesome". Translate the
judgment in plain English ("performs well on OLAP queries", "is easy to use", "is hard
to maintain") and keep its strength; do not upgrade or soften it.
- Jargon calqued literally: 压测 is "load test", not "pressure test"; 灰度 is "canary" or
"staged rollout", not "gray release"; 兜底 is "fallback"; 落地 is "ship" or "roll out",
not "land"; 闭环 in the business sense has no English equivalent and is usually a
placeholder for a fact.
- Tense drift: describe behavior in the simple present throughout; do not switch to
"will" because the Chinese had 会.
Translating. The unit is the meaning of a sentence, not its clause order. Read the
source sentence, ask how a native maintainer would state that meaning, then check that
nothing was added or dropped. Keep the source's structure, facts, stance, hedges and
omissions; a translation is not a rewrite. Terms, commands and community words follow the
rules above. If the source itself has AI-flavor tells, translate them faithfully and say so
in the delivery note; fixing them is a separate task the user has to ask for.
中英文各自的完整高频词表、句式和标点痕迹见 ai-patterns.md;这里只记语料里
观察到的频率。两种语言共用的规则(标题、加粗、列表、结尾)在 SKILL.md 的“写句子时”一节,
不在这里重复。