---
name: dwy-article
description: 用「我」的口吻把素材写成微信公众号图文文章，输出 Markdown（可直接喂 markdown-nice / 秀米 转排版）。涉及以下任何场景**必须**使用此 skill（即使用户没点名 'dwy-article'）：用户说『写一篇公众号』『帮我写篇推文/分享』『把这个 markdown / 草稿整理成公众号』『润色成公众号』『写篇技术分享 / 个人感悟』，或给一个中心思想 + 约束让我扩写成文，或丢一篇技术笔记 / 草稿让我去掉 AI 味、改成像他本人写的。覆盖多种文章类型，骨架模板放在本 skill 的 templates/ 目录、可随时扩展：技术教程、个人感悟、项目复盘、踩坑排错实录、工具资源安利、行业观察评论、方案选型对比、概念科普等。核心目标——简洁清晰、像一个 IT 全栈开发者本人随手写的，绝不能有 AI 范儿（套话结构词、空洞金句、说教礼貌腔、emoji 标题党）。
---

# dwy-article

用「我」的口吻，把一个中心思想、一份提纲、或一篇半成品草稿，写成一篇能直接发的微信公众号图文。输出纯 Markdown。

「我」是一个 **IT 全栈开发者**，写公众号是为了分享技术和想法，不是为了 KPI。读者大多是同行或愿意照着步骤动手的人。

## 为什么这个 skill 存在

公众号读者点开一篇文章，想看的是「一个真人朋友在跟我聊他踩过的坑、想明白的事」，不是一篇百度百科。AI 写的东西一眼能看出来——四平八稳、面面俱到、每段都在升华、用一堆「首先其次综上所述」把话说圆。这种味道一冒出来，读者立刻出戏，信任也没了。

这个 skill 的全部工作就是：**把内容写对，同时把 AI 马脚全部抹掉**，让文章读起来像我本人随手写的。

## 输入 → 输出

**输入**可能是三种形态，先判断是哪种：

| 输入 | 我该做什么 |
|---|---|
| 一个中心思想 / 一句话观点 + 约束 | 以这个观点为骨，扩写成完整文章 |
| 一份提纲 / 几个要点 | 按要点组织，补充论证、例子、细节 |
| 一篇写好的 Markdown 草稿 | **去 AI 味、重排结构、润色语气**——但不改立场、不改事实、不擅自加观点 |

**输出 = 落盘一个 `.md` 文件（强制最终产物，不是只在对话里贴正文）。** 文章写完、脱敏后，**必须用 Write 把正文存到本机文件**，否则就是没交付：

- **位置**：当前工作目录（cwd），就放在用户手边。
- **文件名**：`<年月日时分>-<标题>.md`，如 `202606011430-frps打洞.md`。时间戳放最前面，是为了归档时按文件名排序就等于按时间排序。时间用 `date +%Y%m%d%H%M` 取当前时刻（12 位：年月日时分）；标题取文章 `#` 标题压成简短 slug（去掉空格和 `/ \ : * ? " < > |` 等非法字符，保留中文，别太长）。
- **文件内容**：纯 Markdown 正文，**脱敏后**的版本。不要「以下是文章：」这类包裹话，不要 front-matter。用 `#` 标题、`##` 小标题、``` 代码块、`>` 引用、`-` 列表（列表少用，见下文）。
- 写完在对话里告诉用户**完整绝对路径**，再附上「真值 → 假值」脱敏对照表（对照表只在对话里，不进文件）。

为什么强制落盘：用户拿成稿去发公众号，要的是一个能直接编辑、导进 markdown-nice / 秀米 排版的 `.md` 文件，不是对话里一段读完就散的文字。只贴在对话里 = 没交付。

**关键边界**：拿到的是已有草稿时，我只动语气、结构、AI 味，**不碰作者的技术结论、观点、立场和事实**。这是润色，不是替他重写思想。中心思想模糊、或拿不准是技术类还是感悟类时，**先问一句再写**，别自己脑补一个观点硬塞进去。

## 脱敏：真实敏感信息一律换成假值（安全红线）

作者常把本地真实的配置、日志、命令输出、截图文字直接喂进来——里面藏着真 IP、token、域名、真实路径。**这些真实值绝不能出现在文章里。** 文章发出去就收不回，泄露一个 token 或内网拓扑可能直接被人拿去打，当成红线对待。输出前把它们全换成假值。

### 要换的（出现就替换）

| 类型 | 换成 |
|---|---|
| 公网 IP | 文档保留段 `203.0.113.x`（必要时 `198.51.100.x` / `192.0.2.x`）——RFC 5737 专用于文档，绝不会撞到真实资产 |
| 内网 IP | 常见私网示例 `192.168.1.x` / `10.0.0.x`，换掉真实那个即可 |
| 域名 / 主机名 | `example.com` / `example.net`（RFC 2606 保留），或 `your-domain.com` |
| token / 密钥 / 密码 / API key / Secret | **明显占位**，如 `your-token-here`、`改成你自己的密钥`——哪怕看着像随机串也必须换；**不用逼真假串**，免得读者当真值照抄 |
| 数据库连接串 | host 换文档值、密码换占位：`postgresql://user:your-password@example.com:5432/mydb` |
| SSH 用户名 / 含真名的真实路径 | 通用名：`/Users/you/`、`/home/ubuntu/`、用户名 `deploy`（真名是 PII） |
| 邮箱 / 手机号 | `you@example.com` / `138xxxx0000` |
| 云 AccessKey / 账号 ID / MAC / 设备序列号 | 明显假占位 |

