个人信息聚合 + AI 总结系统 — RSS × 两段式 pipeline × GitHub Pages(Chirpy)
抓取 RSS 源(含自建源 auto-trend、视频源),经两段式 pipeline 产出中文每日简报,发布到 GitHub Pages 与 Webhook。
特色:两段式 pipeline(Tier1 分类+打分+摘要 / Tier2 选取+去重)在成本与深度间取得平衡,LLM 调用有界(无 Agent 循环);DedupStore 跨轮去重(每条目恰好处理一次,无丢弃无重处理)+ 批量主题去重控制 prompt 与时延;6 大类分类树(另 finance/crypto 预留)+ 分类感知阈值保证多样性与重点突出;自建源产出 RSS 即可接入,零适配。
uv sync --extra dev
cp .env.example .env # 填入 OPENAI_API_KEY(必填)
uv run rss-reader --check-config
uv run rss-reader# 完整 pipeline(默认)
uv run rss-reader
# 分阶段
uv run rss-reader --fetch-only
uv run rss-reader --classify-only --limit 10
uv run rss-reader --select-only --limit 15
uv run rss-reader --no-publish
# 测试(无 mock,真实数据)
uv run python -m pytestflowchart LR
FEEDS[feeds/*.yml<br/>172 源] --> SRC[Source 层<br/>RSSSource 并发抓取]
SRC --> DEDUP[DedupStore<br/>跨轮去重]
DEDUP --> T1[Tier 1<br/>分类+打分+摘要 单次 LLM]
T1 --> T2[Tier 2<br/>选取+去重 批量主题去重]
T2 --> RND[中文日报渲染]
RND --> OUT[GitHub Pages<br/>Webhook<br/>data/summaries/]
两段式 pipeline:
- Tier 1(队列消费):每源每日消费未处理条目上限 30 条(DedupStore 为消费位点,断点续传),单次 LLM 分类 + 打分 + 摘要,并发由
analysis_concurrency控制(当前 20) - Tier 2(零 AI):URL 去重 + 分类感知阈值 + 批量主题去重(分块并发)+ 配额平衡
- 6 大类(ai-research/research/systems/dev-community/tech-news/video)+ 子类分类树
- DedupStore 跨轮去重(每条目恰好处理一次,无丢弃无重处理),批量主题去重(大组分块并发)控制 prompt 大小
- 中文每日简报
- GitHub Pages(Chirpy 主题,Actions 构建)+ Webhook(飞书/Slack/Discord/自定义,并发)
- 跨轮去重(SQLite WAL,已处理项跳过)
- tenacity 网络重试(429/5xx/超时)
- 自建源 RSS 接入零适配(auto-trend/FluxSift)
- 财经/加密货币分类预留,启用零代码
- 全文抽取:
content_extractor字段已定义,接入 trafilatura 全文提取 - Email 发布 / 钉钉 Webhook
- 跨日趋势:SQLite FTS5 全文检索历史简报,识别跨日热点
- Chirpy 自定义:首页改为日报卡片墙,暗色默认
完整 TODO 见 docs/TODO.md。
| 文档 | 说明 |
|---|---|
docs/PRD.md |
产品需求(定位、用户故事、分类树、验收标准) |
docs/TECH.md |
技术方案(架构图、模块接口、数据流、存储) |
docs/API/README.md |
CLI 接口、配置 schema、数据模型 |
docs/FLOW/README.md |
业务流程 mermaid 图 + 详细数据流描述 |
docs/TODO.md |
不足与未来方向 |