
一个面向独立开发者的命令行工具抓取社区帖子让 LLM 提炼出创意点子、用户痛点、独立开发机会、技术趋势四类洞察输出一份带可点击原帖链接的 Markdown 报告。代码github.com/Angryshark128/shibeiMITv0.1.0一、要解决的问题独立开发者做选题时最常遇到的情况V2EX 程序员节点一天几十上百条新帖刷一遍一两个小时读完却记不住几条不刷又怕错过真正有用的信息——某个反复被吐槽的痛点可能就是一个产品的起点。信息不是稀缺品注意力才是。这个项目的初衷很简单把「读社区」这件事外包给机器把「判断什么值得做」留给人。它不替你做决定只负责把噪音过滤掉按时给你一份「今天社区里有哪些值得看一眼的东西」的简报。使用示例一条命令自动完成「爬取 → 分析 → 报告」$ uv run python analyzer.py 首次运行或数据为空自动全量爬取 ... [V2EX] 新增 20 帖 共 20 个帖子待分析来源: v2ex(programmer, python)... 报告已写入/Project/shibei/data/analysis/analysis.md生成的报告analysis.md每条洞察都带着可点击的原帖链接可以直接跳回去看上下文# 拾贝 · 多来源分析 来源: v2ex(programmer, python) 基于 20 个帖子自动生成 ## 好的创意/产品点子 - 把 Python 脚本编译成无依赖的单文件可执行工具 — [怎么搞定纯 Python 代码解码 jpg 图片](https://www.v2ex.com/t/1224588) - 在线 Python 编辑器 运行终端 — [用 GPT5.6 填了之前的坑在线的 Python 编辑器和运行终端](https://www.v2ex.com/t/1226355) ## 用户痛点 - 申请 TG API 用 Google Voice 一直失败 — [TG api 我用 google Voice 老申请失败](https://www.v2ex.com/t/1229505) ## 个人开发者机会 - 开源的 AI 文本拟人化工具集适合独立开发者推广 — [humanize-text 一个开源的 AI 文本拟人化工具集](https://www.v2ex.com/t/1213910) ## 趋势洞察 - 社区开始关注「AI 生成内容」与「跨境工具出海」方向 — [9.9 元起跨境卖家疯抢的纯净住宅 IP 辣椒 HTTP](https://www.v2ex.com/t/1212876)以上为示例输出实际内容由你配置的 LLM 从抓取的帖子中提炼。二、解决方案项目与技术架构定位服务独立开发者四类洞察直指选题三问做什么、做给谁、值不值得做。设计上坚持三条主线来源可插拔、数据结构统一、LLM 接口只用 OpenAI 协议。数据流V2EX (或其他社区) ──爬取──▶ data/v2ex/{node}/{id}.json ──分析──▶ LLM 提炼 4 类洞察 │ ▼ data/analysis/analysis.md可点击原帖链接爬虫抓取帖子与回复归一为统一 JSON 结构。分析模块按 4 个维度分批并行调 LLM批次结果层级合并去重。报告里的来源链接由代码层还原不经过 LLM。模块划分模块职责sources/来源抽象层。Source抽象基类定义fetch_topics/fetch_replies/list_nodes三个方法sources/__init__.py是注册表models.py统一数据结构Post/Reply所有来源的输出都归一到这里crawler.py来源无关的爬虫主循环分页、去重、缓存、断点续传analyzer.py分析模块同时也是唯一入口自动爬取 → 分析 → 打印报告路径config.json按来源分节配置节点、页数、请求间隔llm节配置模型三个关键设计的取舍来源可插拔。新增一个社区 新建一个来源类继承Source实现三个方法 注册 加一节配置主流程和分析模块一行不用改。代价是把「来源差异」隔离在sources/内部。统一数据结构。所有来源的帖子最终归一为同一个 JSON字段名与来源无关V2EX 的member归一到authorid统一为字符串。分析模块只认这一种结构不感知具体社区。单一入口。用户不需要知道「要不要先爬取」。analyzer.py内部判断没有本地数据就全量爬有数据就增量爬然后只分析新增。用户每天只需跑一条命令。真实抓取的帖子data/v2ex/programmer/1231499.json{id:1231499,source:v2ex,node:programmer,title:codex 现在怎么这么慢了用的 sol 中、高都很慢,content:,author:longpc,created:1785632990,replies_count:7,url:https://www.v2ex.com/t/1231499,reply_list:[{id:17928070,author:oop12,content:慢就算了 额度砍了一大堆,created:1785633792},{id:17928087,author:idragonet,content:是的所以我用反重力了 3.6F 快,created:1785635177}]}几个值得说的工程点零第三方运行时依赖。爬虫、分析、来源全部只用标准库urllib。装好 Python 就能跑这给部署和 CI 省掉了大量麻烦。省成本。正文截断 500 字符、每帖最多取 10 条回复、每条回复截断 200 字符15 帖一批、4 个类别并行批次结果每 3 个一组层级合并避免单次 prompt 过大。今日列表缓存 分析 run_id 缓存重跑不重复请求。报告链接不经过 LLM。LLM 只负责提炼文字输出里用[#帖子ID]做锚点标注来源最终输出时由代码把锚点替换成[标题](原帖URL)。URL 来自抓取的真实数据杜绝 LLM 杜撰链接。三、期间面临的挑战1. 「兜底默认值」制造了一个隐蔽 bug最初ANALYZE_MODEL可选、兜底gpt-4o-mini。但项目定位是用户自带 LLM——用第三方厂商时gpt-4o-mini在对方那里根本不存在直接返回 400model not found。更糟的是这类错误很容易被当成偶发网络问题。结论模型名和 URL 一样属于「用户自带」信息不同厂商各不相同不该有内置默认。改成必填缺失即退出并打印配置说明把配置错误暴露在第一时间。2. 两步命令不符合真实使用习惯原设计是先跑crawler.py再跑analyzer.py。但用户实际操作时经常跳过第一步然后因为数据为空得到一句「请先运行 crawler.py 抓取」——这个体验很差。结论把「是否爬取」的决策交给程序。analyzer.py成为唯一入口自动判断有数据走增量数据为空自动退化为全量。用户只需要一条命令。3. 要不要为「未来可能有」的多个来源做抽象当前只有 V2EX 一个来源。如果一开始就把 V2EX 的 API 路径写死将来接 Hacker News、Reddit 时得大改但如果抽象过度就是给不确定的将来付成本。结论抽象一层但只到「够用」为止。引入Source抽象基类 注册表但接口只留三个真正被用到的方法每个来源是一个独立的实现类。新增来源的成本从「改主流程」降为「加一个类」。4. 外部 API 的不可靠是常态V2EX v1 API 大约限制 600 次/小时/IP大量爬取会 403LLM API 也时有 5xx、限流、超时。爬虫遇到 403/404 直接返回空、不重试帖子被删或限流重试无意义分析侧 4xx 直接报原因终止重试无用429/5xx 指数退避重试。单来源失败不影响其他来源。5. LLM 会一本正经地编造链接把原帖 URL 直接交给 LLM 让它填进报告它可能会拼错、编造不存在的链接。这是 LLM 工具的常见翻车点。结论让 LLM 只做「判断和提炼」所有确定性的事情URL、链接、幂等、去重交给代码。URL 不注入 prompt锚点由代码还原。四、经验收获默认值不总是「更友好」有时是 bug 的温床。一个面向「用户自带服务」的工具内置厂商默认值等于假设了用户的厂商——这个假设迟早会错。必填并报错比静默用错更好。边界要划清用户自带什么项目提供什么。LLM 的 URL、Key、模型全部由用户提供项目不内置任何账号。这既解决了成本问题也让「配置即文档」成立——README 里列清三件套即可不用猜。真实的使用路径比「文档引导」更可靠。用户只会记一条命令。把判断逻辑内置进程序自动增量/全量比在文档里写「记得先跑 crawler.py」有效得多。把不可靠的环节交给确定性代码。LLM 输出不可靠就让它只负责提炼链接、去重、幂等全用代码兜底。这个原则适用于所有 LLM 应用。抽象跟着需求走不要超前。单来源起步、抽一层够用的抽象而不是一开始就铺满设计模式。抽象的价值是在「新增来源」这个真实动作发生时兑现的在那之前它是负债。零依赖是长尾收益。标准库实现带来的不是「看起来简洁」而是部署、测试、CI、环境迁移全部变简单——对一个工具类项目这比少写几行代码重要得多。五、代码与安装仓库github.com/Angryshark128/shibeiMIT 协议v0.1.0。依赖Python 3.10运行时零第三方依赖uv仅用于开发ruff / pytest / pyright。# 1. 克隆gitclone https://github.com/Angryshark128/shibei.gitcdshibei# 2. 安装仅 dev 工具直接运行可跳过uvsync# 3. 配置 LLM —— URL、Key、模型三件套全部用户自带exportOPENAI_API_KEYsk-xxxexportOPENAI_BASE_URLhttps://api.deepseek.com/v1# 或用 config.json 的 llm.base_urlexportANALYZE_MODELdeepseek-v4-flash# 或用 config.json 的 llm.model# 4. 运行唯一入口自动爬取 分析 打印报告路径uv run python analyzer.py# 强制全量重分析uv run python analyzer.py--full每天跑一条analyzer.py即可。报告输出在data/analysis/analysis.md增量报告analysis_today.md。拾贝后续计划接入 Hacker News、Reddit 等更多来源并做 Docker 定时部署。欢迎 issue 与 PR。