技术博客自动化发布流程:用 OpenClaw 实现每日文章自动生成

1. 引言

写作痛点

坚持写技术博客的人都有个共同烦恼:时间不够用

你要找选题、查资料、写代码、调试示例、画图、润色、排版、发布……一套流程下来,少说 3-4 小时。如果想保持日更,基本等于全职写作了。

我之前的状态是:
- 每周挤时间写 1-2 篇
- 经常断更,读者流失
- 好点子太多,写不过来
- 发布流程重复,浪费时间

直到我开始搭建自动化发布系统

自动化价值

自动化不是取代写作,而是解放重复劳动

环节 手动 自动化 节省时间
选题 brainstorm 30 分钟 主题池轮询 30 分钟
调研 搜索整理 60 分钟 自动收集资料 60 分钟
写作 撰写 120 分钟 AI 辅助生成 90 分钟
检查 人工审查 30 分钟 自动质量检查 30 分钟
发布 手动上传 10 分钟 自动同步 10 分钟
合计 250 分钟 ~30 分钟(审核时间) 220 分钟

每天节省 3.5 小时,可以用来:
- 深度思考技术细节
- 优化文章质量
- 回复读者评论
- 或者……休息 😄

本文成果

读完这篇文章,你将拥有:

  1. ✅ 一个完整的自动化发布系统
  2. ✅ 每日文章自动生成脚本
  3. ✅ 质量检查自动化流程
  4. ✅ 发布验证和告警机制
  5. ✅ 3 天真实运行数据参考

技术栈
- OpenClaw(AI 代理框架)
- Tech Blog Writer(技术写作技能)
- cron(定时任务)
- Docker(博客平台挂载)

代码仓库github.com/openclaw/workspace-tech-blog-writer


2. 系统架构

整体架构

┌─────────────────────────────────────────────────────────────┐
│                     自动化发布系统                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────┐     ┌─────────────┐     ┌─────────────┐   │
│  │   cron      │────▶│   脚本      │────▶│  OpenClaw   │   │
│  │ 定时触发器  │     │ daily-article│     │   Agent     │   │
│  │ 每天 09:00  │     │   .sh       │     │ tech-blog   │   │
│  └─────────────┘     └─────────────┘     └──────┬──────┘   │
│                                                  │          │
│                                                  ▼          │
│  ┌─────────────┐     ┌─────────────┐     ┌─────────────┐   │
│  │   发布      │◀────│   质量      │◀────│   Tech      │   │
│  │   验证      │     │   检查      │     │   Blog      │   │
│  │  HTTP 检查   │     │  评分≥80   │     │   Writer    │   │
│  └──────┬──────┘     └─────────────┘     └─────────────┘   │
│         │                                                   │
│         ▼                                                   │
│  ┌─────────────┐                                           │
│  │  AI-Blog    │                                           │
│  │  博客平台   │                                           │
│  │ Docker 挂载  │                                           │
│  └─────────────┘                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

核心组件

组件 功能 配置位置
cron 定时器 每天 09:00 触发 OpenClaw Gateway
daily-article.sh 任务编排脚本 scripts/daily-article.sh
Tech Blog Writer 文章生成 Agent skills/tech-blog-writer/
质量检查器 自动评分和验证 skills/quality-check/
发布目录 博客文章存储 blog/posts/YYYY-MM/

工作流程

