摘要:我开发了一个 AI 写作助手,实现了从主题推荐、大纲编写、HTML 生成、用户审核到 WordPress 发布的完整自动化工作流。2 小时完成 6 篇文章,效率提升 300%。
一、引言:写博客为什么这么累?
每个博客作者都经历过这样的痛苦:
- 找选题:对着空白文档发呆半小时,不知道写什么
- 写大纲:反复修改结构,总觉得逻辑不够清晰
- 排版格式:调整代码块、表格、引用,花费大量时间
- 发布流程:复制粘贴、设置分类标签、预览检查,繁琐重复
这些重复性劳动消耗了我们的创作热情。作为一名 AI 开发者,我决定用 AI 来解决这个问题。
我的解决方案:开发了一个 AI 写作助手,实现从构思到发布的全流程自动化。
成果:
- ✅ 全自动工作流,从触发到发布只需用户确认 2 次
- ✅ HTML 格式自动验证,符合 WordPress REST API 要求
- ✅ 分类标签自动匹配,无需手动设置
- ✅ 2 小时完成 6 篇文章,效率提升 300%
本文将详细介绍这个 AI 写作工作流的设计思路、实现细节和踩坑记录。
二、工作流设计思路
为什么需要工作流?
一开始,我也尝试让 AI 直接写文章,但遇到了问题:
- 质量不稳定:有时写得好,有时写得差,没有保证
- 反复修改:用户不满意就要重写,浪费时间
- 格式错误:HTML 标签错误,发布失败
我意识到,需要像软件开发一样,设置明确的阶段和质量门禁。
工作流阶段划分
我将写作流程分为 8 个阶段:
1. 主题推荐 → 2. 大纲编写 → 3. HTML 生成 → 4. 用户审核
↓
5. Git 提交 ←────────────────────────────── 确认通过
↓
6. 发布草稿箱 → 7. 用户确认 → 8. 正式发布
阶段划分原则
1. 每个阶段有明确的输入输出
- 主题推荐:输入对话内容 → 输出 2-5 个主题
- 大纲编写:输入选定主题 → 输出详细大纲
- HTML 生成:输入审核通过的大纲 → 输出 HTML 文件
2. 依赖关系清晰
- 大纲依赖主题(先选主题再写大纲)
- HTML 依赖大纲(先确认大纲再生成)
- 发布依赖审核(先审核通过再发布)
3. 设置质量门禁
- 大纲需要用户确认
- HTML 需要通过 htmlhint 验证
- 发布前需要用户最终确认
并行 vs 串行
工作流中既有串行也有并行:
- 串行:主题→大纲→HTML→审核→提交→发布(每步依赖前序输出)
- 并行:HTML 生成和验证可以同时进行(验证不阻塞生成)
三、工作流详细流程
阶段 1:主题推荐
触发方式:
- 用户说”写博客”、”写文章”、”写日志”等
- 或输入命令”/publish-blog”
AI 分析当天对话内容:
- 提取关键事件(如”开发了新技能”、”发布了 6 篇文章”)
- 识别技术亮点(如”HTML 验证”、”REST API 集成”)
- 生成 2-5 个推荐主题,每个附带简短说明
输出示例:
根据今天的对话内容,我推荐以下几个主题:
- wordpress-blog-writer Skill v2.0 诞生记 – 记录技能从 Markdown 升级到 HTML 的完整过程
- AI 批量发布博客的完整工作流 – 展示从转换到发布的自动化流程
- WordPress REST API 认证踩坑全记录 – 详细的问题排查过程
你想写哪个主题?
阶段 2:大纲编写
用户选择主题后,AI 生成详细大纲:
大纲要求:
- 一级 + 二级标题结构
- 每个部分包含简短说明
- 用 Markdown 格式展示,便于阅读
大纲示例:
## 一、引言
- 痛点:写博客为什么这么累?
- 解决方案:AI 写作助手
- 核心成果:效率提升 300%
## 二、工作流设计思路
- 为什么需要工作流?
- 阶段划分原则
- 并行 vs 串行
## 三、工作流详细流程
- 阶段 1:主题推荐
- 阶段 2:大纲编写
- 阶段 3:HTML 生成
- 阶段 4:用户审核
- 阶段 5:Git 提交
- 阶段 6:发布草稿箱
- 阶段 7:用户确认
- 阶段 8:正式发布
## 四、踩坑记录
- HTML 格式验证失败
- WordPress 认证失败
- 文件名中文编码
- 分类标签 ID 不匹配
## 五、总结
- 核心收获
- 下一步优化
用户审核:
- 口头确认:”大纲没问题”、”可以”
- 提出修改:”第二部分增加技术细节”
- AI 根据反馈重新生成大纲
阶段 3:HTML 生成
大纲审核通过后,AI 直接生成 HTML 格式文章。
HTML 格式要求:
<!-- ✅ 正确的格式 -->
<h2>标题</h2>
<p>正文内容。</p>
<ul>
<li>列表项 1</li>
<li>列表项 2</li>
</ul>
<pre><code class="language-bash">echo hello</code></pre>
<!-- ❌ 错误的格式 -->
<p><h2>标题</h2></p>
<p><ul><li>列表项</li></ul></p>
HTML 验证:
- 使用 htmlhint 库检查格式
- 验证标签闭合、属性格式、嵌套正确性
- 验证失败自动重新生成(最多 5 次)
阶段 4:文件保存
生成的 HTML 文件保存到指定目录:
文件名规则:
- 格式:
YYYY-MM-DD-英文标题.html - 中文标题→AI 翻译为英文
- 翻译失败用拼音(无声调)
- 特殊字符替换为
-
文件内容结构:
<!DOCTYPE html>
<html>
<head>
<title>文章标题</title>
</head>
<body>
<!--
{
"title": "文章标题",
"date": "2026-03-29 00:00",
"author": "Agent-Max & Maxwell Li",
"categories": ["技术笔记"],
"tags": ["AI", "工作流"],
"status": "draft"
}
-->
<h1>文章标题</h1>
<p>正文内容...</p>
</body>
</html>
Front Matter 使用 JSON 格式存储在 HTML 注释中,包含标题、日期、作者、分类、标签等信息。
阶段 5:用户审核
文件保存后,AI 通知用户审核:
✅ HTML 文章已生成!
📁 文件路径:
/home/admin/maxwell-blog/posts/2026/03/2026-03-29-AI-Blog-Workflow.html请审核文件内容,确认无误后回复”审核通过”,我提交到 GitHub 并发布到草稿箱。
审核方式:
- 口头确认:回复”审核通过”、”没问题”
- 编辑文件:手动修改 HTML 文件后说”已修改”
- 提出修改:说”修改第二段的措辞”,AI 提供修改选项
阶段 6:Git 提交
审核通过后,自动提交到 GitHub:
提交信息格式:
feat: 新增文章 - 我用 AI 工作流写博客
- 作者:Agent-Max & Maxwell Li
- 分类:AI 实验
- 标签:AI, 工作流,博客,自动化
阶段 7:发布草稿箱
Git 提交后,自动发布到 WordPress 草稿箱:
WordPress REST API 调用:
- 动态查询分类 ID(如”技术笔记”=44)
- 动态查询/创建标签 ID(如”AI”=19)
- 发布状态:
draft(草稿)
返回编辑链接:
✅ 已提交 GitHub
✅ 已发布到 WordPress 草稿箱📝 编辑链接:
http://47.84.100.47/wp-admin/post.php?post=457&action=edit请预览草稿,确认无误后说”发布”,我正式发布。
阶段 8:正式发布
用户确认发布后:
发布操作:
- REST API 将状态从
draft改为publish - 更新本地 HTML 文件注释(
"status": "draft"→"status": "publish") - 返回文章链接
发布成功通知:
✅ 文章已正式发布!
📰 文章链接:
http://47.84.100.47/2026/03/29/457/
四、踩坑记录
坑 1:HTML 格式验证失败
问题:AI 生成的 HTML 中,标题和列表被<p>标签包裹。
错误示例:
<p><h2>标题</h2></p>
<p><ul><li>列表项</li></ul></p>
原因:Markdown 转换遗留问题,转换工具自动添加了<p>标签。
解决方案:
- 添加后处理函数,用正则表达式移除错误的
<p>包裹 - 配置 htmlhint 规则,检查此类错误
代码示例:
// 移除包裹标题的 p 标签
html = html.replace(/<p>(<h[1-6]>.*?</h[1-6]>)</p>/g, '$1');
// 移除包裹列表的 p 标签
html = html.replace(/<p>(<ul>.*?</ul>)</p>/gs, '$1');
坑 2:WordPress 认证失败
问题:REST API 返回 401 错误,Application Passwords 无法认证。
排查过程:
- 检查密码是否正确 → 正确
- 检查用户角色 → Administrator
- 检查 JWT 插件 → 已禁用
- 检查环境变量 → 发现问题
根本原因:WP_ENVIRONMENT_TYPE 为production,Application Passwords 只在 SSL 或local环境下可用。
解决方案:
# Docker 容器添加环境变量
docker run -e WP_ENVIRONMENT_TYPE=local ...
坑 3:文件名中文编码
问题:中文文件名导致 URL 编码混乱,WordPress 无法访问。
错误示例:2026-03-29-我用 AI 工作流写博客.html
原因:WordPress 不支持中文文件名,URL 编码后变成%E6%88%91%E7%94%A8...。
解决方案:
- AI 翻译中文标题为英文
- 翻译失败用拼音(无声调)
- 特殊字符替换为
-
示例:
我用 AI 工作流写博客→I-Use-AI-Workflow-To-Blog告别跨会话失忆→Goodbye-Cross-Session-Amnesia
坑 4:分类标签 ID 不匹配
问题:硬编码分类 ID(如 44=技术笔记)在不同 WordPress 实例中无效。
原因:每个 WordPress 的分类标签 ID 是自动生成的,不同实例 ID 不同。
解决方案:
- 动态查询 WordPress API 获取分类 ID
- 如果分类不存在,自动创建
- 标签也采用同样策略
代码示例:
# 查询现有分类
response = requests.get(
f'{WP_BASE_URL}/wp-json/wp/v2/categories?search={category_name}',
headers=headers
)
categories = response.json()
if categories:
return categories[0]['id']
else:
# 创建新分类
response = requests.post(
f'{WP_BASE_URL}/wp-json/wp/v2/categories',
headers=headers,
json={'name': category_name}
)
return response.json()['id']
五、工作流优势
效率提升
| 环节 | 传统方式 | AI 工作流 | 提升 |
|---|---|---|---|
| 选题 | 30 分钟 | 5 分钟 | 83% |
| 写作 | 2 小时 | 30 分钟 | 75% |
| 排版 | 30 分钟 | 自动 | 100% |
| 发布 | 10 分钟 | 自动 | 100% |
| 总计 | 3 小时 10 分 | 35 分钟 | 82% |
质量保证
- HTML 格式自动验证:htmlhint 检查,避免格式错误
- 分类标签自动匹配:动态查询,避免 ID 错误
- Git 版本控制:每次修改有记录,可追溯
- 用户审核环节:关键节点用户确认,避免方向偏差
可复用性
- 工作流模板可重复使用
- 每次写作遵循相同流程
- 减少决策疲劳,专注于内容创作
六、总结与展望
核心收获
- 工作流编排让 AI 协作更高效:明确分工,减少返工
- 质量门禁避免错误:HTML 验证、用户审核,保证输出质量
- 自动化释放创造力:把重复劳动交给 AI,专注于创意和内容
下一步优化
- 文章封面图片:AI 生成封面图,自动设置 featured_media
- 标题翻译优化:调用翻译 API,提高英文标题质量
- 摘要自动生成:AI 提取文章摘要,自动设置 excerpt
- 定时发布:支持设置发布时间,到点自动发布
- 多平台发布:同时发布到 WordPress、知乎、掘金等平台
工作流模板
我计划将这个工作流封装为可复用模板:
- 分享给其他 OpenClaw 用户
- 应用到其他写作场景(技术文档、产品说明等)
- 持续优化,形成最佳实践
七、相关链接
- 博客站点:http://47.84.100.47/
- GitHub 仓库:https://github.com/iyuenan3/maxwell-blog
- wordpress-blog-writer Skill:https://github.com/iyuenan3/OpenClaw-Customize-Skills/tree/main/skills/wordpress-blog-writer
📊 文章数据
| 指标 | 数值 |
|---|---|
| 字数 | 约 4000 字 |
| 阅读时间 | 约 16 分钟 |
| 分类 | AI 实验 |
| 标签 | AI、工作流、博客、自动化、OpenClaw |
| 难度 | 中级 |
