让 agent 代写博客,卡住我的不是内容,是风格。反复改了几版都不对味,最后把博客库全量统计了一遍,整理出可复用的风格特征,并用 subagent 迭代验证到收敛。这篇分四部分:风格素材库(可直接喂给 AI)、采样过程与迭代、写《AI 做微信表情包》的实战、subagent 迭代实践。

1. 我的写作风格(素材库)

以下特征基于全库 144 篇、53 万字的统计,跨主题稳定。本素材库是完整的风格约束,不依赖任何具体博客内容;如需感知风格,可另读样例博客(仅学写法,样例的具体内容禁止进入新博客)。

结构:数字分节。正文用 ## 1. 素材挖掘、### 1.1 微信头像缓存在哪 这样的层级组织,每个小节一个独立的技术点。不用「一、二、三」,不用章节标题散文式引言。

信息密度高,每节一个具体技术点,展开充分。一个小节讲清一个坑:现象是什么 → 根因是什么 → 怎么解决,但要把坑讲透——现象、根因、解决、随手例子、相关数据都展开,一个小节至少是一个完整段落(3 句以上)。禁止一句话小节:不要写”### xxx”标题下只有一句正文;每个小节必须有实质展开,全文各小节内容量大致均衡。不要展开讲解背景,不要”总的来说”。

硬核记录,不写散文。技术细节全部落具体:命令、路径、报错原文、参数、代码块、gist 链接直接贴。sticker 里写”微信缓存路径是 ~/Library/Containers/com.tencent.xinWeChat/.../2.0b4.0.9/“,写”canvas.convert('RGB') 会把透明像素变成纯黑(0,0,0)”,都是落地的记录。

表格用于版本/参数对比。多轮迭代、多参数比较时用表格,每行一个版本/参数,列是维度。sticker 的”文字样式迭代 6 版”表格就是模板。

关键结论加粗。每节最重要的一句用 **加粗**,比如 sticker 里的”63 张去重后只剩 27 张不同的照片”、”微信把同一张图以不同文件名缓存了多次”。

记录驱动,不是讲解驱动。写”我做了什么、发现了什么、怀疑什么”,不是写给读者看的教程。开头一句话进主题,sticker 开头是”目标:把历史微信头像(都是我家猫的照片)做成一套微信表情包”。

开场是”目标 → 流程 N 步 → 结果”三段式,不是复盘。sticker 开场三句:① 一句”目标:把 A 做成 B 并在 C 提交上架”(一个动作链,主语明确);② 一句”整体流程分四步:A → B → C → D”(每步带括号工具/方法);③ 一句最终结果(“最终「玳瑁烟大王」17 张静态表情提交成功,进入审核”,带具体数字与状态)。禁止复盘式开场:「从 X 到 Y 连发 N 条提交,核心是把 Z 做对」「8 月 X 日到深夜」这类时间+统计总结是 AI 腔。目标句里不塞技术栈、仓库路径、GitHub 链接、冒号罗列的功能清单——这些留给正文小节,开场只给动作链。

中英混排是肌肉记忆。专业术语全部保留英文,不翻译:agy、Playwright、RGBA、Mermaid timeline、Obsidian、callout、prompt、token。统计显示 70% 的行含英文术语。

结论带个人评估。直接下判断:sticker 里”通用名都易重名,改用毛色特征起名,一次通过”。不用”可能”“或许”。

疑问直接写进正文。实验中的未解疑问原样保留,是记录的一部分。

emoji 少但会用。🤔️ 表疑问,😮💨 表无奈,用于情绪,不是装饰。一篇文一两个就够,sticker 那篇全篇没有也是可以的。

段落正常写。句子完整、信息密度高、直接不啰嗦。碎片化短句堆砌是坏习惯,不继承;但也不要写长段落散文。每个小节至少一个完整段落(3-5 句),段内把点讲透,不用一句话充一个段落;小节之间内容量要均衡,不要有的三行、有的三句。

视角规则:”我”是博客作者本人,AI/agent 是工具。禁止第三人称称呼(“用户”“自家猫”)。

反例(agent 默认倾向,要禁止):公众号式开头(“突发奇想”“过程曲折”)、复盘式开场(「从 17:32 到 23:42 连发 40 条提交,核心是把 Z 做对」这类时间+提交数统计)、完整论证链(“原因是…所以…综上所述”)、术语翻译、空洞过渡句、段落式平铺、只有描述没有具体细节。

格式取舍:特殊格式优先零依赖方案。时间线用 Obsidian callout(> [!timeline] + **10:00** · 事件),不用 Mermaid timeline(在 Obsidian 解析不稳定,时间点冒号与语法冲突)。

2. 采样过程与迭代

素材库不是一次写出来的,是两次采样、三次定位迭代磨出来的。第一次采样就翻车了,重做全库统计才拿到靠谱的数据。

2.1 第一次采样:4 篇样本,风格判断全错

第一次只挑了 4 篇博客(alpha 系列和工具教程)喂给 agent,主题集中在量化。Gemini 第一轮分析把”正交”“压榨”“真谛”列为我的常用语——这三个词在量化博客里高频出现,却是主题术语,不是写作特征。根因是样本主题单一:agent 分不清”主题词汇”和”风格词汇”,把内容词误判成了文风。这一轮唯一的价值是让我意识到采样方法错了,于是重做全库统计。

2.2 全库重统计:144 篇、53 万字

全库 144 篇、53 万字,按主题分类:

主题 篇数
量化 17
几何 12
blender 22
AI 生成 10
色彩 6

