news 2026/9/26 1:55:41

从零开发一个 OpenClaw 自定义 Skill:手把手教你打造 RSS 智能日报(TaoToken 配置篇)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开发一个 OpenClaw 自定义 Skill:手把手教你打造 RSS 智能日报(TaoToken 配置篇)

1. 为什么我要给 OpenClaw 写一个 RSS 智能日报 Skill

如果你用过 OpenClaw 一段时间,大概率经历过这个循环:让它帮你干一件事,效果不错;换个说法再让它干,步骤完全不一样,甚至直接崩掉。这不是模型变笨了,而是它每次都在“即兴发挥”。Skill 就是来解决这个问题的——它把一套固定的操作流程写成 Markdown 指令,让 Agent 每次都按同样的步骤执行。

我这次要做的,是一个 RSS 智能日报 Skill:从配置好的 RSS 源里拉取最近 24 小时的文章,用模型给每篇生成一句话摘要,按分类整理成 Markdown 日报,保存到本地目录。适合谁?适合每天要刷十几个技术博客、又不想一个个点开的人;也适合想学 OpenClaw Skill 开发但不知道从哪下手的同学。

整篇会按“骨架 → 配置 → 触发 → 排障 → 发布”的顺序走,每一步都有可复制的代码和配置。你跟着做,最后能跑通一个真正能用的自定义 Skill。

2. 前置准备:TaoToken 统一 Key 与 API 通道

在写 Skill 之前,先把模型调用这条链路打通。OpenClaw 的 Skill 本身不绑定具体模型供应商,但摘要生成这一步需要调用大模型。我用的方式是 TaoToken 统一 Key,一个 Key 走通所有模型调用,省得在多个平台之间来回切换。

TaoToken 的定位是统一 API 通道,官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。你需要先去控制台创建一个 API Key,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,创建完在 API Keys 页面复制出来,地址是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。

拿到 Key 之后,把它写进 OpenClaw 的 settings.json 或者环境变量里。我推荐用环境变量注入,不要硬编码在 SKILL.md 里。具体配置片段在下一节展开。

如果你还没决定用哪个模型,可以先去模型对话页面试一下效果,地址是 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,确认摘要质量符合预期再往下走。

3. 可复制配置:SKILL.md 骨架与 settings.json 接入

3.1 目录结构

先在 managed skills 目录下创建 Skill 文件夹:

mkdir -p ~/.openclaw/skills/rss-daily-digest/{scripts,references,assets} cd ~/.openclaw/skills/rss-daily-digest

目录约定是这样的:SKILL.md 是唯一必需的文件,references/ 放 Agent 按需读取的文档,scripts/ 放可执行脚本(执行而不读入上下文,省 Token),assets/ 放输出用的模板文件。

3.2 SKILL.md 完整骨架

--- name: rss-daily-digest description: >- Fetch RSS feeds, parse articles, generate AI summaries, and compile a daily digest report in Markdown. Use when user asks for RSS summary, news digest, daily briefing, feed reader, or tech news roundup. version: 1.0.0 homepage: https://github.com/yourname/rss-daily-digest user-invocable: true metadata: {"openclaw":{"emoji":"📰","requires":{"bins":["python3","curl"],"env":["RSS_FEEDS_CONFIG"]},"primaryEnv":"RSS_FEEDS_CONFIG"}} --- # RSS Daily Digest Generate a structured daily news digest from configured RSS feeds. ## Prerequisites - Python 3 with `feedparser` module - Feed sources configured in `{baseDir}/references/feed-sources.md` - Output directory: `~/openclaw-output/digests/` ## Workflow When the user asks for a daily digest or RSS summary: 1. **Read feed sources**: Read `{baseDir}/references/feed-sources.md` to get the list of RSS feed URLs and their categories. 2. **Fetch and parse feeds**: Run: python3 {baseDir}/scripts/fetch_feeds.py \ --feeds-file {baseDir}/references/feed-sources.md --hours 24 3. **Summarize articles**: For each article in the JSON output, generate a one-sentence summary (max 30 words) in the same language as the article. 4. **Format the digest**: Run: python3 {baseDir}/scripts/format_digest.py \ --input /tmp/openclaw-rss-articles.json 5. **Save the report**: Save as `~/openclaw-output/digests/digest-YYYY-MM-DD.md` 6. **Report to user**: Confirm total articles, per-category count, and file path. ## Error Handling - If a feed returns HTTP error or times out (>10s), skip and note it - If `feedparser` is not installed, run: `pip3 install feedparser` - If zero articles found, inform user and suggest expanding timeframe - Never silently fail — always report which feeds succeeded ## Rules - Never fabricate article titles or URLs - Always preserve the original article URL - Maximum 50 articles per digest

