你们有没有过这种感觉:刷到一篇讲某个牛X开源项目的公众号文章,顺手点了收藏,心想"以后细看"。然后……就再也没有然后了。
我自己的号「算力猫学AI」平时就爱写 AI 工具实战,也关注了「逛逛GitHub」「数字生命卡兹克」这几个号。好文越攒越多,真想找的时候全靠记忆翻聊天记录,效率感人。
所以我想搞一条自动流水线:把这几个号里主讲 GitHub 开源项目的文章,每天自动攒进我的 IMA 知识库《GitHub 的开源项目》。以后搜一个项目名,相关好文自己就冒出来。
这个活儿我全程是交给 WorkBuddy 干的。(后面我都叫它 WB。)它不只会跟我聊天,还能接定时任务——我让它每天 08:00 自己跑一遍,我躺着收就行。
下面把怎么搭、以及我踩的坑都摊开,照着我这套你能自己复现一条。
🔧 第一步:让 WB 当搭档,定方案
个人订阅号没有微信官方 API,想抓文章直链只能走第三方。我让 WB 帮我选路子,它给的方案是三段式:
• 采集源:本机跑 WeRSS(一个开源的公众号转 RSS 工具,项目名 rachelos/we-mp-rss),负责把订阅号的新文章抓成直链;
• 大脑:WB 自己每天定时读 WeRSS 的 feed、做 GitHub 相关性过滤、两层去重;
• 落库:最后把链接导进 IMA——链接导入不走建笔记配额,这点很关键,不然每天几十条早把配额吃光。
方案定了,WB 就开工了。下面是我实际让 WB 跑起来的步骤。
📐 搭起来其实就这几步(照着做版)
1. 把 WeRSS 跑起来当采集源
WeRSS 后端是 Python(FastAPI) + 前端 Vue3/Vite,用 SQLite 文件库,本机零 admin 就能跑。我的目录是 D:\Tools\we-mp-rss\app,命令是这样(Windows,Git Bash):
# 1) 解压 GitHub 下的 ZIP 到 D:\Tools\we-mp-rss\app(目录里要有 requirements.txt、web_ui)
# 2) 建个用户态 venv,别污染全局 Python
D:\python\python.exe -m venv D:\Tools\we-mp-rss\app\venv
# 3) 装后端依赖(都有预编译 wheel,不用编译)
D:\Tools\we-mp-rss\app\venv\Scripts\python.exe -m pip install -r requirements.txt
# 4) 生成配置
copy config.example.yaml config.yaml
# 5) 起后端(前端只用来首次设置,长期只要后端常驻)
D:\Tools\we-mp-rss\app\venv\Scripts\python.exe -m uvicorn web:app --host 127.0.0.1 --port 8001
# 6) 首次设置才需要前端:cd web_ui → npm install → npm run dev,然后开 http://localhost:8001 登录
登录后微信扫码授权,再添加你要订阅的号(我加了「逛逛GitHub」「数字生命卡兹克」+ 自己号等 4 个)。
一个小提示:清单里写默认账号是 admin / admin@123,但我这台机器初始化时读的是 Windows 用户名,实际登录名变成了 16422。如果你也踩到,去 config.yaml 里看一眼 USERNAME 就知道了。
2. 建 IMA 知识库,拿到"真正的" kb_id
在 IMA 里新建一个知识库,名字就叫《GitHub 的开源项目》。然后关键一步——别去抄库信息里那个数字 ID,那是个内部 folder id,拿去调接口会 220004。
正确做法是让 WB 用 search_knowledge_base 查一下,返回里 knowledge_base_id 是一串 base64,像这样:
xFzEe3ZcFGAKa7t2A4Aqw007Vi7doC5fJT4z_M89xJQ=
这串才是 API 要的。IMA 的凭证放本地 ~/.config/ima/ 下的 client_id 和 api_key,导入时 WB 自动带上去鉴权。
3. 让 WB 接管每日自动化
在 WB 里建一个每日 08:00 的定时任务,核心就四件事(我把真实脚本名也贴了,WB 直接跑脚本比让它现场拼 API 稳):
• 从 WeRSS 读新文:登录 POST /api/v1/wx/auth/login 拿 token,再 GET /api/v1/wx/articles?has_content=true 拉列表;
• GitHub 相关性过滤:标题/正文含 github.com 链接、或 github / 开源 / 仓库 / star 等关键词、且判定为主讲某个项目的才留;
• 两层去重:先按 URL 精确去重,再按 owner/repo 同仓库只留"最详细"那篇;
• 链接导入 IMA:调用 import_urls(https://ima.qq.com/openapi/wiki/v1/import_urls),knowledge_base_id 填上面那串 base64,urls 每批 ≤10 条。
我让 WB 把这三步落成了三个真实脚本,自动化每天 08:00 依次跑:
D:\python\python.exe fetch_weress.py # 先推 WeRSS 抓一轮新文
D:\python\python.exe collect_pipeline.py # 读 DB → 过滤 GitHub → 两层去重 → 产出 pending_import.json
D:\python\python.exe import_to_ima.py # 读 pending_import.json → 链接导入 IMA(每批10,幂等)
dedup_state.json 记着已导入的 URL 和每个仓库的最佳篇,保证幂等、绝不重导——IMA 没有 delete,重导就永久重复了。
4. 一个真相:WeRSS 自己不会抓,得有人推它
这点我绕了大弯才明白。WeRSS 的周期性抓取靠一张带 cron 的 message_tasks 表驱动,如果你从没建过这种任务,调度器就永远在睡觉——表面看一切正常,DB 却停在订阅那一刻。
所以务必加一步"推它一把":我让 WB 写了 fetch_weress.py,逻辑就是登录 → 读所有订阅号 → 逐个 POST /api/v1/wx/mps/update/{mp_id} 触发抓取 → 轮询 DB 直到稳定。把它塞进自动化的"步骤 0",再配个开机自启的 bat 把后端拉起来,链路才真正闭环。
⚠️ 我踩的坑(照着搭时别重蹈)
正常步骤讲完,下面是我实际撞上的几个坑,能避就避。
⚠️ 坑一:WB 的沙箱先给我挖了个坑
本以为拉个 WeRSS 源码就能跑,结果光把它跑起来就花了大半天。第一个坑居然是 WB 自己的运行环境给的。
• WB 的沙箱会往 node 里注入一个"安全删除"拦截。WeRSS 用 Vite 8,一启动要清 1 万多个缓存文件,直接被这个拦截按"批量删除"阈值卡死、抛错退出。我让 WB 查日志,定位到得先 unset 那几个环境变量,再 rm -rf node_modules/.vite。
• 好不容易起来,又报 transformWithEsbuild 错误——WB 装依赖时把 @vitejs/plugin-vue留在了 2.0.0(Vite 2 时代),跟实际的 Vite 8 不兼容,升到 6.0.7 才消停。
• 接着白屏:.env.development 里写死的原作者局域网死地址,浏览器连不上。最后发现后端 :8001 自带生产版 UI,直接弃用 dev server。
• 最迷的是登录:默认账号我以为 admin,结果数据库里是 Windows 用户名 16422;扫码二维码又死活不出图,WB 追进去发现 apis/auth.py 有行重复 import 把"API 模式"硬覆盖成"浏览器模式",而浏览器模式要 Playwright,没装。删掉那行,二维码秒出。
✅ 终于把 4 个号订阅上,WB 一抓落库 57 篇。
🐛 坑二:那个 220004,差点让我以为 WB 的凭证错了
过滤 + 去重跑通了:57 篇 → 刨掉 38 篇不相关的 → 19 篇候选。我让 WB 调 IMA 的 import_urls 导入,直接报 220004 invalid knowledge_base_id。
我当时一口咬定:肯定是本地 API Key 跟 Client ID 不是同一个 IMA 账号。还专门让 WB 装了 ima-skill 做安全审计,准备换凭证。
结果打脸:根因是 kb_id 记错了。 WB 用 search_knowledge_base 一查,凭证完全没问题,库明明白白在列表里。问题就是前面说的——我从库信息里抄的那个 7481182325331326 是内部数字型 folder ID,拿去当 knowledge_base_id 调接口当然 220004;API 要的是 xFzEe3ZcFGAKa7t2A4Aqw007Vi7doC5fJT4z_M89xJQ= 这串 base64。
这坑我记一辈子:跨会话务必用 base64 那串。改完 import_to_ima.py,19 条全进库,WB 闭环。
✅ 收尾 & 现在的状态
• 4 个公众号订阅,DB 现 109 篇;
• 两层去重后,IMA《GitHub 的开源项目》库内累计 32 条;
• 每日 08:00 自治闭环:WB 先让 fetch_weress.py 推 WeRSS 抓取 → collect_pipeline.py过滤 GitHub 相关 + 去重 → import_to_ima.py 链接导入 IMA,幂等、分批、绝不重导。
📌 留个话
这趟最大的体会:WorkBuddy 这类 AI 助手最香的地方,不是陪你聊天,是你能把它养成一个会自己干活的搭档。 你定好每天 08:00 干什么,它就真每天自己干——前提是每一环都别偷偷躺平:Vite 崩、二维码不出、kb_id 串错、调度器装睡……能跑通一次不算完,得让它天天自己跑、还跑得对。
同学们,你们在折腾这类"自动收集 / 自动同步"时,踩过最离谱的坑是啥?评论区聊聊,我看看有没有比我这个"220004 乌龙"还蠢的 😂
#WorkBuddy#GitHub开源项目#知识库#自动化#IMA
本文由WorkBuddy代笔。记录我用WorkBuddy做项目的过程。