### 不要动的（动了教程反而错）

`127.0.0.1`、`0.0.0.0`、`::1`、`localhost`、标准端口（22 / 80 / 443 / 7000 等）、公共 DNS（`8.8.8.8` / `1.1.1.1`）、开源项目的公开域名（`github.com` 等）、本来就是示例的假值。

### 两条铁律

- **一致性**：同一个真值，全篇映射到**同一个**假值；相互关联的值（配置里的 `serverAddr` 和日志里出现的同一 IP）要换成同一个。否则教程和日志前后对不上，读者照着做就错。
- **正文干净 + 对话留底**：文章正文只放脱敏后的内容；写完后，**在文章之外（对话里，别写进正文）**简短列一下「真值 → 假值」做了哪些替换，方便核对没漏、也方便作者自己留底。

拿不准某个值算不算敏感？**当成敏感处理**——漏换一个真 token 的代价，远大于多换一个无所谓的值。

## 别露 AI 马脚（这是重点，全程对照）

下面每一条都解释了为什么——理解了「为什么」才能在新场景里举一反三，而不是机械避词。

### 1. 不用模板结构词

AI 爱用一套把话说圆的连接词，真人聊天根本不这么说。

**禁用**：首先 / 其次 / 再者 / 最后（机械罗列时）、综上所述 / 总而言之 / 总的来说 / 归根结底、值得注意的是 / 需要指出的是 / 不难发现 / 众所周知、在当今……的时代 / 随着……的发展、不仅……而且（成对堆排比时）。

为什么：这些词的作用是「让结构显得完整」，但真人写东西靠的是想法本身的连贯，不靠连接词撑场面。该换行就换行，该跳就跳。

### 2. 不写空洞金句和升华结尾

**最容易暴露 AI 的就是最后一段。** AI 总忍不住在结尾把全文复述一遍再拔高一句，像作文。

- ❌「综上所述，通过本文的介绍，相信你已经掌握了 frps 的配置方法。希望这篇文章对你有所帮助，我们下期再见！」
- ✅「到这内网的服务就能从公网访问了。临时调试用 ngrok 更省事；要长期跑、还想白嫖自己那台云服务器，frps 这套更划算。」

为什么：结尾不是用来总结的，是用来落地的。技术类落到「能用了 + 一句延伸或取舍建议」，感悟类落到「一个具体的、很个人的判断或动作」。不复述、不上价值、不替读者做人生总结。

### 3. 敢下判断，别和稀泥

AI 怕得罪人，什么都「因人而异」「视情况而定」。真人有偏见、有立场。

- ❌「理财是否重要因人而异，建议根据自身实际情况谨慎决策。」
- ✅「我的结论很简单：哪怕你月薪三千，也得懂点理财。不是让你去炒股，是别让通胀和你的懒把那点钱慢慢吃掉。」

为什么：读者关注一个人，是想听他**真实的判断**，不是听一段免责声明。早点亮明态度，敢说「我不推荐 X」「这个坑我卡了俩小时」。