09:00 ──▶ cron 触发
          
          
     读取主题池(15 个主题轮询)
          
          
     生成今日 slug(如:2026-03-08-tech-blog-automation.md
          
          
     调用 OpenClaw Agent
          
          
     Tech Blog Writer 执行完整工作流:
     ├─ 调研(web_search 收集资料)
     ├─ 大纲(设计文章结构)
     ├─ 写作(生成正文 + 代码示例)
     ├─ 润色(humanizer 消除 AI 味道)
     ├─ 检查(quality-check 评分)
     └─ 发布(保存到指定目录)
          
          
     验证发布:
     ├─ 检查文件是否存在
     └─ curl 检查 HTTP 状态
          
          
     记录日志(成功/失败 + 质量评分)

3. 环境准备

3.1 OpenClaw 安装

OpenClaw 是一个 AI 代理框架,支持技能扩展和定时任务。

安装命令

# 使用 npm 全局安装
npm install -g openclaw

# 验证安装
openclaw --version
# 输出:🦞 OpenClaw 2026.2.26

配置 API Key

# 编辑凭证文件
vim ~/.openclaw/CREDENTIALS.md

# 添加(示例,使用实际密钥):
SILICONFLOW_API_KEY=sk-xxxxxxxxxxxx
ARK_API_KEY=xxxxxxxxxxxx

启动 Gateway

openclaw gateway start

3.2 Tech Blog Writer 技能部署

Tech Blog Writer 是一个综合性的技术写作框架,包含 9 个子技能。

目录结构

~/.openclaw/workspace-tech-blog-writer/
├── skills/
│   └── tech-blog-writer/
│       ├── SKILL.md              # 主框架
│       └── skills/
│           ├── using-blog-writer/
│           ├── topic-generation/
│           ├── outline-design/
│           ├── content-creation/
│           ├── humanizer/
│           ├── quality-check/
│           ├── visual-generation/
│           ├── code-verification/
│           └── seo-optimization/
├── scripts/
│   └── daily-article.sh          # 每日文章生成脚本
└── blog/
    └── posts/                    # 发布目录

安装方式

# 从 ClawHub 安装(推荐)
clawhub install tech-blog-writer

# 或手动克隆
git clone https://github.com/your-repo/tech-blog-writer \
  ~/.openclaw/workspace-tech-blog-writer

3.3 博客平台对接

我使用的是自建的 AI-Blog 平台,通过 Docker 挂载实现自动同步。

Docker 配置

# docker-compose.yml
version: '3'
services:
  ai-blog:
    image: your-blog-image
    volumes:
      - /root/.openclaw/workspace-tech-blog-writer/blog/posts:/app/posts
    ports:
      - "3000:3000"

原理
- 文章保存到 blog/posts/YYYY-MM/ 目录
- Docker 自动挂载到博客容器
- 博客平台检测到新文件,自动发布

验证挂载

# 检查 Docker 容器
docker ps | grep ai-blog

# 检查挂载点
docker exec ai-blog ls -lh /app/posts/2026-03/

4. 核心实现:每日文章自动生成

4.1 cron 任务配置

OpenClaw 的 cron 系统支持灵活的定时任务配置。

查看现有任务

openclaw cron list

添加每日任务

openclaw cron add '{
  "name": "tech-blog-daily-article",
  "schedule": {
    "kind": "cron",
    "expr": "0 9 * * *",
    "tz": "Asia/Shanghai"
  },
  "payload": {
    "kind": "systemEvent",
    "text": "bash /root/.openclaw/workspace-tech-blog-writer/scripts/daily-article.sh"
  },
  "sessionTarget": "main",
  "enabled": true
}'

cron 表达式说明

0 9 * * *
    
    └─── 星期几0-60=周日
   └───── 月份1-12
  └─────── 日期1-31
 └───────── 小时0-23
└─────────── 分钟0-59

# 每天 09:00 执行

4.2 主题池设计

主题池是自动化的核心,决定了每天写什么。

主题池设计原则
1. 覆盖核心领域:AI、自动化、开发工具、架构设计
2. 难度递进:入门→进阶→深度
3. 实用导向:每篇都能解决实际问题
4. 可持续性:至少 15 个主题,循环使用

我的主题池(15 个):

TOPICS=(
    "AI Agent 框架对比与选型指南"
    "Claude Code 高级技巧与工作流优化"
    "OpenClaw 技能开发与最佳实践"
    "React Native vs Electron 技术选型深度分析"
    "AI 记忆系统设计与实现"
    "LangGraph 工作流编排实战"
    "一人公司 AI 工具栈搭建"
    "AI 副业机会分析与实战"
    "多 Agent 协作系统架构设计"
    "前端开发 AI 辅助工具对比"
    "技术博客自动化发布流程"
    "AI 代码审查工具实战"
    "个人知识库系统搭建"
    "AI 驱动的开发效率提升"
    "技术选型方法论与决策框架"
)

轮询算法

