Back to all posts

我如何将博客生产全流程自动化

我如何将博客生产全流程自动化

我是 Ming。在 vm0 负责产品设计的同时,内容运营也是我工作的一部分。这件事比我预想的复杂得多:工作流设计、插图制作、图片生产、CMS 管理、多语言翻译。以下是我逐步将这一切搞定的过程。


内容运营是我工作的一部分

我在 vm0 的日常主要分配在产品设计和 Next.js 代码库上。但内容运营也在我的职责范围内,一旦认真投入,我才意识到一篇表现出色的博客文章背后需要多少工作:持续稳定的产出、真正有效的关键词研究、符合品牌调性的视觉设计、像样的 meta 描述,以及我们支持的四种语言的翻译。

当我开始认真做这件事时,每篇文章几乎要花掉一整天。写作本身只占其中一小部分,大部分时间都耗在写作之外的生产工作上:找到合适的关键词、制作封面图、在 CMS 中填写各个字段、再为每个语言版本重复一遍。

于是,我逐渐将这条流水线中尽可能多的环节交给了 Lucas——一个我基于 Zero 构建的 AI 营销 Agent,专门服务于我的日常工作。他被配置为"营销经理"角色,职责范围涵盖一切与营销相关的事务:博客生产是目前最完善的模块,随着我不断添加技能和连接器,他的能力也在持续扩展。

目前,Lucas 可以访问我们的 Strapi 无头 CMS、Ahrefs 账户、团队 Slack、网页聊天,以及一个用于生成品牌一致性插图的内部 draw 技能,还有负责写作机制的标准 copywriting 技能。

下面我将介绍这套 AI 博客自动化流程在实践中的运作方式:Lucas 如何接收一个模糊的提示,将其分解为主题和关键词,起草文章,绘制封面,对文本进行自然化翻译,最终将四个语言版本的草稿落入我们的无头 CMS。之后我还会谈谈我是如何走到这一步的,以及哪些环节我刻意保留给人工处理(目前大多数还是我自己来)。


我如何使用 Lucas:网页应用与 Slack

我主要通过 vm0 的网页聊天与 Lucas 协作。这是一个适合深度工作的界面,我在这里与他一起完成提纲梳理、草稿撰写、封面迭代和内容修改。长线程、长上下文,这种来回打磨的方式放在聊天频道里会显得很别扭。

Lucas 也接入了我们的团队 Slack,作为共享入口。我会在手机上向他发送简短的提示,团队其他成员也可以随时联系他。负责博客轮值的人用同样的方式启动一篇文章。同一个 Agent,两个界面共享同一套上下文。


一个典型的提示是什么样的

我给 Lucas 的提示通常很简短,最多三句话。一个典型的例子:

Lucas,写一篇关于如何高效开展每周例会的教程:涵盖会议结构、常见误区,以及如何保持远程团队的参与感。教程风格,SEO 友好,结尾附上使用 Zero 的行动号召。只生成草稿链接,不要发布。

就这些,一条消息,没有提纲、没有关键词列表、没有设计简报、没有字数要求。Lucas 从这里接手。

我花了一段时间才摸索出这种格式。早期我会写很长的简报,因为我以为 Agent 需要把所有细节都交代清楚,后来才意识到大部分上下文应该放在他的常驻指令和技能里,而不是每次提示中。提示是触发器,其余的配置才是真正承载重量的部分。


Lucas 如何分析主题和关键词

Lucas 的第一步是从模糊的提示中提取结构。对于上面那个请求,他的工作笔记大致如下:

  • 主题: 如何高效开展每周例会
  • 格式: 教程 → 编号步骤、具体示例、"这样做"式语言
  • 隐含受众: 团队负责人、远程管理者、创始人
  • 必要章节: 会议结构、常见误区、远程参与感
  • 行动号召: 引导读者使用 Zero
  • 限制: 仅生成草稿 URL,不发布