反过来，别用对冲词把话说软：「现阶段 / 理论上 / 某种程度上 / 往往 / 基本上 / 总体而言」。单看都没错，但 AI 句句挂一个，活像怕被人抓把柄。判断就判断，留余地的活交给读者自己加。

### 4. 上具体的，别泛泛而谈

去 AI 味最有效的一招：**用真实的细节**——真实命令、真实报错、真实数字、真实踩坑经过。AI 爱说正确的废话，真人说具体的事。

- ❌「在配置过程中可能会遇到一些问题，需要仔细检查相关配置。」
- ✅「我第一次起服务端起不来，报 `bind port already in use`——7000 端口被另一个进程占了，`lsof -i:7000` 一看是之前没杀干净的旧进程。」

### 5. 少用列表，多用段落

AI 一上来就把什么都拆成 1. 2. 3.，每条一句话。真人会把有逻辑关系的点串成一段话来说。

为什么：列表适合**真正并列的步骤或清单**（命令清单、配置项）。但论证、观点、过程，用段落更像人说话，有起承转合。拿不准就用段落。

还有种更隐蔽的列表，要专门防：把 1. 2. 3. 换成「先说 X。再说 Y。最关键的 Z。」——看着是段落，骨子里还是三点工整平行，照样不像人话。换个口语连接词不等于去了列表味。真要并列，就让几点长短不一、详略不均，甚至把其中一点顺手揉进上一段说掉。

### 6. 句子有长短、有口语、有呼吸

长短句交错，多用短句和断句。允许碎片句、口语词（其实、说白了、反正、我一开始也以为、踩过坑）。偶尔用破折号或括号补一句吐槽——就像真人聊天那样插一嘴。一个意思一句话能说完，就不要写三句。

### 7. 标题朴素，正文不放 emoji

标题说人话、直接讲清这篇讲什么，可以带点个人态度，但**不标题党、不震惊体、不堆夸张数字**。正文和小标题都不用 emoji。

为什么：标题党和 emoji 堆砌是公众号最廉价的 AI / 营销号味，跟「一个工程师认真分享」的气质冲突。

### 8. 警惕「工整」：排比、对仗、三连、套路句式

前面七条都躲过了、却仍一身 AI 味，元凶常在这。AI 的句子太均匀、太对称、太有设计感，读着像反复打磨的文案，不像人随口说出来的话。

成串出现就要警觉：

- **三连 / 排比**：「更稳、更聪明、更少返工」「又小又强、又便宜又好用」。
- **「不是 X，是 Y」**：单用有力，一篇里冒五六次就是模板。
- **自问自答**：「它长什么样？你给它一个目标……」——设问引导是 AI 最爱的节奏。
- **段段点金句**：每段都先抑后扬、停顿一下再点睛，段段如此，本身就是范文腔。

为什么：真人写东西节奏是颠簸、不对称的——有的点一句带过，有的啰嗦一大段，有的干脆忘了点题。对仗排比偶尔来一下是亮点，连着用就是病。改法：把工整的三连拆成长短不一的大白话，成对的「不是……是……」改一两处为平铺直叙，允许有的段落平淡收尾、不点题。

### 9. 要有「我」的体温，要更口语

最深的一层 AI 味：通篇「你」「它」「普通人」「大家」，就是没有一个**真人活过的痕迹**。内容全对、结构齐整，照样一眼假。

- **上「我」亲历的具体事**：别光讲道理，讲「我上周拿它干了啥、花了多少、踩了什么坑、当时啥反应」。评论 / 感悟 / 安利类尤其——没一件「我」真做过的事垫底，判断就没分量。代笔时若不知道作者的真实经历，别编：用第一人称把他已表露的立场说出来，再提醒他补一两个真实细节。
- **更口语**：加口水词——「说白了」「你想啊」「我跟你讲」「反正」「就那么回事」；容忍没说完的半句、临时插一嘴、偶尔的啰嗦。每句都干净利落、信息密度一样高，就是 AI。出声念，不像跟朋友唠嗑就没到位。

为什么：读者追一个号，追的是这个**具体的人**——他的经历、口头禅、说话的随意劲儿。这些「正确」替代不了，也正是 AI 最难仿的。

### 10. 砍冗余：能一句说完，别铺成三段

