首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >我让 WorkBuddy 帮我搭了条 GitHub 好文自动收集流水线,连踩几个坑

我让 WorkBuddy 帮我搭了条 GitHub 好文自动收集流水线,连踩几个坑

作者头像
用户12610713
发布2026-07-14 19:01:53
发布2026-07-14 19:01:53
290
举报

你们有没有过这种感觉:刷到一篇讲某个牛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做项目的过程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档