然后他选定关键词。这是内容营销中我刚开始时最没有直觉的部分,所以我给了 Lucas 一套固定流程,每次我提示他做关键词工作时都会走一遍。这不是他自主运行的技能,只是一个我信任他执行的步骤序列:

  1. 从 Ahrefs 拉取候选词。 他调用 Ahrefs API,输入主题短语,返回带有月搜索量、关键词难度(KD)、父主题和 SERP 意图的长尾变体。
  2. 按难度过滤。 我给了他一条硬性规则:KD < 30。vm0 是一个相对较新的域名,权威度有限,追逐高 KD 关键词目前对我们来说并不划算。长尾词在早期更容易取得成效。
  3. 与 Strapi 索引交叉比对。 他通过 Strapi REST API 拉取所有已发布的 slug,并排除我们已经覆盖的关键词,避免内容蚕食。
  4. 将意图与产品契合度匹配。 关键词的意图必须与我们的用例库兼容。"如何高效开展每周例会" → 运营/团队管理 → 契合。"东京最好吃的拉面" → 不契合,无论搜索量多大。
  5. 选定一个。 从过滤后的列表中,他选择搜索量最高的选项,作为文章的核心关键词。例如:远程每周例会最佳实践

在页面 SEO 方面,他遵循一个简单的启发式规则:目标关键词出现在标题中、至少一个 H2 中,以及前 100 个词中。同义词和相关短语自然地穿插全文。在合适的位置内链到两三篇相关文章。此后:自然地写作,不堆砌关键词。

文章结构(六七个 H2、每个步骤下方的"提示:"标注、结尾的行动号召)来自我通过多篇文章积累起来的教程模板。


封面图是如何绘制的

封面图是博客生产中我最在意的部分,一方面因为我是设计师,另一方面因为它是读者在读任何一个字之前首先看到的东西。它也是文章在 X 或 LinkedIn 上分享时的 Open Graph 图片,正是它让我们的博客索引页看起来像一本出版物,而不是一堵库存照片的墙。

库存照片无法呈现我想要的风格,而逐一为插图写设计简报会让每篇文章的生产成本变得难以承受。于是我构建了一个名为 draw 的 Zero 技能。它是一个约 200 行的 Python 脚本,完成五件事:

  1. 接收两个输入:一个隐喻(要绘制的内容)和一个颜色(友好名称加十六进制锚点)。
  2. 将它们填入一个固定的提示模板,该模板锁定了其余所有构图要素:暖灰色背景 #eeeeee、画布中央以所选颜色绘制的水彩色块、色块上方的手绘墨水素描、vm0 logo 位于左上角 (25, 25) 处。
  3. 将组合好的提示发送至 fal.ai 的 nano-banana-pro 模型,输出比例 16:9。
  4. 下载 PNG 文件。将所有接近白色的像素归一化回精确的 #eeeeee,确保背景颜色不发生漂移。放大至 1600×900。将透明的 vm0 logo 合成叠加在上方。
  5. 将结果上传至 vm0 的 CDN 并输出 URL。

一次典型的调用如下:

python draw.py \
  --metaphor "a tilted hourglass with sand draining into a small open notebook, a sparkle near the rim" \
  --color-name "dusty rose" \
  --color-hex "#e08b96" \
  --upload

只需两个输入,其余品牌元素保持一致。我通常会根据文章主题选择合适的颜色。偏暖的教程类文章用珊瑚色或鼠尾草绿,技术性较强的文章用蓝色或薰衣草紫,公告类文章用芥末黄。几种反复出现的颜色慢慢让博客索引页形成一套可辨识的色彩体系。

我摸索出的一个关键经验是:杠杆点不在于模型本身,而在于模板。让模型自由选择构图、配色和版式,每张封面看起来都像来自不同的品牌。锁定这些要素,只让它选择隐喻,才能保持文章之间风格的一致性。