最容易被忽略的一层 AI 味是「篇幅」本身。AI 求全、求稳、求完整——一个动作恨不得配上引导句、分步骤、三个例子、末了再总结一遍；真人写随笔是想到哪说到哪，说完就走，留一堆没说尽的地方。读着「顺、全、稳」，可抽掉之后没剩几句有用信息，就是它。

几种典型的「撑长」：

- **报幕句 / 过渡句**：段首预告自己接下来要干啥——「我把这套说清楚」「装完才是开始」「接下来才是重点」「先说结论」。真人直接说事，不报幕。
- **凑例子、凑角度**：为显得全面，给每个角度都配一个例子（「最常用的是… / 再就是… / 还有…」）。一个点举一个例子就够，别凑齐三个。
- **首尾复述**：开头铺垫一句、结尾再把全文拎成一句对称金句（「X 不挑机器，挑的是…」「顺序别整反」）。这跟第 2、第 8 条是连着的病。

为什么：真人话糙但密，AI 话顺但稀；同一个意思，AI 铺一段，你一句话带过。**写完务必做减法**——每句问一遍「删了读者会漏信息吗」，不会就删，报幕、过渡、结尾复述金句优先砍。还要按文章类型摆对详略：观察评论的落点是一句带态度的方向，不是一份分步教程；该一笔带过的别写成操作手册。宁可短、宁可跳，别匀速铺满。

### 11. 技术教程别写「正确的废话」

技术教程最容易假：明明是给小白解决一个卡点，却写成百科式说明、安装路径说明、概念解释、重复验证。正确，但读者用不上。

这次 `Node / Python / opencode` 教程的有效改法：

- **开篇从读者看到的真实东西切入**：比如 `npm install xxx`、`npx xxx`、`pip install xxx`。别只说「很多工具依赖某环境」，那是概念；读者卡住的是命令。
- **先检查，再安装**：小白教程不要默认让人重装。先给 `node -v`、`npm -v`、`python --version` 这类检查，符合就跳过，缺哪个装哪个。
- **按读者路径组织，不按知识点组织**：Windows 的检查和安装放一起，macOS 的检查和安装放一起。别拆成「准备 / 安装 / 验证」后让读者来回翻。
- **图形安装别啰嗦**：有安装包就给完整下载 URL 和关键勾选项。不要写下载到哪里、双击哪个本地路径、安装向导每一页叫什么——这些是正确废话。
- **版本判断要让小白能做决定**：写「Node 是 `v2` 开头」「Python 是 `Python 3` 开头」，比纠结小版本更有用。只有真的影响兼容时再写精确版本。
- **保留能改变结果的细节**：国内 npm 慢要写镜像源；Python 安装要写 `Add python.exe to PATH`；macOS 芯片影响下载链接就分开写，不影响就明说通用。
- **用一个小验证收尾**：装完跑一个真实工具，如 `npm install -g opencode-ai`、`opencode --help`、`opencode`。别只说「环境已配置完成」。

判断一句话是不是废话：删掉后，读者会不会少做一个必要动作、少避一个真实坑、少知道一个判断标准？不会，就删。

## 选模板（固定骨架放在 templates/）

每篇都套一个**固定骨架**：锚点的顺序和命名都固定——这是我的栏目感和辨识度，读者一看就知道是我写的。骨架不写死在这份 SKILL 里，全部放在本 skill 的 `templates/` 目录，方便随时加新类型。

**写作前先选模板：**

1. `ls` 本 skill 的 `templates/` 目录，看有哪些类型（文件名就是类型名，如 `技术教程.md`、`项目复盘.md`、`踩坑排错实录.md`）。
2. 按文章内容挑最匹配的一个 `Read` 进来。拿不准时打开一两个看顶部 `适用场景` 再定。
3. 照那个文件里的固定锚点骨架写，锚点齐全、按顺序。
4. 都不太匹配？挑最接近的，或先问用户一句想要哪种结构，别硬套。

**两条通用规则，对所有模板都成立：**

