OpenClaw 自动化实战:从零搭建 emlog 博客管理 Skill
如何让 AI 助手真正"记住"你的博客配置,并具备完整的增删改查能力?本文记录基于 OpenClaw AgentSkill 框架,从零搭建 emlog 博客管理 Skill 的完整过程。
背景
我使用 emlog 搭建了个人博客(https://xxbj.jiangnas.club/),日常需要:
- 发布文章(Markdown → HTML 转换后发布)
- 上传图片和文件资源
- 查看评论、管理分类
- 发布微语、管理草稿
emlog 提供了 RESTful API(https://www.emlog.net/docs/api/),但每次都要手动构造 curl 请求很繁琐。正好 OpenClaw 的 AgentSkill 机制允许为 AI 助手注入领域知识,于是我决定创建一个专门的 emlog 管理 Skill。
OpenClaw Skill 框架概述
OpenClaw 的 Skill 系统本质上是一个给 AI 助手的知识注入 + 工具扩展机制。每个 Skill 包含:
Skill 目录结构
skills/emlog/
├── SKILL.md # 核心文件:API 文档、配置、使用指南
├── references/
│ └── api-docs.md # 完整 API 参考(19.5K 字符)
└── scripts/
└── emlog.sh # Bash 辅助脚本(可独立运行)
核心设计理念
- SKILL.md 是入口,AI 助手在相关场景下自动加载
- references/ 存放详细参考文档,按需读取避免上下文膨胀
- scripts/ 存放可执行工具,AI 助手可直接调用
┌─────────────────────────────────┐
│ OpenClaw 主会话 │
│ ┌───────────────────────────┐ │
│ │ 加载 SKILL.md(自动) │ │
│ │ ↓ │ │
│ │ 读取 API 配置 │ │
│ │ ↓ │ │
│ │ 构造 curl 请求 │ │
│ │ ↓ │ │
│ │ 调用 emlog API │ │
│ │ ↓ │ │
│ │ 解析响应 → 执行操作 │ │
│ └───────────────────────────┘ │
└─────────────────────────────────┘
搭建过程详解
第一步:创建 Skill 骨架
使用 OpenClaw 官方提供的 init_skill.py 脚本快速生成标准目录结构:
python3 /usr/local/lib/node_modules/openclaw/skills/skill-creator/scripts/init_skill.py \
emlog \
--path /usr/local/lib/node_modules/openclaw/skills \
--resources scripts,references
生成后得到:
skills/emlog/
├── SKILL.md
├── references/
└── scripts/
第二步:编写 SKILL.md
这是 Skill 的灵魂文件,需要包含以下关键章节:
1. 配置信息
blog_url: https://网址/
api_key: key
internal_url: http://网址/
public_url: http://网址/
admin_user: 用户
2. API 参考
为每个功能模块提供 curl 示例。以文章发布为例:
curl -X POST "https://网址" \
-d "api_key=xxx" \
-d "title=测试文章" \
-d "content=
HTML内容
" \
-d "excerpt=摘要" \
-d "tags=标签1,标签2" \
-d "allow_remark=y"
3. 常见工作流
描述典型操作序列,让 AI 助手知道"发布文章"需要先查分类、转 HTML、然后 POST。
第三步:编写 API 参考文档
从 emlog 官方文档抓取完整 API 说明,存入 references/api-docs.md:
- 认证方式(API Key)
- 文章模块(列表/详情/发布/编辑,共 4 个端点)
- 草稿、分类、评论、微语模块
- 文件上传、用户管理模块
- 每个端点的参数说明和返回示例
共覆盖 15+ 个 API 端点。
第四步:编写辅助脚本
scripts/emlog.sh 是一个独立的 Bash 脚本,封装常用操作:
#!/bin/bash
BLOG_URL="https://网址"
API_KEY="key"
使用方式:
./emlog.sh article_list → 列出所有文章
./emlog.sh sort_list → 列出所有分类
./emlog.sh publish file.md → 发布文章
记忆强化机制(三重保障)
这是整个 Skill 最关键的设计——如何让 AI 助手跨越会话边界、持续 30 天以上不遗忘这个 Skill?
OpenClaw 的 AI 助手每次会话启动都是"全新"的,不会自动记住历史。因此我设计了三重强化机制:
🔴 第一重:MEMORY.md
MEMORY.md → 主会话启动时自动加载
├── 博客 URL + API Key
├── 管理员账号密码
├── Skill 文件路径
└── 关键日期标记
🟡 第二重:HEARTBEAT.md(心跳自检)
每隔约 5 天触发一次心跳检查:
├── 检查 skills/emlog/SKILL.md 是否存在
├── 检查配置信息是否完整
├── 若缺失 → 自动从 MEMORY.md 重建
└── 检查结果写入 memory/YYYY-MM-DD.md
🟢 第三重:每日记忆日志
memory/YYYY-MM-DD.md
├── 记录所有 emlog 相关操作
├── API 调用结果存档
├── 文章发布记录
└── 配置变更历史
┌──────────┐ ┌──────────┐ ┌──────────┐
│ MEMORY │────▶│HEARTBEAT │────▶│ Daily │
│ 持久记忆 │ │ 定期检查 │ │ 操作日志 │
│ 启动加载 │ │ 5天一次 │ │ 每日追加 │
└──────────┘ └──────────┘ └──────────┘
│ │ │
└────────────────┴────────────────┘
│
▼
skills/emlog/SKILL.md
(核心 Skill 永不丢失)
实战验证
Skill 创建完成后,立即进行端到端验证:
测试 1:API 连通性
curl -s "https://网址?rest-api=sort_list&api_key=key"
返回: {"code":0,"msg":"ok","data":{"sorts":[]}}
✅ API 连通正常。
测试 2:Skill 结构验证
python3 quick_validate.py /path/to/skills/emlog
返回: Skill is valid!
✅ 结构合规。
测试 3:发布文章
用户直接在微信中说"发布以下文章",AI 助手自动完成:
1. 加载 emlog Skill → 读取 API 配置
2. Markdown → HTML 转换
3. 查询分类列表
4. POST 到 article_post 接口
5. 返回文章 ID 和访问链接
全程无需用户干预 API 细节。
最终效果
用户(微信/QQ):"发布这篇文章..."
│
▼
OpenClaw AI 助手
│
┌─────────┼─────────┐
│ │ │
SKILL.md API文档 辅助脚本
│ │ │
└─────────┼─────────┘
│
▼
emlog REST API
(网址)
│
▼
文章上线 ✅
从用户输入到文章发布,全过程自动化,零手动操作。
总结
| 组件 | 作用 |
|------|------|
| SKILL.md | 核心配置 + API 指引 + 工作流 |
| references/api-docs.md | 完整 API 文档(15+ 端点) |
| scripts/emlog.sh | 可独立运行的 Bash 工具 |
| MEMORY.md | 持久记忆(启动加载) |
| HEARTBEAT.md | 定期自检(防遗忘) |
| memory/YYYY-MM-DD.md | 操作日志(持续追加) |
通过这套框架,AI 助手获得了持久化、可验证、防遗忘的博客管理能力。无论多少次会话重启,无论间隔多少天,只要用户提起 emlog,助手就会自动加载 Skill 并执行操作。
这就是 OpenClaw AgentSkill 的魅力——让 AI 不再是"一次性聊天工具",而是真正具备持续能力的工作伙伴。
本文基于 OpenClaw 框架实战编写,Skill 代码已开源。欢迎交流讨论。