还有一个姊妹技能叫 illustration,用于文章内部的点缀插图(也就是你在本文各章节之间看到的那些小图)。思路相同:固定风格,只有隐喻和颜色可变。只是针对 1024×1024 的正方形插图进行了调整,而非 16:9 的封面。

关于图片 SEO 的一点说明:同一张封面图同时被配置为文章的 Open Graph 和 Twitter Card 资源,社交分享时可以直接抓取。Strapi 在上传时会自动生成四种预缩放变体(缩略图、小图、中图、大图),不过我还没有将文章正文配置为通过 srcset 加载这些变体,这是一个待完成的前端小任务。内联插图在 Lucas 将其嵌入 Markdown 时会写入描述性 alt 文本;封面图在 Strapi 中的 alternativeText 字段是我还想补全的内容。


文章是如何写成的

一旦主题、关键词和封面确定,起草工作基本上就是机械性的了。Lucas 的流程:

  1. 先列提纲。 六七个 H2,每个都有明确的职责:问题框架、分步说明、"提示:"标注、总结、行动号召。
  2. 将每个 H2 扩展为正文,使用 copywriting 技能。文章语气(短句、具体示例、适当使用第二人称、偶尔的干式幽默)来自我在 Lucas 常驻指令中设定的规则,而非技能本身。
  3. 在每个步骤下添加实用的"提示:"标注。 对教程类文章尤为有用,因为大多数读者会快速浏览,这些标注为他们提供了一条穿越长篇内容的路径。
  4. 撰写文章的 description 字段。 Strapi 将其限制在 80 个字符以内,因此它保持简短,读起来像是人写的。它被用作文章副标题以及 OG/Twitter Card 描述。
  5. 以行动号召收尾,点名产品并链接到免费工作区。

第一稿通常在提示发出后两三分钟内返回。我阅读后,在语气偏差的地方要求调整,Lucas 迭代直到满意为止。第一稿很少能直接发布,通常大体上是对的,但有些地方不够准确,这也是我花费大部分审阅时间的地方。


草稿如何落入 Strapi

我们使用 Strapi 作为无头 CMS。articles 内容类型包含 cover(媒体)、authorcategory(关联关系)、locale(字符串),以及正文所在的 blocks 动态区域。

Lucas 的 CMS 同步流程:

  1. 将封面 PNG POST 到 /api/upload,保存返回的 documentId
  2. POST 到 /api/articles?status=draft,携带标题、描述(≤80 字符;Strapi 强制执行)、slug、locale、封面/作者/分类关联关系(以数字 ID 表示),以及包含 Markdown 正文的单个 shared.rich-text 块。
  3. 关键:省略 publishedAt Strapi 将 null 视为草稿状态。
  4. 使用 vm0 的草稿 URL 模式返回预览链接:https://www.vm0.ai/{locale}/blog/posts/{slug}?status=draft

关于 Strapi v5 的一个提示:公开 REST API 可以在某些内容类型上覆盖 publishedAt,这意味着通过 API 创建的"草稿"可能会悄悄上线。解决方法是一个小型数据库迁移,在草稿写入时去除该字段。

Slug 策略对 SEO 同样重要。我们在所有四个语言版本中使用同一个规范 slug,而不是翻译它。/de/blog/posts/remote-weekly-meeting-best-practices 的读者与 /en 的读者看到的是相同的 URL 结构,我们的外链资源也不会因翻译后的 URL 而分散。从这些语言关联关系中输出 hreflang link 标签是一个待完成的前端小任务,目前尚未上线。


i18n 翻译是如何运作的

vm0 支持四种语言:英语、德语、日语、西班牙语。我们不使用 Google 翻译处理文章。廉价的方式会破坏文章语气;正确的方式是对习语进行本地化适配。