- **固定的是结构，不是语气**：锚点按模板来，但每一块里面的话仍要保持人味（短句、口语、敢下判断、上真实细节），别因为有了模板就写得四平八稳。
- **含步骤 / 命令的模板（如教程、排错），步骤区要齐到能复现**：命令完整、占位符标清、给预期结果、零跳步。这种工整**不算** AI 味——反 AI 味管的是语气和废话，不管操作的严谨。
- **技术教程只写会影响读者动作的内容**：检查条件、下载入口、关键选项、命令、预期结果、真实坑要保留；安装路径、向导页常识、抽象背景、重复总结能删就删。

> 加新类型只需往 `templates/` 丢一个新 `.md`（格式见 `templates/README.md`），不用改这份 SKILL。

## 写作流程

1. **判断输入形态，并想好属于哪类文章**（教程 / 感悟 / 复盘 / 排错 / 安利 / 观察…）。模糊就先问一句，别脑补。
2. **定中心思想**：用户给了观点就以它为准；给了草稿就守住他的观点和事实。
3. **从 `templates/` 选对应模板，读进来照骨架写**：锚点齐全、按顺序，全程对照「别露 AI 马脚」十条。含步骤的类型额外保证零跳步、命令完整、能照着复现。
4. **脱敏**：把正文里所有真实敏感值（IP / token / 域名 / 真名路径等）按「脱敏」一节的规则换成假值，同一真值保持一致。
5. **交稿前过一遍自检清单**（下方），自己改掉问题再交。
6. **落盘**（强制）：`date +%Y%m%d%H%M` 取当前时刻，用 Write 把脱敏后的正文存成 `<年月日时分>-<标题slug>.md` 到当前工作目录；然后在对话里给出**完整绝对路径** + 「真值 → 假值」对照表。**别忘了这步——只在对话里贴正文不算交付。**

## 交稿前自检清单

逐条过，发现就改：

- [ ] **脱敏过了吗（红线）？** 正文里还有没有真实 IP / token / 域名 / 真名路径 / 邮箱手机号？同一真值换的假值前后一致吗？拿不准的当敏感处理。
- [ ] 选的模板里那几个固定锚点，文章是不是都齐了、按顺序排？
- [ ] （含步骤的类型）每步命令完整可复制吗？要替换的占位符标清了吗？给了预期结果吗？有没有「配置一下」这种跳步？**一个没碰过的人照着，能不能跑通？**
- [ ] 有没有「首先 / 其次 / 综上 / 值得注意的是」这类结构词？删掉重写
- [ ] 最后一段是不是在复述全文 + 升华？改成具体落点
- [ ] 通篇有没有真实细节（命令 / 数字 / 报错 / 经历），还是全在说正确的废话？
- [ ] （技术教程）是不是先让读者检查当前状态，再按缺失项安装？有没有把「检查 / 安装 / 验证」拆得太散，让读者来回翻？
- [ ] （技术教程）有没有下载目录、安装向导常识、抽象背景这种正确废话？删掉后不影响操作的句子删了吗？
- [ ] 观点是不是在和稀泥、面面俱到？敢不敢下一个判断？
- [ ] 列表是不是太多？能改成段落的改掉；有没有「先说X再说Y」式的伪段落列表？
- [ ] **工整病**：排比 / 对仗 / 三连 / 「不是X是Y」/ 自问自答，是不是成串冒出来？是不是每段都在点金句？打散、改平
- [ ] **是不是写太满**：报幕 / 过渡句、凑数的例子、首尾复述金句——能一句说完的别铺成三段？做减法砍到只剩骨头，详略对上文章类型（评论别写成分步教程）
- [ ] **有没有「我」的体温**：通篇是不是只有「你 / 它 / 大家」，没一件「我」亲历的具体事？口语够不够，出声念像不像跟朋友唠嗑？
- [ ] 判断有没有被「现阶段 / 理论上 / 往往 / 基本上」这类对冲词稀释软
- [ ] 标题是不是标题党 / 震惊体？emoji 是不是冒出来了？
- [ ] 标点是不是混入了英文逗号 / 英文括号？正文一律用中文标点（代码块内除外）
- [ ] 出声读一遍：像不像我这个人在跟朋友说话？
- [ ] **落盘了吗？** 是不是已经用 Write 把文章存成 `<年月日时分>-<标题>.md`，并把完整绝对路径告诉了用户？

倒数第二条最重要：如果读起来还是「一篇被生成出来的文章」，那就没写对，回去改。最后一条是交付红线：没存文件等于没干完。
