feedclaw:基于AI与本地SQLite的智能RSS摘要工具实践指南

feedclaw:基于AI与本地SQLite的智能RSS摘要工具实践指南 1. 项目概述与核心价值如果你和我一样每天被海量的技术博客、新闻资讯和行业动态淹没却又不想错过任何有价值的信息那么feedclaw这个工具的出现绝对值得你花上十分钟了解一下。它不是一个简单的RSS阅读器而是一个集成了本地存储和AI智能摘要的“信息捕手”。想象一下你订阅的几十个高质量源每天自动抓取更新然后由一个“AI助理”帮你阅读、筛选并生成一份精炼的、带有人工智能洞察的每日简报。这正是feedclaw的核心使命将被动、碎片化的信息消费转变为主动、高效的知识获取。我最初接触这个项目是因为厌倦了在多个阅读器、新闻App和浏览器标签页之间来回切换的疲惫感。传统的RSS工具解决了信息聚合的问题但没有解决信息过载的问题。feedclaw的巧妙之处在于它用本地SQLite数据库作为你的私人知识库所有文章都离线存储彻底摆脱了云服务的限制和隐私担忧。更重要的是它内置了对 Anthropic Claude 和 OpenAI GPT 系列模型的支持能够基于你过去24小时、一周甚至更长时间内未读的文章生成一份高度概括、突出重点的AI摘要。你可以选择在终端里快速浏览也可以生成Markdown或HTML文件进行深度阅读甚至输出JSON供其他自动化脚本处理。对于开发者、技术博主、产品经理或任何需要保持技术前沿敏感度的人来说这无疑是一个提升信息处理效率的利器。2. 核心设计与架构解析2.1 为什么选择本地优先与SQLitefeedclaw的设计哲学非常明确数据主权归用户所有核心操作离线可用。这直接体现在它使用 SQLite 作为存储后端。相比于依赖网络服务的在线RSS阅读器本地存储带来了几个关键优势隐私与安全你的订阅列表、已抓取的文章全文、阅读状态全部存储在你自己的硬盘上。没有任何第三方服务器能接触到这些数据。这对于关注数据隐私的用户来说是首要考量。速度与可靠性所有读写操作都在本地完成速度极快。查询订阅源、过滤文章、更新阅读状态都是毫秒级响应不受网络波动影响。离线工作流一旦完成初次抓取你可以在完全离线的环境下浏览历史文章、生成摘要如果模型支持本地运行的话目前仍需API调用。这对于网络环境不稳定或需要在飞机、高铁上工作的场景非常友好。简化部署与依赖SQLite是一个单文件数据库无需安装和配置复杂的数据库服务如PostgreSQL, MySQL。这使得feedclaw的安装和运行门槛极低一个pnpm install和build命令就能让整个系统跑起来。在数据库表结构设计上它至少会包含feeds订阅源信息、articles文章内容、digests生成的摘要记录等核心表并通过外键关联形成一个完整的数据闭环。这种设计也为未来的功能扩展比如文章标签、全文搜索、跨源关联分析留下了充足的空间。2.2 模块化架构与清晰的职责划分浏览其源代码结构你会发现feedclaw采用了典型的模块化设计这保证了代码的可维护性和可测试性。主要模块通常包括Fetcher抓取器负责与远程RSS/Atom源通信。它的核心是实现了条件请求Conditional GET利用ETag和Last-Modified头。这意味着如果订阅源自上次抓取后没有更新服务器会返回304 Not Modified状态码feedclaw就不会下载重复的内容极大地节省了带宽和抓取时间。这是构建一个“好公民”式爬虫的基础。Parser解析器将抓取到的XML格式的RSS或Atom内容解析为结构化的JavaScript对象。这里需要处理各种源的非标准格式确保标题、链接、发布时间、正文等关键字段能被正确提取。Database数据库层封装所有对SQLite的CRUD操作。提供诸如“插入新文章”、“标记文章为已读”、“按时间和分类查询文章”等高层接口。这一层是业务逻辑与底层存储的桥梁。Digester摘要生成器这是AI能力的核心模块。它接收一批文章标题、链接、摘要或全文构造一个精心设计的提示词Prompt调用配置的AI提供商APIAnthropic或OpenAI并解析返回的摘要结果。提示词的设计质量直接决定了摘要的可用性。CLI命令行界面基于诸如commander或yargs的库构建提供清晰、易用的命令行交互。每个命令init,fetch,digest等都对应一个清晰的业务操作。这种架构使得每个部分都可以独立开发、测试和替换。例如如果你想增加对另一个AI提供商如Google Gemini的支持主要工作就在 Digester 模块如果你想更换数据库理论上只需重写 Database 层。2.3 一体化与生态集成作为OpenClaw技能feedclaw的另一个设计亮点是它既是独立的工具也是OpenClaw 生态系统中的一个“技能”。OpenClaw 是一个致力于构建模块化、可组合开发者工具的生态。这意味着你可以将feedclaw作为一个组件集成到更复杂的自动化工作流中。通过--json标志几乎所有命令都能输出结构化的JSON数据而不是人类可读的文本。这使得其他脚本、Agent智能体或OpenClaw中的其他工具可以轻松消费feedclaw的数据。例如你可以写一个脚本每天定时运行feedclaw --json digest将生成的JSON摘要发送到Slack或钉钉或者在OpenClaw Agent中当用户询问“今天AI领域有什么新闻”时Agent可以直接调用feedclaw的技能来获取答案。这种设计体现了“Unix哲学”一个工具只做好一件事并通过清晰的接口这里是JSON和CLI与其他工具协作。feedclaw做好了“信息抓取与AI摘要”这件事并为你将它嵌入任何自动化流程提供了可能。3. 从零开始详细安装与环境配置指南3.1 基础运行环境搭建要运行feedclaw你需要准备以下环境我将以macOS/Linux和Windows为例分别说明1. Node.js 与 pnpmfeedclaw要求 Node.js 版本 22 或更高。我推荐使用nvm(Node Version Manager) 来管理Node版本这样可以轻松切换而不影响系统其他项目。# 安装nvm (macOS/Linux) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash # 重新打开终端或运行 source ~/.bashrc (或 ~/.zshrc) nvm install 22 # 安装Node.js 22 nvm use 22 # 使用该版本 # 安装pnpm (Node.js包管理器比npm更快、更节省磁盘空间) npm install -g pnpm在Windows上你可以从Node.js官网下载安装包或者使用nvm-windows。pnpm的安装命令同样是npm install -g pnpm。2. 构建工具链Windows用户特别注意由于feedclaw依赖的better-sqlite3等原生模块需要编译在Windows上你必须安装Visual Studio Build Tools或Visual Studio并包含“使用C的桌面开发”工作负载。这是最关键也最容易出错的一步。注意很多Windows下的Node.js原生模块编译失败都源于此步骤缺失。请务必确保安装成功并能在命令行中调用cl.exe(C编译器)。3. 获取项目代码打开终端克隆仓库并进入目录git clone https://github.com/psandis/feedclaw.git cd feedclaw3.2 依赖安装与项目构建进入项目根目录后使用 pnpm 安装依赖并构建项目pnpm install pnpm buildpnpm install会读取package.json安装所有必要的依赖包。pnpm build则通常会执行TypeScript编译将.ts文件转成.js等构建步骤。如果一切顺利你应该能看到dist/或lib/目录被创建里面是编译后的JavaScript代码。常见问题与解决pnpm install报错提示better-sqlite3编译失败这几乎总是Windows上缺少C构建工具导致的。请返回上一步确认Visual Studio Build Tools已正确安装。在macOS/Linux上通常需要Xcode命令行工具或build-essential(Ubuntu/Debian) 或base-devel(Arch)。网络问题导致安装缓慢或失败可以考虑配置pnpm的国内镜像源pnpm config set registry https://registry.npmmirror.com。构建后pnpm cli命令找不到确保你在项目根目录下运行。cli命令通常定义在package.json的bin字段或scripts中pnpm会帮你链接到本地。3.3 核心配置AI API密钥与数据目录feedclaw的核心功能——AI摘要生成——需要调用外部AI服务因此你必须配置API密钥。1. 获取API密钥Anthropic Claude访问 Anthropic Console 注册账号并创建API Key。Claude模型在长文本理解和摘要任务上表现非常出色是feedclaw的默认推荐。OpenAI GPT访问 OpenAI Platform 创建API Key。2. 设置环境变量推荐方式将密钥设置为环境变量是最安全、最灵活的方式因为它不会将密钥硬编码在配置文件中。# macOS / Linux (添加到 ~/.bashrc, ~/.zshrc 或直接在终端会话中设置) export ANTHROPIC_API_KEYsk-ant-...你的真实密钥... # 或者使用OpenAI export OPENAI_API_KEYsk-...你的真实密钥... # Windows (命令提示符) set ANTHROPIC_API_KEYsk-ant-...你的真实密钥... # Windows (PowerShell) $env:ANTHROPIC_API_KEYsk-ant-...你的真实密钥...3. 配置文件可选你也可以在~/.feedclaw/config.json中创建配置文件设置一些默认行为。但API密钥强烈建议通过环境变量设置避免密钥泄露。{ defaultProvider: anthropic, defaultModel: claude-3-5-sonnet-20241022, defaultFormat: terminal, digestSince: 24h }4. 自定义数据目录默认情况下feedclaw的所有数据数据库、配置、缓存都存放在~/.feedclaw/目录下。如果你想改变这个位置例如存放到一个同步盘如iCloud Drive, Dropbox以实现多设备间状态同步可以设置FEEDCLAW_HOME环境变量。export FEEDCLAW_HOME$HOME/Library/Mobile Documents/com~apple~CloudDocs/FeedClawData # 之后运行任何 feedclaw 命令数据都会存储在这个新路径下。4. 核心工作流实战与命令详解安装配置完成后我们就可以开始实际使用了。feedclaw的操作围绕几个核心CLI命令展开逻辑清晰。4.1 初始化导入你的第一批订阅源首先你需要告诉feedclaw要关注哪些信息源。最快捷的方式是使用内置的精选源列表。pnpm cli init这个命令会从项目内的feeds/default.json文件中读取一个预定义的源列表并将它们添加到你的本地数据库。你会看到类似下面的输出列出了添加的源及其分类✓ MIT Technology Review ✓ OpenAI Blog ✓ Google AI Blog ... 16 feeds added. Run fetch to pull articles.高级用法与技巧按分类初始化如果你只对某个领域感兴趣可以使用--bundle参数。例如pnpm cli init --bundle ai只会添加AI分类下的源MIT Tech Review, OpenAI, Google AI等。可选值有ai,dev,openclaw,news,all默认。导入自定义OPML文件如果你从其他阅读器如Feedly, Inoreader导出了OPML文件可以直接导入pnpm cli opml-import your-feeds.opml。OPML是订阅列表交换的标准格式。从本地JSON文件初始化你可以创建一个自定义的JSON文件格式参照feeds/default.json然后通过pnpm cli init --from my-feeds.json导入。这是批量管理私人订阅源的好方法。4.2 抓取让信息自动流入你的知识库初始化订阅源后下一步就是抓取文章。这是自动化信息收集的核心。pnpm cli fetch这个命令会遍历你数据库中的所有订阅源向每个源的URL发起HTTP请求抓取最新的文章列表并将新文章存入本地SQLite数据库。得益于条件请求如果某个源自上次抓取后没有更新它会快速跳过输出✓ [Feed Name]: 0 new。抓取策略与参数单源抓取如果你只想更新某个特定的源可以使用--feed参数指定源的ID或URL。首先用pnpm cli list查看源ID。pnpm cli fetch --feed 5 # 抓取ID为5的源 pnpm cli fetch --feed https://simonwillison.net/atom/everything/ # 抓取指定URL的源后台定时抓取为了实现真正的“信息流”你需要定时运行fetch。在Linux/macOS上最经典的方式是使用cron定时任务。# 编辑当前用户的cron任务 crontab -e # 添加一行表示每天上午8点和晚上8点各抓取一次 0 8,20 * * * cd /path/to/your/feedclaw /usr/local/bin/pnpm cli fetch ~/.feedclaw/fetch.log 21在Windows上可以使用“任务计划程序”来实现类似功能。这样你的知识库就能在后台持续更新无需手动干预。4.3 生成与消费AI驱动的智能摘要这是feedclaw最激动人心的部分。当你的数据库里积累了一批新文章后就可以让AI帮你消化了。基础摘要生成pnpm cli digest这个最简单的命令会使用默认配置过去24小时内未读的文章、Anthropic作为提供商、终端格式输出生成一份摘要。深度定制你的摘要digest命令提供了丰富的参数让你能精确控制摘要的内容和形式。时间范围 (--since)决定摘要涵盖哪些文章。pnpm cli digest --since 7d # 过去7天 pnpm cli digest --since 2w # 过去2周 pnpm cli digest --since 1h # 过去1小时适合高频源内容过滤 (--category)只摘要特定分类的文章。pnpm cli digest --category ai # 只看AI新闻 pnpm cli digest --category dev # 只看开发者动态 pnpm cli digest --category ai,dev # 同时看AI和开发输出格式 (--format)适配不同场景。pnpm cli digest --format terminal # 在终端彩色输出适合快速浏览 pnpm cli digest --format markdown digest.md # 生成Markdown文件可用Typora、Obsidian等打开或发布到博客 pnpm cli digest --format html digest.html # 生成HTML文件样式更美观可直接在浏览器中查看或邮件发送 pnpm cli digest --format json # 输出结构化JSON供其他程序处理AI模型与提供商 (--provider,--model)选择不同的AI引擎。pnpm cli digest --provider openai --model gpt-4o # 使用OpenAI的GPT-4o模型 pnpm cli digest --provider anthropic --model claude-3-haiku-20240307 # 使用Claude 3 Haiku速度更快成本更低注意模型名称需要与API提供商支持的模型列表匹配。不同模型在理解能力、生成速度和成本上差异很大。对于摘要任务Claude Sonnet或GPT-4通常是质量和成本的平衡点。数量限制 (--max-articles)如果某个时间段内文章太多可以限制送入AI的上下文数量以控制成本和生成时间。pnpm cli digest --since 7d --max-articles 30 # 只从过去7天的文章中选取最多30篇进行摘要一个完整的实战命令示例假设我想每周日晚上生成一份过去一周AI和开发领域的精华摘要保存为Markdown文件以便周一早上回顾。# 每周日晚上11点运行 pnpm cli digest --since 7d --category ai,dev --format markdown --provider anthropic --model claude-3-5-sonnet-20241022 ~/Documents/Weekly-Tech-Digest-$(date %Y-%m-%d).md这个命令会生成一个带日期的Markdown文件内容就是过去一周的智能摘要。4.4 源管理打造你的个性化信息食谱你的兴趣会变化订阅源也需要随之调整。feedclaw提供了简单的源管理命令。添加新源pnpm cli add feed-url [--category name]pnpm cli add https://blog.rust-lang.org/feed.xml --category dev pnpm cli add https://astral.sh/rss.xml --category dev删除源可以通过ID或URL删除。pnpm cli list # 先查看ID pnpm cli remove 12 # 删除ID为12的源 pnpm cli remove https://example.com/old-feed.xml # 删除指定URL的源注意删除源不会删除该源下已抓取的文章。这些文章仍然保留在你的本地数据库中只是不再有新的文章被抓取进来。这保证了你的历史数据不会丢失。导出与备份定期导出OPML是个好习惯可以作为备份也方便迁移到其他阅读器。pnpm cli opml-export my-feeds-backup-$(date %Y%m%d).opml5. 进阶技巧、问题排查与生态集成5.1 提升摘要质量的实用技巧AI摘要的质量不仅取决于模型也取决于你“喂”给它的信息和指令。虽然feedclaw内置了提示词但你可以通过一些间接方式影响输入质量。精心筛选订阅源摘要的质量上限取决于输入文章的质量。优先订阅那些观点深刻、信息密度高、写作规范的源如官方技术博客、资深从业者的个人博客。避免过多订阅内容农场或标题党网站。利用分类进行聚焦将订阅源进行精细分类如ai-research,dev-python,news-security。这样在生成摘要时你可以针对特定领域提问AI更容易给出专业、深入的总结。例如--category ai-research得到的摘要会比泛泛的--category ai更具学术深度。控制时间与数量不要一次性摘要太多文章如超过50篇。过多的上下文会稀释重点增加AI的负担和出错概率成本也更高。对于高频源可以每天摘要对于低频高质量源可以每周摘要一次。理解“已读”状态digest命令默认只处理未读文章并在生成摘要后将其标记为已读。这意味着你不会在后续的摘要中重复看到同一篇文章。如果你希望重新摘要某篇文章需要先在数据库层面将其标记为未读这可能需要直接操作SQLite数据库或等待未来工具支持。5.2 常见问题与解决方案速查表问题现象可能原因解决方案运行pnpm cli任何命令都报错Command not found1. 未在项目根目录运行。2.pnpm build未成功执行或构建产物路径不对。1. 确保终端当前目录是feedclaw/。2. 重新运行pnpm install pnpm build检查是否有构建错误。fetch命令报网络错误或超时1. 订阅源URL失效或无法访问。2. 本地网络问题或代理设置。3. 源服务器屏蔽了请求。1. 用浏览器检查该URL是否能正常访问。2. 检查网络如有代理需配置Node.js的代理环境变量 (HTTP_PROXY)。3. 尝试添加User-Agent头需修改代码或等待配置支持。digest命令报错Missing API key未正确设置ANTHROPIC_API_KEY或OPENAI_API_KEY环境变量。1. 运行echo $ANTHROPIC_API_KEY(Linux/macOS) 或echo %ANTHROPIC_API_KEY%(Windows) 检查变量是否已设置。2. 确保在运行digest的同一个终端会话中设置了环境变量。3. 重启终端或重新加载shell配置文件 (如source ~/.zshrc)。AI摘要内容空洞、重复或跑题1. 输入文章质量差或主题过于分散。2. 选择的AI模型不适合摘要任务。3. 上下文文章数量过多。1. 优化订阅源列表。2. 尝试更换模型如从claude-haiku换到claude-sonnet。3. 使用--max-articles限制数量或使用--since缩短时间范围。数据库文件损坏或异常程序异常退出、磁盘错误或手动修改了数据库文件。1.备份首先复制~/.feedclaw/feedclaw.db文件。2. 可以尝试删除数据库文件rm ~/.feedclaw/feedclaw.db然后重新运行init和fetch。注意这会丢失所有历史数据。Windows下pnpm install编译原生模块失败缺少C编译环境Visual Studio Build Tools。1. 确认已安装VS Build Tools且包含了“C桌面开发”工作负载。2. 以管理员身份打开“x64 Native Tools Command Prompt for VS 2022”这个专门的命令行工具再在其中运行pnpm install。5.3 集成到自动化工作流与OpenClawfeedclaw的--json输出和技能化设计为自动化打开了大门。场景一每日摘要推送至社交平台你可以写一个简单的Node.js脚本或Shell脚本#!/bin/bash # daily-digest.sh cd /path/to/feedclaw # 1. 抓取新文章 pnpm cli fetch # 2. 生成JSON格式的摘要 JSON_OUTPUT$(pnpm cli digest --since 24h --format json --provider anthropic) # 3. 使用jq解析JSON并调用curl发送到Slack Webhook TITLE$(echo $JSON_OUTPUT | jq -r .title) SUMMARY$(echo $JSON_OUTPUT | jq -r .summary) curl -X POST -H Content-type: application/json \ --data {\text\:\*$TITLE*\n\n$SUMMARY\} \ YOUR_SLACK_WEBHOOK_URL然后通过cron定时执行这个脚本。场景二作为OpenClaw Agent的“眼睛”在OpenClaw工作区中你可以声明feedclaw作为一个技能。当用户向Agent提问“今天有什么重要的科技新闻”时Agent可以自动执行feedclaw --json digest --category news --since 12h获取结构化的摘要数据然后组织成自然语言回复给用户。这相当于给你的AI助手装上了实时信息感知能力。我个人在实践中将feedclaw与我的笔记软件Obsidian结合。我设置了一个cron任务每天上午9点生成一份Markdown格式的“昨日技术摘要”并自动保存到Obsidian的每日笔记文件夹中。这样我每天打开笔记第一眼就能看到AI为我梳理好的行业动态极大地提升了信息摄入的效率也方便日后回溯和链接。这个工具真正让我从“追逐信息”的焦虑中解脱出来转向了“管理知识”的从容。