魔物公寓
45.13M · 2026-03-13
我前几天在想一个问题:AI Agent 到底怎么才能"学会"新技能?
不是那种微调训练的学法,而是——我今天有个新需求,希望 Agent 明天就能处理,后天就能自动化。这种"即插即用"的能力扩展,有没有一种足够轻量的实现方式?
后来我在 OpenClaw 里找到了答案:Skill。
它的做法简单到有点反直觉——写一个 Markdown 文件,描述清楚"你是谁、什么时候用、怎么做",放到指定目录下,Agent 下次对话就能自动识别和执行。不需要编译,不需要注册,不需要重启。
这篇文章我会手把手带你写一个"每日技术日报"Skill,从目录结构到完整代码,再到调试上线。你会发现,门槛真的没有想象中那么高。
在 OpenClaw 的架构里,Skill 是 AI Agent 的能力扩展单元。但它不是传统意义上的代码插件——它是一份 Markdown 格式的操作手册。
工作原理:
这种三层加载的设计(元数据 → 正文 → 附属资源)是为了节省上下文窗口。毕竟 Agent 的上下文是有限资源,不能把所有 Skill 的内容都塞进去。
你可以把 Skill 理解为给 Agent 写的 SOP(标准操作程序)。写得好的 Skill,Agent 拿到就能干活。
一个 Skill 的标准结构:
skill-name/
├── SKILL.md # 必需:技能定义文件
├── scripts/ # 可选:可执行脚本
├── references/ # 可选:参考文档
└── assets/ # 可选:模板、图标等资源
只有 SKILL.md 是必需的,其他目录根据需要创建:
关键原则:SKILL.md 保持精简,大段内容拆到子目录。这样 Agent 触发 Skill 时只加载核心指令,不会一次性吃掉太多上下文。
SKILL.md 由两部分组成:
---
name: daily-tech-digest
description: |
每日技术日报生成与推送。自动搜索当天技术热点新闻,
生成中文摘要日报,推送到 Slack 频道。
触发条件:日报、技术新闻、热点、每日摘要、tech digest。
---
name 是 Skill 的标识符,小写+连字符。
description 是核心——Agent 靠它决定什么时候触发这个 Skill。写 description 的关键是要覆盖足够多的触发场景,把用户可能的各种说法都考虑到。
正文就是写给 Agent 看的操作指南。用祈使句,简洁直接。
内容一般包含:
说够了理论,来看完整实现。
daily-tech-digest/
├── SKILL.md
└── scripts/
└── generate_digest.sh
---
name: daily-tech-digest
description: |
每日技术日报生成与推送。自动搜索当天技术热点新闻,生成中文摘要日报,
推送到 Slack 频道。
触发条件:用户要求生成技术日报、每日新闻摘要、技术热点汇总,
或定时任务触发每日日报生成。
关键词:日报、技术新闻、热点、每日摘要、tech digest。
---
# 每日技术日报
自动搜索技术热点,生成中文日报并推送到 Slack。
## 使用场景
**适用:**
- 用户说"生成今天的技术日报"
- 定时任务触发每日日报
- 用户要求搜索技术热点并汇总
**不适用:**
- 查询特定技术问题的深度分析
- 非技术类新闻汇总
## 执行流程
### 1. 搜索技术热点
使用 web_search 工具搜索以下关键词(每个取前 5 条):
- "AI 人工智能 新闻 today"
- "云计算 cloud computing news"
- "开源项目 trending"
- "软件开发 技术趋势"
### 2. 筛选和去重
从搜索结果中筛选:
- 过滤掉超过 48 小时的旧新闻
- 去除重复内容(相同 URL 或标题相似度 > 80%)
- 保留 8-12 条高质量条目
### 3. 生成日报
按以下格式生成中文日报:
```markdown
技术日报 | YYYY-MM-DD
## 今日热点
### 1. [标题]
摘要(2-3 句话概括核心内容)
来源:[链接]
### 2. [标题]
...
---
由 OpenClaw 自动生成
使用 message 工具发送到指定 Slack 频道:
将日报保存到 ~/.openclaw/workspace/digests/YYYY-MM-DD.md 归档。
如需批量抓取,可执行辅助脚本:
bash scripts/generate_digest.sh
建议通过 OpenClaw 的 cron 功能设置每日定时执行:
### 辅助脚本
`scripts/generate_digest.sh`:
```bash
#!/usr/bin/env bash
# 辅助脚本:抓取 AWS 官方博客最新文章作为日报素材之一
set -euo pipefail
DATE=$(date +%Y-%m-%d)
OUTPUT_DIR="${HOME}/.openclaw/workspace/digests"
OUTPUT_FILE="${OUTPUT_DIR}/${DATE}.md"
mkdir -p "$OUTPUT_DIR"
echo " 技术日报 | ${DATE}" > "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
echo "## 今日技术热点" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
# 从 AWS 官方博客 RSS 拉取最新条目
FEED_URL="https://aws.amazon.com/blogs/china/feed/"
TITLES=$(curl -s "$FEED_URL" | grep -oP '(?<=<title>).*?(?=</title>)' | head -12 | tail -10)
INDEX=1
while IFS= read -r title; do
if [ -n "$title" ]; then
echo "### ${INDEX}. ${title}" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
INDEX=$((INDEX + 1))
fi
done <<< "$TITLES"
echo "---" >> "$OUTPUT_FILE"
echo " 由 OpenClaw 自动生成" >> "$OUTPUT_FILE"
echo "日报已保存到: ${OUTPUT_FILE}"
这个脚本作为 fallback 使用——主搜索由 Agent 的 web_search 工具完成,脚本则从 AWS 官方博客 RSS 补充素材。
# 创建 Skill 目录
mkdir -p ~/.openclaw/workspace/skills/daily-tech-digest/scripts
# 复制文件
cp SKILL.md ~/.openclaw/workspace/skills/daily-tech-digest/
cp scripts/generate_digest.sh ~/.openclaw/workspace/skills/daily-tech-digest/scripts/
chmod +x ~/.openclaw/workspace/skills/daily-tech-digest/scripts/generate_digest.sh
放好就行了。OpenClaw 会在下次会话时自动扫描加载,不用重启。
在 Slack 里直接说:
生成今天的技术日报
或者换个说法:
帮我整理一下今天的技术热点
Agent 应该能识别到 daily-tech-digest Skill 并执行。如果没有触发,往下看调试部分。
问 Agent:"你现在有哪些 skills?"
如果列表里没有你的 Skill,检查:
~/.openclaw/workspace/skills/daily-tech-digest/SKILL.md--- 分隔符是否完整name 和 description 是否存在多半是 description 覆盖不够。解决办法:在 description 里加更多触发关键词和场景描述。
常见坑——description 中包含冒号:
# 冒号会导致解析错误
description: 功能:生成日报
# 用引号包裹
description: "功能:生成日报"
# 或用多行语法
description: |
功能:生成日报
检查清单:
chmod +x)curl)description 是 Skill 开发中容易被忽视但又极其关键的部分。我的经验是先上线一个"够用"的版本,然后在实际对话中观察 Agent 什么时候该触发但没触发,把那些没覆盖到的说法补回去。
好的 description 写法:
description: |
每日技术日报生成与推送。自动搜索当天技术热点新闻,
生成中文摘要日报,推送到 Slack 频道。
触发条件:用户要求生成技术日报、每日新闻摘要、技术热点汇总,
或定时任务触发每日日报生成。
关键词:日报、技术新闻、热点、每日摘要、tech digest、
今日资讯、新闻早报、技术周报。
注意最后加了"今日资讯""新闻早报""技术周报"这些变体——用户不会永远用同一种说法来描述同一个需求。
写好的 Skill 可以打包发布到 ClawHub——OpenClaw 的技能分享平台。
大致流程:
.skill 文件这样其他 OpenClaw 用户就能一键安装你的 Skill。如果你对 Skill 的质量有信心,值得试试。
在实际使用中,我总结了几个让 Skill 更健壮的小技巧:
如果你的 Skill 涉及多个领域的热点(AI、云计算、前端等),可以把每个领域的搜索策略拆到 references/ 目录下:
daily-tech-digest/
├── SKILL.md
├── scripts/
│ └── generate_digest.sh
└── references/
├── ai-sources.md
├── cloud-sources.md
└── frontend-sources.md
在 SKILL.md 中引用:
## 数据源配置
- AI 方向:参见 [references/ai-sources.md](references/ai-sources.md)
- 云计算方向:参见 [references/cloud-sources.md](references/cloud-sources.md)
- 前端方向:参见 [references/frontend-sources.md](references/frontend-sources.md)
这样 Agent 会根据用户的具体需求,只加载对应的参考文件,节省上下文。
如果你想让日报有固定的排版模板,可以放一个模板文件到 assets/ 目录:
daily-tech-digest/
├── SKILL.md
├── scripts/
│ └── generate_digest.sh
└── assets/
└── digest_template.md
Agent 会直接拿模板来填充内容,不需要每次重新生成格式。
除了 cron,OpenClaw 还有一个 heartbeat 机制——Agent 会定期被唤醒检查是否有待办任务。你可以在 HEARTBEAT.md 里加一行:
- [ ] 如果是工作日早上 9:00 左右,执行每日技术日报 Skill
这样即使不设 cron,Agent 在心跳检查时也会主动触发日报生成。
写 OpenClaw Skill 的体验可以用一句话概括:像写文档一样写插件。
核心要点回顾:
description 决定触发时机,写得越覆盖越好scripts/,需要参考文档就放 references/~/.openclaw/workspace/skills/ 下即可生效我目前在亚马逊云科技的工作中用 OpenClaw 自动化了不少重复流程,Skill 机制是其中很关键的一环。AI Agent 的能力边界不再由框架开发者决定,而是由使用者自己定义。如果你也在做 AI Agent 相关的探索,建议从一个小 Skill 开始尝试,你会惊讶于它的灵活性。
你写了什么有趣的 Skill?评论区晒一下