几个关键点:{baseDir}是 OpenClaw 提供的变量,指向 Skill 目录本身;metadata必须是单行 JSON,多行会解析失败,这是最常见的坑;description是触发器不是说明书,要包含用户实际会说的词,比如 “RSS summary”“news digest”“daily briefing”。

3.3 settings.json 接入 TaoToken

在 OpenClaw 的 settings.json 里配置模型通道和 Skill 环境变量:

{ "models": { "default": "claude-sonnet-4-20250514", "provider": { "baseUrl": "https://taotoken.net/api", "apiKey": "${TAOTOKEN_API_KEY}" } }, "skills": { "load": { "watch": true, "watchDebounceMs": 250 }, "entries": { "rss-daily-digest": { "enabled": true, "env": { "RSS_FEEDS_CONFIG": "/home/user/.openclaw/skills/rss-daily-digest/references/feed-sources.md" } } } } }

TAOTOKEN_API_KEY从环境变量读取,不要写死在文件里。如果你用的是 Coding Plan 长期编码方案,可以在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 了解额度配置,适合每天定时跑日报这种高频场景。

3.4 RSS 源配置

创建references/feed-sources.md:

# RSS Feed Sources ## Tech - https://hnrss.org/frontpage — Hacker News Front Page - https://www.ruanyifeng.com/blog/atom.xml — 阮一峰的网络日志 ## AI - https://buttondown.com/ainews/rss — AI News Newsletter ## World - https://feeds.bbci.co.uk/news/world/rss.xml — BBC World News

格式是- URL — 描述,脚本会按##分类标题自动归类。

4. 验证请求:本地触发 Skill 并检查输出

4.1 安装依赖并赋权

