{"id":49683245,"url":"https://github.com/shawnxie94/infinitum","last_synced_at":"2026-06-29T07:00:56.481Z","repository":{"id":353712327,"uuid":"1206796318","full_name":"shawnxie94/infinitum","owner":"shawnxie94","description":"基于RSS的资讯聚合工作台","archived":false,"fork":false,"pushed_at":"2026-06-23T06:33:40.000Z","size":18470,"stargazers_count":249,"open_issues_count":0,"forks_count":17,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-06-23T07:23:57.079Z","etag":null,"topics":["ai-tools","rss","rss-aggregator","rss-feed","summary"],"latest_commit_sha":null,"homepage":"https://infinitum.shawnxie.top","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shawnxie94.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-10T09:05:33.000Z","updated_at":"2026-06-23T06:33:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/shawnxie94/infinitum","commit_stats":null,"previous_names":["shawnxie94/infinitum"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/shawnxie94/infinitum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shawnxie94%2Finfinitum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shawnxie94%2Finfinitum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shawnxie94%2Finfinitum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shawnxie94%2Finfinitum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shawnxie94","download_url":"https://codeload.github.com/shawnxie94/infinitum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shawnxie94%2Finfinitum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34916411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-tools","rss","rss-aggregator","rss-feed","summary"],"created_at":"2026-05-07T08:02:10.405Z","updated_at":"2026-06-29T07:00:56.454Z","avatar_url":"https://github.com/shawnxie94.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](./imgs/infinitum.jpg)\n\n## Infinitum 是什么？\n\nInfinitum 是自托管的资讯聚合工作台，用来完成 RSS 抓取、正文补抓、AI 摘要分析、事件归组、AI 日报生成等信息处理。目标是对日益膨胀的个人信息流进行必要但保守的预处理，提高信息获取效率。\n\n![](./imgs/image.png)\n\n## 核心功能\n\n- **多源 RSS 同步与正文补全**：支持多源订阅、源级并发控制、每源处理上限；当 RSS 自带内容不足时，会按阈值自动抓取正文。\n\n![](./imgs/image-7.png)\n\n- **信息源与分组管理**：支持新增、编辑、删除信息源，自动解析 RSS 元数据；按分组筛选与排序，并支持 OPML 导入/导出。\n\n![](./imgs/image-12.png)\n\n- **源级处理开关**：每个信息源可独立控制启用状态、AI 解析、是否参与聚合与聚合检测。高噪声源可以继续保留在抓取范围内，但仅入库不参与后续聚合。\n\n![](./imgs/image-1.png)\n\n- **规则过滤与复核**：抓取阶段按黑名单、低信号标题、低信号 URL、正文质量等规则打分；被过滤的内容进入后台复核列表，可手动恢复、过滤或重新处理。\n\n![](./imgs/image-2.png)\n\n- **AI 摘要与分析**：支持标题翻译、摘要生成、内容质量判断、事件结构化分析；不同类型的 Prompt 可绑定不同的模型 API 配置。\n\n![](./imgs/image-4.png)\n\n- **事件归组**：把描述同一事件的多条内容合并为 cluster，先用事件签名做快速匹配，再交由 AI 判定；减少信息流中的重复噪声。\n\n![](./imgs/image-6.png)\n\n- **信息流浏览**：按系统收录时间、原文发布时间、来源、分组、标题关键词筛选；按时间或推荐评分排序；聚合内容与单条内容混合展示。\n\n![](./imgs/image-3.png)\n\n- **AI 日报**：基于当天候选内容生成结构化日报，支持草稿与发布状态切换、公开页面与 RSS 订阅、以及 Markdown 导出。\n\n![](./imgs/image-8.png)\n\n- **后台任务与观测**：Web 负责入队，Worker 负责异步执行；任务支持定时调度、监控、取消、重试、阶段耗时、AI 调用拆分、进度标签、任务时间线和最近运行记录。\n\n![](./imgs/image-11.png)\n\n![](./imgs/image-5.png)\n\n## 使用流程\n\n```mermaid\nflowchart LR\n    A[\"配置来源、模型和 Prompt\"] --\u003e B[\"Worker 拉取 RSS\"]\n    B --\u003e C[\"规则过滤与正文补抓\"]\n    C --\u003e D[\"AI 摘要与事件分析\"]\n    D --\u003e E[\"事件归组与摘要生成\"]\n    E --\u003e F[\"公开信息流与 RSS\"]\n    F --\u003e G[\"后台复核、监控与人工调整\"]\n    E --\u003e H[\"AI 日报生成\"]\n    H --\u003e J[\"发布为公开日报、RSS 与 Markdown 导出\"]\n```\n\n### RSS 阅读\n\nAndroid 手机端 RSS 阅读可使用 [readrops-lumina](https://github.com/shawnxie94/readrops-lumina)，[安装包](https://github.com/shawnxie94/readrops-lumina/releases)，支持快速采集内容到 [Lumina](https://github.com/shawnxie94/lumina)。\n\n![](./imgs/image-9.png)\n\n## 快速开始\n\n### Docker 部署\n\n```bash\ncp docker-compose.yml.example docker-compose.yml\ndocker compose pull\ndocker compose up -d\n```\n\nWorker 默认限制为 `0.50` 核，避免后台任务打满宿主机 CPU。需要调整时，在 compose 同目录的 `.env` 或 shell 环境中设置：\n\n```bash\nWORKER_CPUS=0.75\n```\n\n在 `docker-compose.yml` 中至少替换以下值：\n\n- `ADMIN_PASSWORD`：管理员登录密码\n- `ADMIN_SESSION_SECRET`：Session 签名密钥\n- `SITE_URL`：生产环境建议设置为实际访问域名，用于 RSS 中的站点与订阅链接\n\n启动后访问：\n\n- Web：\u003chttp://localhost:3001\u003e\n- 管理员登录：\u003chttp://localhost:3001/login\u003e\n- 管理后台：\u003chttp://localhost:3001/admin\u003e\n- AI 日报：\u003chttp://localhost:3001/daily\u003e\n\n### 本地开发\n\n```bash\nnpm install\ncp .env.example .env\nnpm run prisma:generate\nnpm run db:setup\n\nnpm run dev      # 终端 1：Next.js 开发服务\nnpm run worker   # 终端 2：后台任务 Worker\n```\n\n本地默认访问 \u003chttp://localhost:3000\u003e，管理后台登录入口 \u003chttp://localhost:3000/login\u003e。\n\n## FAQ\n\n### 为什么改了源码里的默认来源或提示词，线上没有变化？\n\n默认配置只在初始化阶段导入一次。系统启动并写入数据库后，运行以数据库中的配置为准，请通过后台设置页修改。\n\n### 为什么手动触发抓取后没有执行？\n\nWeb 只负责创建任务，真正执行抓取、AI 分析、归组和日报的是 Worker。请先确认 `worker` 服务在运行。\n\n```bash\ndocker compose ps\ndocker compose logs -f worker\n```\n\n### 为什么 Docker 启动后访问不了 `localhost:3000`？\n\n默认 Compose 端口映射是 `3001:3000`，宿主机应该访问 \u003chttp://localhost:3001\u003e。\n\n### 为什么后台可以打开，但信息流一直没有更新？\n\n通常有几类原因：\n\n- 没有可用的信息源配置\n- Worker 未运行或持续异常退出\n- 抓取调度未开启，且没有手动触发抓取\n- 模型 API 未配置，导致 AI 能力回退，但基础抓取不受影响\n- 来源内容没有变化，系统根据 RSS 缓存信息和内容哈希跳过了重复处理\n\n建议先查看：\n\n```bash\ndocker compose logs -f app worker\n```\n\n### 为什么日报没有生成？\n\n常见原因包括：当天候选内容不足、模型 API 未配置、模型返回未通过结构化校验、输入未变化时任务被跳过。可在任务监控页查看 `AI 日报生成` 任务的状态、错误信息和 AI 调用统计。\n\n## 友链\n\n[linux.do](https://linux.do/)\n\n## 许可证\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshawnxie94%2Finfinitum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshawnxie94%2Finfinitum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshawnxie94%2Finfinitum/lists"}