Install
openclaw skills install @thcjp/rss-ai-reader-freeopenclaw skills install @thcjp/rss-ai-reader-free自动抓取 RSS/Atom 订阅源,通过 LLM 生成中文摘要,推送到飞书。基于 SQLite 去重,支持单次执行.
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | RSS AI 摘要 LITE处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供,或配置 ai-assistant 的 API Key |
| 飞书 Webhook | 凭证 | 必需 | 飞书群机器人配置后获取 Webhook URL |
详细的输入输出格式请参考下方章节说明。
| 场景 | 输入 | 输出 |
|---|---|---|
| 技术博客监控 | Hacker News、阮一峰等 feed 列表 | 新文章中文摘要推送到飞书群 |
| 个人订阅摘要 | 个人关注的技术博客 feed | 更新摘要推送到飞书 |
不适用于: 需要 Telegram 或 Email 推送的场景(需升级付费版);需要定时任务循环的场景(免费版仅支持单次执行);需要 llm-provider 后端的场景.
pip install -r requirements.txt)python main.py --config my_config.yaml --once 抓取并推送python main.py --stats 确认条目已入库与去重生效结果验证: 任务完成后,查看输出确认状态。成功时返回摘要和数据;失败时根据错误信息排查,参考恢复章节获取修复步骤.
feeds:
- name: "Hacker News"
url: "https://hnrss.org/frontpage"
category: "tech"
- name: "阮一峰周刊"
url: "https://www.ruanyifeng.com/blog/atom.xml"
category: "tech"
# ...
llm:
provider: "ai-assistant"
model: "ai-assistant-sonnet-4-20250514"
api_key: "${ANTHROPIC_API_KEY}"
# ...
notify:
feishu:
enabled: true
webhook_url: "${FEISHU_WEBHOOK}"
python main.py [options]
# ...
--config, -c 配置文件路径 (默认: config.yaml)
--once 只执行一次抓取与推送
--stats 显示数据库中的统计信息
--db 数据库路径 (默认: rss_reader.db)
场景: 个人希望每天手动执行一次,将技术博客更新摘要推送到飞书群
配置文件 my_config.yaml:
feeds:
- name: "Hacker News"
category: "tech"
- name: "阮一峰周刊"
ruanyifeng.com/blog/atom.xml"
category: "tech"
# ...
llm:
provider: "ai-assistant"
model: "ai-assistant-sonnet-4-20250514"
api_key: "${ANTHROPIC_API_KEY}"
# ...
notify:
feishu:
enabled: true
webhook_url: "${FEISHU_WEBHOOK}"
执行命令:
python main.yaml --once
飞书群收到的消息:
📰 Hacker News
# ...
**Why SQLite is Taking Over**
# ...
📝 SQLite 正在从嵌入式数据库扩展到更多应用场景。文章分析了其在边缘计算、移动应用中的优势,并对比了 PostgreSQL 在轻量级场景下的局限.
# ...
[🔗 阅读原文]
# ...
📰 阮一峰周刊
# ...
**科技爱好者周刊第 350 期**
# ...
📝 本期周刊介绍了 WebGPU 的最新进展、一个开源的 Markdown 编辑器项目,以及关于 AI Agent 架构的讨论.
# ...
[🔗 阅读原文]
分析: 单次执行抓取两个 feed 的新条目,ai-assistant 为每条生成中文摘要,飞书 Webhook 推送到群。SQLite 记录已推送的条目 ID,下次执行时自动跳过已推送的内容.
场景: 开发者订阅 Hacker News、V2EX、阮一峰三个技术博客,每周手动执行一次获取更新摘要
配置要点: 在案例 1 的 feeds 列表中追加 V2EX 的 feed(https://www.v2ex.com/index.xml),三个 feed 均归入 tech 分类,llm 与 notify 配置不变.
执行命令:
python main.yaml --once
分析: ai-assistant 为三个 feed 的新条目生成中文摘要后通过飞书 Webhook 推送。SQLite 去重确保同一篇文章只推送一次,多次执行时只推送增量内容.
| 错误场景 | 错误现象 | 原因分析 | 处理方式 |
|---|---|---|---|
| Feed URL 无法访问 | 抓取报 ConnectionError 或超时 | 网络不通或 feed URL 已失效 | 检查网络连接和配置后重试,在浏览器中打开 feed URL 确认是否可访问 |
| LLM API 调用失败 | 报 401 Unauthorized 或 429 Too Many Requests | API Key 无效或额度耗尽 | 核对环境变量中的 ANTHROPIC_API_KEY 是否正确;429 时降低执行频率 |
| 摘要内容为空 | LLM 返回空字符串或仅含标点 | feed 条目正文为空或 LLM 判断无有效内容 | 检查 feed 条目是否含 summary 或 content 字段;在 prompt 中加入兜底逻辑 |
| 飞书 Webhook 返回错误 | HTTP 状态码 400 或 {"code": 19021} | Webhook URL 失效或消息体格式不符飞书规范 | 在飞书群设置中重新获取 Webhook URL;检查消息体是否含必填字段(msg_type) |
| SQLite 数据库锁定 | 报 database is locked | 多个进程同时写入同一数据库文件 | 确保只有一个 main.py 进程在运行;通过 --db 参数指定独立数据库文件 |
A: 免费版仅支持飞书 Webhook 推送。如需 Telegram Bot、SMTP Email 推送或多渠道组合推送,需升级至 rss-ai-reader 付费版。飞书 Webhook 在飞书群设置中添加自定义机器人后即可获取.
A: 不能。免费版仅支持 --once 单次执行模式,需手动运行或配合外部 cron 调度。如需程序内置的定时循环任务(schedule.interval 配置),需升级至付费版。免费版用户可通过系统 计划任务配置 配合 --once 实现定时效果.
A: 去重基于 feed URL 与条目 ID(或 GUID)的联合唯一键。每次抓取新条目时,先查询数据库中是否已存在该条目 ID,存在则跳过,不存在则生成摘要、推送并写入数据库。如需清理历史数据,可直接删除 rss_reader.db 文件,下次执行会自动重建.
A: 免费版(LITE)包含 RSS 抓取、ai-assistant 摘要生成、飞书推送、SQLite 去重四大基础功能。付费版(RSS AI 摘要推送)额外提供:
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| LLM响应超时或无响应 | 网络延迟或模型负载过高 | 检查网络连接和配置后重试;确认Agent平台LLM服务正常 |
| 输入内容格式不正确 | 用户输入不符合skill预期格式 | 检查输入是否符合skill使用说明中的格式要求,参考示例章节 |
| 执行结果与预期不符 | 指令描述不够明确或上下文不足 | 提供更详细的指令描述,补充必要的上下文信息 |
| 命令执行失败 | 运行环境不满足要求或权限不足 | 确认运行环境符合依赖说明中的要求;检查命令权限设置 |
本免费版提供 RSS 抓取、ai-assistant 摘要生成、飞书推送、SQLite 去重四大基础功能。如需 Telegram 与 Email 推送、llm-provider 后端、定时任务循环、多渠道组合推送等高级能力,请升级至 rss-ai-reader 付费版,获取完整的多渠道推送与定时调度能力.
{
"success": true,
"data": {
"result": "RSS AI 摘要 LITE处理结果",
"execution_time": "0.5s",
"metadata": {
"version": "1.0",
"processor": "rss-ai-reader"
}
},
"execution_log": [
"解析输入参数",
"执行核心处理",
"格式化输出结果"
],
"error": null
}