pip3 install feedparser chmod +x ~/.openclaw/skills/rss-daily-digest/scripts/*.py

4.2 单独测试抓取脚本

先不经过 Agent,直接跑脚本确认 RSS 抓取正常:

python3 ~/.openclaw/skills/rss-daily-digest/scripts/fetch_feeds.py \ --feeds-file ~/.openclaw/skills/rss-daily-digest/references/feed-sources.md \ --hours 24

正常输出是一段 JSON,包含articles数组和errors数组。如果articles为空但errors有内容,说明网络或源地址有问题;如果两个都为空,检查--hours是不是设得太小。

4.3 通过斜杠命令触发

在 OpenClaw 聊天窗口输入:

/rss-daily-digest

或者用自然语言:

帮我生成今天的 RSS 日报

Agent 会读取 SKILL.md,按 Workflow 逐步执行。执行完成后,检查输出文件:

ls -la ~/openclaw-output/digests/ cat ~/openclaw-output/digests/digest-$(date +%Y-%m-%d).md

你应该能看到一份按分类整理的 Markdown 日报,每篇文章带标题、链接、一句话摘要和来源。

4.4 确认 Skill 已加载

openclaw skills list --eligible openclaw skills list --verbose

--verbose会显示缺失的依赖和平台限制,排查时很有用。

5. 本篇常见错误排查

5.1 Skill 不出现在列表里

最常见的原因是metadata用了多行 YAML。它必须是单行 JSON 字符串,写成这样:

metadata: {"openclaw":{"emoji":"📰","requires":{"bins":["python3"]}}}

而不是:

metadata: openclaw: emoji: 📰

后者会静默解析失败,Skill 直接不加载。

5.2 Skill 列出但状态是 ineligible

说明门控条件没满足。用openclaw skills list --verbose看缺什么。常见的是requires.bins里的命令不在 PATH 中,或者requires.env里的环境变量没设置。

5.3 说了匹配的词但没触发

description写得太模糊,或者和其他 Skill 的 description 重叠。解决办法是把 description 收紧,包含用户实际会说的具体词,必要时设disable-model-invocation: true只允许手动触发。

5.4 脚本执行失败

检查工具策略是否阻止了 exec。如果 Agent 运行在沙箱中,requires.bins在宿主机检查通过,但容器内没装,也会失败。需要在沙箱配置里通过 setupCommand 安装依赖。

5.5 修改 SKILL.md 后没生效

改动在下一个新会话才生效。如果开了skills.load.watch: true,文件变化会触发刷新,但刷新后的列表也是在下一个 Agent 回合才采用。开个新会话最稳妥。

5.6 一个万能调试 Prompt

实在搞不定时,直接问 Agent:

我创建了一个名为 rss-daily-digest 的 Skill。 请帮我检查: 1. 它是否在你的 Skills 列表中? 2. 如果不在,请读取 ~/.openclaw/skills/rss-daily-digest/SKILL.md 并告诉我 frontmatter 是否有语法错误 3. 如果在,请尝试执行它并报告每一步的结果

6. 发布到 ClawHub 与长期使用建议

6.1 发布前检查

python3 -c " import yaml with open('SKILL.md') as f: content = f.read() parts = content.split('---') if len(parts) >= 3: fm = yaml.safe_load(parts[1]) print('Frontmatter valid') print(f' Name: {fm.get(\"name\")}') print(f' Version: {fm.get(\"version\")}') else: print('Cannot find frontmatter') "

确认metadata命名空间正确、requires.env字段名正确(不是requires.envs)、homepage已填写。

6.2 发布命令

npm install -g clawhub clawhub login clawhub publish ~/.openclaw/skills/rss-daily-digest \ --slug rss-daily-digest \ --name "RSS Daily Digest" \ --version 1.0.0 \ --changelog "Initial release: fetch, summarize, format RSS feeds"

6.3 定时执行

openclaw cron add \ --name "morning-digest" \ --cron "0 8 * * *" \ --message "请运行 RSS 日报 Skill,生成今天的科技和 AI 新闻摘要,保存到文件。"

6.4 长期编码场景

如果你打算把这个 Skill 作为日常工具长期跑,每天定时触发、还要迭代摘要质量,建议用 Coding Plan 方案,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有完整的 API 参数说明和错误码对照。

6.5 安全提醒

Skill 不应包含密钥,引用环境变量即可。安装第三方 Skill 前先读它的 SKILL.md,确认它请求的权限是必要的。OpenClaw 和 VirusTotal 合作提供安全扫描,ClawHub 上每个 Skill 页面都能看到扫描报告。如果你的 Skill 会把数据发送到外部服务,在 SKILL.md 里加一段 Trust & Privacy Notice 声明清楚。

先跑通,再用一周,根据实际使用中暴露的问题迭代,最后再考虑发布。这是我自己走下来最稳的路径。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 1:54:29

华科数据库实验MySQL 8.0.33实战包:开箱即用+避坑指南

简介:本资源是华中科技大学《数据库系统原理实践——以MySQL为例》课程的完整实验配套材料,面向计算机专业本科生及数据库初学者,聚焦数据库核心原理的动手验证与工程实现。资源共92个文件,主体为62个SQL脚本(覆盖建库…

作者头像 李华
网站建设 2026/9/26 1:53:02

DDIA精读指南:复制、分区与一致性决策,后端架构进阶必读

简介:《设计数据密集型应用程序》(DDIA)中文翻译版,面向后端工程师、架构师与数据库方向学习者,帮助系统理解分布式系统与数据存储的核心设计思想。资源共147个文件,以40个Markdown格式的章节译文为主体&am…

作者头像 李华
网站建设 2026/9/26 1:52:38

Gemini 地区限制 403 报错排查:网络出口、账号资质与客户端配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 1:52:38

Elasticsearch 8.17.3集成HanLP中文分词插件:安装配置与实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 1:52:34

Codex不是AI模型,而是本地化开发者工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华