Lucas 首先创建英语草稿,获取返回的 documentId,然后发出三个后续请求:PUT /api/articles/{documentId}?locale=de(以及 ?locale=ja?locale=es),携带自然化翻译后的内容。Strapi 将这些视为同一规范文档的语言变体,使四个版本在后台管理和前端语言切换器中保持关联。

我给他的翻译规则,大多来自遇到错误输出后的纠正经验:

  • 不要翻译目标语言中已是英语借词的技术术语。 "API"、"CMS"、"agent"和"prompt"在日语和德语中保持英文原样。翻译它们在两种语言中都显得生硬。
  • 自然地适配习语。 "kills your Friday"的字面德语翻译毫无意义;用同等隐喻的本地化表达才能传达原意。
  • 按语言调整行动号召的语气。 祈使句在德语中感觉更强硬,所以我会降低语气;日语版本通常软化为礼貌的邀请。
  • 根据长度调整标题。 德语标题往往比英语对应版本长约 30%,日语标题则往往更短。Lucas 将每种语言的标题控制在 60 字符的 SERP 截断限制以内。

多语言内容发布曾经是这套工作流中最耗时的部分。现在它只是同一个 Agent 运行中的最后一步。


哪些环节不做自动化

这是一个简短但重要的章节。这套工作流中并非所有事情都是自动化的,这是有意为之:

  • 战略层面的选题。 Lucas 在一个主题内选择关键词,但主题本身来自我,通常源于产品发布、客户对话或路线图调整。
  • 最终编辑审阅。 每篇草稿在发布前我都会亲自阅读,尤其是英语版本。语气、技术表述的准确性、对内部产品背景的呼应,都需要人工审视。
  • 我不熟练掌握的语言的母语审阅。 我的德语不够流利,德语草稿在发布前会交给母语审阅者做最终检查。
  • 推广。 发布到 X、发送给订阅者、在社区中分享,目前仍是手动完成的。

重点不是把我从流程中移除,而是把我从那些真正不需要我的环节中解放出来。


我是如何走到这一步的

我并不是某个周末坐下来设计了这套系统。它是一篇文章接一篇文章地积累起来的,源于我注意到哪些步骤在消耗我的时间。

我注意到:值得自动化的部分并不是创意性的部分,而是连接性的部分:关键词拉取、封面渲染、上传调用、多语言分发、预览 URL 格式化。如实追踪后我发现,我花在事务性工作上的时间比花在实际写作上的时间还要多。

于是我逐渐将事务性工作移交给 Agent。模型负责写作,Agent 负责搬运和整合。我仍然是决定写什么、应该呈现什么风格的那个人,只是不再是把各个碎片拼接在一起的那个人了。

对我来说,内容自动化在实践中最终并不是"AI 写博客",而是"AI 处理写作之外的一切,让我有时间真正专注于写作本身"。


如果你想尝试类似的方案

如果你处于类似的处境——身兼数职,内容运营是其中之一——这套方案的大部分都是可以复现的:

  • 一个允许你为 Agent 设置持久角色和技能的 Agent 平台(我们使用 Zero,Lucas 就在这里)。
  • 连接到你现有工具的连接器:你的 CMS、关键词研究工具、图像生成工具、Slack。
  • 一小套针对你品牌定制的技能(在我们这里是用于封面的 draw 和用于语气的 copywriting)。
  • 承载上下文的常驻指令,让每次提示可以保持简短。

免费开启 Zero 工作区 →

或者如果你想在注册前先了解更多 Agent 工作流,我们的用例库提供了 19 个涵盖工程、产品、营销和运营的即用型自动化方案。

如果你想直接复刻 Lucas:创建一个 Agent,赋予他营销经理角色,连接 Strapi(或你的 CMS)+ Ahrefs + 一个图像生成工具,添加一个参照你自己品牌建模的 draw 技能,以及一个捕捉你品牌语气的 copywriting 技能。从你的第一条提示开始,他会自己摸索出其余的一切。

Stay in the loop

// Get the latest insights on AI teammates and collaboration.