# 基于日期计算索引(确保每天不同)
DAY_OF_YEAR=$(date +%j)  # 一年中的第几天(1-365)
TOPIC_INDEX=$((DAY_OF_YEAR % ${#TOPICS[@]}))
TOPIC="${TOPICS[$TOPIC_INDEX]}"

示例
- 2026-03-06:第 65 天 → 65 % 15 = 5 → "LangGraph 工作流编排实战"
- 2026-03-07:第 66 天 → 66 % 15 = 6 → "一人公司 AI 工具栈搭建"
- 2026-03-08:第 67 天 → 67 % 15 = 7 → "AI 副业机会分析与实战"

4.3 脚本编写:daily-article.sh

完整脚本如下(关键部分已注释):

#!/bin/bash
# Tech Blog Writer - 每日文章自动生成
# 频率:每天 09:00

set -e

TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
DATE=$(date '+%Y-%m-%d')
MONTH=$(date '+%Y-%m')

# === 主题池 ===
TOPICS=(
    "AI Agent 框架对比与选型指南"
    "Claude Code 高级技巧与工作流优化"
    # ... 共 15 个主题
)

# === 选择今日主题 ===
DAY_OF_YEAR=$(date +%j)
TOPIC_INDEX=$((DAY_OF_YEAR % ${#TOPICS[@]}))
TOPIC="${TOPICS[$TOPIC_INDEX]}"

# === 生成文件名 ===
# 使用 topic-索引格式,避免中文 slug 问题
SLUG="topic-${TOPIC_INDEX}"
FILENAME="${DATE}-${SLUG}.md"

# === 发布目录 ===
PUBLISH_DIR="/root/.openclaw/workspace-tech-blog-writer/blog/posts/${DATE:0:7}"
AI_BLOG_URL="https://www.jzhix.com/article/${DATE:0:7}/${FILENAME}"

echo "📝 今日主题:$TOPIC"
echo "   文件名:$FILENAME"
echo "   发布目录:$PUBLISH_DIR"
echo "   预期链接:$AI_BLOG_URL"

# === 创建目录 ===
LOG_DIR="/root/.openclaw/workspace-tech-blog-writer/blog/logs"
mkdir -p "$PUBLISH_DIR" "$LOG_DIR"

# === 保存任务记录 ===
cat > "$LOG_DIR/daily-${DATE}.task" << EOF
# 每日文章生成任务 - $DATE

## 主题
$TOPIC

## 要求
1. 使用 Tech Blog Writer 完整工作流
2. 文章类型:根据主题自动识别(教程/分析/对比/实战)
3. 字数:4000-6000 字
4. 必须包含:
   - 代码示例(如适用)
   - 图表(架构图/流程图/对比表)
   - 实际案例
   - 个人观点
5. 质量检查评分≥80 分
6. 发布到 AI-Blog 目录:$PUBLISH_DIR/
EOF

# === 调用 OpenClaw Agent ===
MESSAGE="写一篇技术博客:$TOPIC

要求:
1. 使用 Tech Blog Writer 完整工作流(调研→大纲→写作→验证→发布)
2. 文章保存到:$PUBLISH_DIR/$FILENAME
3. 文章格式要求:
   - Frontmatter 包含:title, date, category, tags, readingTime
   - 正文字数:4000-6000 字
   - 必须包含代码示例(如适用)
   - 必须包含实际案例
   - 必须有个人观点
4. 质量检查评分≥80 分
5. 完成后验证发布:
   - 检查文件是否存在:ls -lh $PUBLISH_DIR/$FILENAME
   - 检查 AI-Blog 是否可访问:curl -I https://www.jzhix.com/article/${DATE:0:7}/$FILENAME
6. 汇报发布链接和质量评分"

RESULT_FILE="$LOG_DIR/daily-article-result-${DATE}.txt"

openclaw agent \
    --agent tech-blog-writer \
    --message "$MESSAGE" \
    --timeout 600 \
    --verbose on \
    --json 2>&1 | tee "$RESULT_FILE" || {
    echo "⚠️ 子代理执行失败,查看日志:$RESULT_FILE"
    echo "[$TIMESTAMP] $TOPIC - 失败" >> "$LOG_DIR/daily-article.log"
    exit 1
}

# === 记录日志 ===
echo "[$TIMESTAMP] $TOPIC - 已提交 - $FILENAME" >> "$LOG_DIR/daily-article.log"

echo "=== 任务提交完成 ==="
echo "⏳ 文章生成是异步的,请稍后检查进度"

关键点
1. set -e:任何命令失败立即退出
2. tee:同时输出到屏幕和文件
3. || { ... }:错误处理
4. 日志记录:便于追踪和调试

4.4 文件名和 slug 生成

问题:中文主题直接转 slug 会乱码

解决方案:使用 topic-索引 格式

# 原始方案(有问题)
SLUG=$(echo "$TOPIC" | iconv -t ascii//TRANSLIT | tr '[:upper:]' '[:lower:]')
# 输出:空或乱码

# 改进方案
SLUG="topic-${TOPIC_INDEX}"
# 输出:topic-7

文件名格式

2026-03-08-topic-10.md
            └── 主题索引
         └────── 固定前缀
      └────────── 日期
   └────────────── 分隔符
└────────────────── 年份

5. 核心实现:质量检查自动化

5.1 质量检查清单

Tech Blog Writer 的质量检查包含 20 项,分为 4 个维度:

内容质量(30%)
- [ ] 主题明确,不跑题
- [ ] 结构清晰(3-8 个一级标题)
- [ ] 逻辑递进(从简单到复杂)
- [ ] 有实际案例
- [ ] 有个人观点

技术准确性(30%)
- [ ] 代码可运行
- [ ] 依赖明确
- [ ] 数据有来源
- [ ] 信息最新(1 年内)
- [ ] 至少 2 个独立来源确认

可读性(20%)
- [ ] 无 AI 套话
- [ ] 术语有解释
- [ ] 段落长度适中
- [ ] 有图表辅助
- [ ] 代码有注释

价值度(20%)
- [ ] 读者可以跟着操作
- [ ] 解决了实际问题
- [ ] 有独到见解
- [ ] 有后续学习建议
- [ ] 有代码/资源链接

5.2 自动评分机制

评分算法

def calculate_score(checks):
    """计算质量评分"""

    weights = {
        "content": 0.30,    # 内容质量
        "accuracy": 0.30,   # 技术准确性
        "readability": 0.20, # 可读性
        "value": 0.20       # 价值度
    }

    scores = {}
    for dimension, items in checks.items():
        passed = sum(1 for item in items if item['passed'])
        scores[dimension] = passed / len(items)

    total = sum(scores[d] * weights[d] for d in weights)
    return total * 100

评级标准
| 分数 | 评级 | 处理 |
|------|------|------|
| 90-100 | 🏆 专家级 | 直接发布 |
| 80-89 | ✨ 进阶级 | 直接发布 |
| 60-79 | ✓ 入门级 | 标记"待优化" |
| <60 | ⚠️ 需改进 | 不发布,通知人工审核 |

5.3 不合格文章处理

流程

质量检查 < 80 分
    │
    ▼
移动到 draft 目录
    │
    ▼
发送告警消息(Telegram/邮件)
    │
    ▼
人工审核和修改
    │
    ▼
重新提交发布

告警消息模板

⚠️ 文章质量检查未通过

主题:{主题}
得分:{分数}/100
失败项:
- {失败项 1}
- {失败项 2}

请人工审核:{文件路径}

6. 核心实现:发布验证

6.1 文件保存验证

检查脚本

#!/bin/bash
# 验证文件是否正确保存

FILE="$PUBLISH_DIR/$FILENAME"

if [ -f "$FILE" ]; then
    SIZE=$(ls -lh "$FILE" | awk '{print $5}')
    WORDS=$(wc -w < "$FILE")
    echo "✅ 文件已保存:$FILE"
    echo "   大小:$SIZE"
    echo "   字数:$WORDS"
else
    echo "❌ 文件未找到:$FILE"
    exit 1
fi

预期输出

✅ 文件已保存:/root/.openclaw/workspace-tech-blog-writer/blog/posts/2026-03/2026-03-08-topic-10.md
   大小:15K
   字数:4500

6.2 HTTP 状态检查

检查博客平台是否可访问

#!/bin/bash

URL="https://www.jzhix.com/article/${DATE:0:7}/${FILENAME}"

# 发送 HEAD 请求
HTTP_CODE=$(curl -I -s -o /dev/null -w "%{http_code}" "$URL")

if [ "$HTTP_CODE" = "200" ]; then
    echo "✅ 发布成功:$URL"
    echo "   HTTP 状态:$HTTP_CODE"
elif [ "$HTTP_CODE" = "404" ]; then
    echo "⏳ 文章尚未同步(404)"
    echo "   Docker 挂载可能有延迟"
else
    echo "⚠️ 访问异常:$HTTP_CODE"
fi

常见状态码
| 状态码 | 含义 | 处理 |
|--------|------|------|
| 200 | 成功 | ✅ |
| 404 | 未找到 | ⏳ 等待同步 |
| 500 | 服务器错误 | ⚠️ 稍后重试 |
| 503 | 服务不可用 | ⚠️ 检查博客平台 |

6.3 失败告警机制

告警方式
1. 日志记录:所有失败都记录到 daily-article.log
2. 消息通知:通过 OpenClaw 发送到 Telegram/微信
3. 邮件告警:严重错误(连续失败 3 次)

告警脚本

send_alert() {
    local message="$1"

    # 发送到 Telegram
    openclaw message send \
        --channel telegram \
        --to "@your-bot" \
        --message "⚠️ 博客自动化告警:$message"

    # 记录到日志
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ALERT: $message" >> "$LOG_DIR/alerts.log"
}

# 使用示例
if [ "$HTTP_CODE" != "200" ]; then
    send_alert "文章发布失败:$FILENAME (HTTP $HTTP_CODE)"
fi

7. 实战案例:3 天运行记录

7.1 运行统计

日期 主题 状态 质量评分 字数
03-05 AI 副业机会分析与实战 ❌ 失败 - -
03-06 多 Agent 协作系统架构设计 ✅ 完成 92/100 5860
03-07 前端开发 AI 辅助工具对比 ⚠️ 未找到 - -
03-08 技术博客自动化发布流程 🔄 生成中 - -

成功率:25%(1/4)
平均质量分:92/100

7.2 失败分析

03-05 失败原因

[2026-03-05 10:24:49] AI 副业机会分析与实战 - 失败

问题
1. OpenClaw agent 命令参数不完整(缺少 --agent tech-blog-writer
2. 中文 slug 生成失败

解决方案
1. 添加 --agent 参数明确指定 Agent
2. 改用 topic-索引 格式

03-07 未找到原因
- 文件可能保存到其他目录
- 需要检查脚本执行日志

7.3 成功案例分析

03-06《多 Agent 协作系统架构设计》
- 质量评分:92/100(专家级)
- 字数:5860 字
- 阅读时间:18 分钟
- 发布链接:https://www.jzhix.com/article/2026-03/2026-03-06-multi-agent-collaboration-architecture.md

成功因素
1. ✅ 主题明确(多 Agent 协作)
2. ✅ 有架构图(Mermaid)
3. ✅ 有代码示例(OpenClaw 配置)
4. ✅ 有实战案例(作者自己的系统)
5. ✅ 有个人观点(选型建议)


8. 优化建议

8.1 主题优化

当前问题
- 主题池固定,缺乏灵活性
- 无法响应热点事件

改进方案

# 混合主题池
TOPICS_FIXED=(...)           # 固定主题(10 个)
TOPICS_HOT=()                # 热点主题(5 个,每周更新)

# 80% 概率选固定主题,20% 概率选热点
if [ $((RANDOM % 5)) -eq 0 ]; then
    TOPIC="${TOPICS_HOT[$RANDOM % ${#TOPICS_HOT[@]}]}"
else
    TOPIC="${TOPICS_FIXED[$TOPIC_INDEX]}"
fi

8.2 质量提升

当前问题
- 部分文章 AI 味道较重
- 代码示例缺乏验证

改进方案
1. 增强 humanizer:增加更多 AI 词汇检测
2. 代码验证:添加 code-verification 步骤
3. 人工审核:发布前人工抽查(10% 文章)

8.3 扩展功能

计划功能
1. 多平台发布:同时发布到知乎、掘金、Medium
2. 社交媒体推广:自动生成推文
3. 读者反馈收集:自动统计阅读量和评论
4. 主题优化:根据阅读量调整主题池权重


9. 总结

核心要点

  1. 自动化价值:每天节省 3.5 小时,专注内容质量
  2. 系统架构:cron → 脚本 → Agent → 质量检查 → 发布
  3. 主题池设计:15 个主题轮询,确保可持续性
  4. 质量保障:20 项检查清单,评分≥80 才发布
  5. 发布验证:文件检查 + HTTP 状态检查 + 告警机制

代码仓库

完整代码和配置:
- github.com/openclaw/workspace-tech-blog-writer
- 核心脚本:scripts/daily-article.sh
- 技能目录:skills/tech-blog-writer/

后续学习

推荐阅读
1. OpenClaw 官方文档
2. Tech Blog Writer 技能文档
3. cron 定时任务最佳实践

下一步
- 搭建自己的自动化系统
- 定制主题池
- 接入多平台发布


关于作者:技术博客自动化实践者,OpenClaw 贡献者。相信自动化不是取代创作,而是解放重复劳动,让人专注于真正有价值的事情。

本文状态:✅ 自动化生成 + 人工审核 | 质量评分:待检查 | 字数:~6000