统计了三个风格指标:emoji 只有 42/144 篇在用(29%),中英混排率平均 70%,口语判断词里”就是”出现 33 篇、”直白地说”只有 2 篇。结果推翻了好几个直觉判断:我以为自己不用 emoji,实际上有 29% 的篇目在用;”直白地说”极少出现,真正的口语连接词是”就是”。风格采样必须跨主题、够数量,单主题样本会让 agent 把主题词汇误判成风格——这是采样流程里最硬的一条。

2.3 定位迭代:三次收敛到”个人实验记录”

理解自己写的是什么,也迭代了几轮:

版本 定位
第一轮 干货文章
第二轮 技术笔记
第三轮 实验记录
最终 个人实验记录

最准确的说法是:我的博客是个人实验记录,记录驱动、带疑问、带个人评估,不是教程。差别在”个人”二字——记录是给自己的,不是输出给读者的。这个定位定准了,后面的写作才有方向;定位错了,特征清单写得再全也对不上味。

3. 写《AI 做微信表情包》博客的实战

[!timeline] 实战过程

  • 第一轮 · 初稿公众号味(突发奇想开头/emoji/术语翻译),直接重写
  • 第二轮 · Mermaid timeline 解析失败(10:00 冒号与语法冲突),改 callout + 列表
  • 第三轮 · 视角替换:agent 写”用户”“自家猫”,全文换成”我”“我家猫”
  • 收尾 · 三轮收敛;样本+清单+规则给全的话一轮能到位

素材库和采样方法定型后,我用它写《AI 做微信表情包》,实际走了三轮。三轮里每轮一个明确问题:初稿重写、时间线格式、视角替换,下面按顺序记录。

3.1 初稿是公众号味,直接重写

初稿完全没对上素材库:agent 写了”突发奇想”“过程曲折”开头,全文 emoji,术语全翻译(Playwright 写成”浏览器自动化工具”,agy 写成”识别工具”)。对照反例清单,公众号式开头、emoji、术语翻译三条全踩,而且都踩在最基础的条目上。没有修补价值,直接重写。

初稿问题 素材库规则
“突发奇想”开头 开头一句话进主题
全文 emoji emoji 少用,一篇一两个
Playwright → 浏览器自动化工具 术语保留英文
agy → 识别工具 术语保留英文

3.2 Mermaid timeline 解析失败,改用 callout

时间线本来想用 Mermaid timeline 画,Obsidian 解析失败:时间点 10:00 的冒号与 时间 : 事件 语法冲突,去掉冒号后仍有版本兼容问题。改用 callout + 列表,> [!timeline] 下一行一条 **10:00** · 事件。这次失败直接固化成素材库 1.5 的格式取舍规则:特殊格式优先零依赖方案。

3.3 视角替换:agent 把我写成”用户”

视角上 agent 把我写成”用户”,把猫写成”自家猫”,全文手动替换成”我”“我家猫”才收敛。视角错误不是措辞问题,是身份问题——”我”是作者本人,agent 是工具,第三人称一出现整篇就变味。这类替换没有规则可写,只能逐句排查。

3.4 三轮迭代才收敛

整篇博客走了三轮:初稿重写一轮,时间线格式一轮,视角替换一轮。如果一开始把样本、特征清单、视角规则、格式要求一次给全,一轮能到位,不用像这次三轮收敛。

4. subagent 迭代实践

素材库本身也经历了三次 subagent 验证,每次输出暴露一个问题,就把规则固化进素材库,直到收敛。这个循环是素材库质量的关键:不验证,素材库只是我的自说自话。

4.1 第一次验证:输出是散文,信息密度低

初版素材库开 subagent,输出是讲解味散文:每节一段话描述特征,但没有具体技术细节支撑,结构也松散。对照表情包那篇博客(sticker),差距明显——sticker 是数字分节、每节一个技术点、硬核记录,subagent 输出全都没有。问题在素材库:只描述了”语气”,没约束”结构”和”信息密度”。

这一轮还暴露一个坑:初版素材库引用了 sticker 作为”最佳样例”,subagent 读它会直接把表情包的具体内容抄进新博客——素材库一旦绑定具体样例,内容就被污染,而且以后写别的主题也复用不了。修正:素材库与内容解耦,样例只学写法,内容隔离声明写进任务。

4.2 第二次验证:小节太碎,一句话一个小节

补上”数字分节、每节一个技术点、硬核记录、表格、加粗”后重开 subagent,结构和密度都对了,新问题出现:一个小节只有一句话——12 个 x.x,每个标题下孤零零一句,像提纲不像正文。根因是素材库要求”每节一个技术点”时没强调展开量,agent 就按最省的方式写。

修改素材库:加”每个小节至少一个完整段落(3-5 句),禁止一句话小节,小节之间内容量均衡”,并把相近特征合并成组,保证每节有料可写。

4.3 第三次验证:收敛

第二次修改后重开 subagent,小节合并成组、每节完整展开,结构、密度、表格、加粗、中英混排、视角全部到位,这次收敛了。整个验证流程:subagent 输出 → 对照 sticker 找差距 → 差距固化成素材库规则 → 重开 subagent。每次只暴露最明显的问题,一轮修一个,三轮收敛。

4.4 结论

  • 素材库必须可迭代:不经过 subagent 验证的素材库,只是自我感觉;每次输出暴露的问题,都是素材库缺的规则。
  • 素材库与内容解耦:不能引用具体博客当样例(会被 hack),样例只学写法,内容隔离声明写进任务。
  • 约束要写”量”:”每节一个技术点”不够,还要”至少一个完整段落、禁止一句话小节、内容量均衡”——agent 会按最省的方式执行,量必须显式。
  • 对照标杆审稿:每次验证都拿 sticker 当标杆对比,差距就是下一轮要加的规则。