[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5877":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":33,"discoverSource":34},5877,"infinitum","shawnxie94\u002Finfinitum","shawnxie94","基于RSS的资讯聚合工作台","https:\u002F\u002Finfinitum.shawnxie.top",null,"TypeScript",228,15,3,0,2,5,93,6,3.61,false,"main",true,[25,26,27,28,29],"ai-tools","rss","rss-aggregator","rss-feed","summary","2026-06-12 02:01:15","![](.\u002Fimgs\u002Finfinitum.jpg)\n\n## Infinitum 是什么？\nInfinitum 是基于 RSS 的资讯聚合工作台，用来完成 RSS 抓取、正文补抓、AI 摘要分析、事件归组、AI 日报生成等信息处理。目标是对日益膨胀的个人信息流进行必要但保守的预处理，提高信息获取效率。\n\n![](.\u002Fimgs\u002Fimage.png)\n\n## 核心功能\n- **RSS 抓取与正文补全**：支持多源 RSS 同步、源级并发控制、每源处理上限，并在 RSS 内容不足时按阈值自动补抓正文。\n\n![](.\u002Fimgs\u002Fimage-7.png)\n\n- **信息源与分组管理**：支持新增、编辑、删除信息源，自动解析 RSS 元数据，按来源分组筛选与排序，并支持 OPML 导入\u002F导出。\n\n![](.\u002Fimgs\u002Fimage-12.png)\n\n- **源级处理开关**：每个信息源可独立控制启用状态、AI 解析和是否参与聚合。高噪声源可以继续保留在抓取范围内，但不参与事件归组。\n\n![](.\u002Fimgs\u002Fimage-1.png)\n\n- **规则过滤与复核**：抓取阶段先执行黑名单、低信号标题、低信号 URL、正文质量等规则判断。被过滤内容进入后台复核列表，可手动恢复、过滤或重新处理。\n\n![](.\u002Fimgs\u002Fimage-2.png)\n\n- **AI 摘要与分析**：支持标题翻译、摘要生成、内容质量判断、事件结构化分析，并可为不同 Prompt 绑定不同模型 API 配置。\n\n![](.\u002Fimgs\u002Fimage-4.png)\n\n- **事件归组**：将描述同一事件的多条内容聚合为 cluster，支持基于事件签名的快速匹配和 AI 匹配，减少信息流重复噪声。\n\n![](.\u002Fimgs\u002Fimage-6.png)\n\n- **公开信息流浏览互动**：支持按系统收录时间、原文发布时间、来源、分组、标题关键词筛选，支持按时间或推荐评分排序，并混合展示聚合内容与单条内容。支持对聚合内容和单条内容投票，并输出公开 RSS。\n\n![](.\u002Fimgs\u002Fimage-3.png)\n\n- **AI 日报生成与微调**：支持基于当天候选内容生成结构化 AI 日报，针对不满意的部分可通过 AI 微调进行调整。\n\n![](.\u002Fimgs\u002Fimage-8.png)\n\n![](.\u002Fimgs\u002Fimage-10.png)\n\n- **后台任务体系与观测**：Web 负责入队，Worker 负责异步执行。任务支持定时调度、监控、取消、重试、异常恢复、阶段耗时、AI 调用拆分、进度标签、任务时间线和最近运行记录。\n\n![](.\u002Fimgs\u002Fimage-11.png)\n\n![](.\u002Fimgs\u002Fimage-5.png)\n\n## 使用流程\n\n```mermaid\nflowchart LR\n    A[\"配置来源、模型和 Prompt\"] --> B[\"Worker 拉取 RSS\"]\n    B --> C[\"规则过滤与正文补抓\"]\n    C --> D[\"AI 摘要与事件分析\"]\n    D --> E[\"事件归组与摘要生成\"]\n    E --> F[\"公开信息流与 RSS\"]\n    F --> G[\"后台复核、监控与人工调整\"]\n    E --> H[\"AI 日报生成\"]\n    H --> I[\"草稿复核、来源召回与 AI 微调\"]\n    I --> J[\"发布为公开日报、RSS 与 Markdown 导出\"]\n```\n\n### RSS 阅读\n\nAndroid 手机端 RSS 阅读可使用 [readrops-lumina](https:\u002F\u002Fgithub.com\u002Fshawnxie94\u002Freadrops-lumina), [安装包](https:\u002F\u002Fgithub.com\u002Fshawnxie94\u002Freadrops-lumina\u002Freleases)，支持快速采集内容到 [Lumina](https:\u002F\u002Fgithub.com\u002Fshawnxie94\u002Flumina)。\n\n![](.\u002Fimgs\u002Fimage-9.png)\n\n## 快速开始\n\n### 1. 配置 Compose\n\n使用已发布镜像部署时，复制 Compose 示例：\n\n```bash\ncp docker-compose.yml.example docker-compose.yml\n```\n\n然后在 `docker-compose.yml` 中至少替换以下值：\n\n- `ADMIN_PASSWORD`\n- `ADMIN_SESSION_SECRET`\n- `SITE_URL`：生产环境建议设置为实际访问域名，例如 `https:\u002F\u002Fyour-domain.example`，用于 RSS XML 中的站点与订阅链接\n\n如通过 HTTP 在可信内网访问，可将 `ADMIN_SESSION_COOKIE_SECURE` 改为 `\"false\"`。\n\n### 2. 启动服务\n\n使用已发布镜像部署：\n\n```bash\ndocker compose pull\ndocker compose up -d\n```\n\n### 3. 验证状态\n\n```bash\ndocker compose ps\ndocker compose logs -f app worker\n```\n\n默认访问地址：\n\n- Web：\u003Chttp:\u002F\u002Flocalhost:3001>\n- 管理员登录：\u003Chttp:\u002F\u002Flocalhost:3001\u002Flogin>\n- 管理后台：\u003Chttp:\u002F\u002Flocalhost:3001\u002Fadmin>\n- 内容管理：\u003Chttp:\u002F\u002Flocalhost:3001\u002Fadmin\u002Fcontent>\n- 系统设置：\u003Chttp:\u002F\u002Flocalhost:3001\u002Fadmin\u002Fsettings>\n- 任务监控：\u003Chttp:\u002F\u002Flocalhost:3001\u002Fadmin\u002Fmonitor>\n- AI 日报：\u003Chttp:\u002F\u002Flocalhost:3001\u002Fdaily>\n\n## 本地开发\n\n### 1. 安装依赖\n\n```bash\nnpm install\n```\n\n### 2. 准备环境变量\n\n```bash\ncp .env.example .env\n```\n\n默认本地环境变量：\n\n```env\nDATABASE_URL=\"file:.\u002Fprisma\u002Fdev.db\"\nADMIN_PASSWORD=\"change-me\"\nADMIN_SESSION_SECRET=\"replace-with-a-long-random-secret\"\n# SITE_URL=\"https:\u002F\u002Fyour-domain.example\"\n```\n\n### 3. 初始化数据库\n\n```bash\nnpm run prisma:generate\nnpm run db:setup\n```\n\n### 4. 启动 Web 和 Worker\n\n```bash\n# 终端 1\nnpm run dev\n\n# 终端 2\nnpm run worker\n```\n\n本地默认访问地址：\n\n- Web：\u003Chttp:\u002F\u002Flocalhost:3000>\n- 管理后台登录：\u003Chttp:\u002F\u002Flocalhost:3000\u002Flogin>\n\n## 常用命令\n\n```bash\nnpm run dev              # 启动 Next.js 开发服务\nnpm run worker           # 启动后台 Worker\nnpm run build            # 生产构建\nnpm run build:worker     # 构建 Worker 入口\nnpm run lint             # ESLint 检查\nnpm test                 # 运行测试并生成覆盖率\nnpm run db:setup         # 初始化或升级本地 SQLite 数据库\nnpm run db:test:setup    # 重置并初始化测试数据库\nnpm run prisma:generate  # 生成 Prisma Client\nnpm run prisma:migrate   # 执行 Prisma 开发迁移\n```\n\n## 运行配置\n\n首次启动会初始化，后续通过后台设置页维护：\n\n- **信息源**：RSS URL、站点 URL、所属分组、启用状态、AI 解析开关、参与聚合开关，支持 OPML 批量导入。\n- **来源分组**：创建、重命名、删除和排序，用于公开信息流筛选和后台管理。\n- **黑名单关键词**：命中后会在规则过滤阶段进入过滤列表。\n- **模型 API 配置**：支持 OpenAI 兼容接口、模型名、API Key、条目级 AI 并发、启用状态和默认模型选择。\n- **Prompt 配置**：支持条目摘要、条目分析、聚合摘要、聚合匹配、日报生成、日报微调对话、日报微调生成等 Prompt 类型，并可单独设置温度、Token 上限、Top P 和模型配置。\n- **抓取调度**：默认抓取任务开关、Cron 表达式、源抓取并发、正文补抓阈值、每源处理上限和处理开始时间点。\n- **日报调度**：AI 日报生成开关、Cron 表达式、候选内容数量、偏移天数、失败重试次数、自动发布开关和最近运行状态。\n- **清理调度**：文章自动清理开关、Cron 表达式和保留天数，用于控制长期运行时的数据体量。\n\n默认模型配置为空时：\n\n- 标题翻译会回退为原标题\n- 摘要会回退为 RSS 摘要或正文截断\n- 内容分析会回退为基础默认值\n- 事件归组会尽量使用已有结构化信息，无法判断时按单条内容展示\n- AI 日报需要可用模型配置；候选内容不足或模型无输出时不会生成有效日报\n- AI 日报微调需要可用模型配置；已发布日报需要先撤回为草稿后才能保存微调候选稿\n\n## FAQ\n\n### 为什么我改了源码里的默认来源或提示词，线上没有变化？\n\n因为默认值只在初始化阶段导入一次。系统启动并写入数据库后，后续运行以数据库中的配置为准，应通过后台设置页修改。\n\n### 为什么手动触发抓取后没有执行？\n\n先检查 `worker` 服务是否在运行：\n\n```bash\ndocker compose ps\ndocker compose logs -f worker\n```\n\nWeb 只负责创建任务，真正执行抓取、AI 分析、归组和日报生成的是 Worker。\n\n### 为什么调用 `\u002Fapi\u002Fingest\u002Frun` 返回 401？\n\n这个接口要求管理员登录态。请先访问 `\u002Flogin` 登录，再从页面操作或携带管理员会话调用接口。\n\n### 为什么 Docker 启动后访问不了 `localhost:3000`？\n\n因为默认 Compose 端口映射是 `3001:3000`，宿主机应该访问 \u003Chttp:\u002F\u002Flocalhost:3001>。\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自动处理会尽量跳过输入未变化的聚合摘要，减少重复 AI 调用；管理员手动触发的重新生成会保留强制重算语义，用于主动修正已有内容。\n\n### 为什么日报没有生成？\n\n常见原因包括：\n\n- 当天候选内容少于最低数量\n- 日报 Prompt 或模型 API 未配置\n- 模型返回内容未通过结构化校验\n- 已存在日报且输入内容没有变化，任务被跳过\n\n可在任务监控页查看 `AI 日报生成` 任务的状态、错误信息和 AI 调用统计。\n\n## 友链\n[linux.do](https:\u002F\u002Flinux.do\u002F)\n\n## 许可证\n\nCC BY 4.0 License\n","Infinitum 是一个基于 RSS 的资讯聚合工作台，旨在通过多源抓取、AI 摘要分析和事件归组等手段提高信息获取效率。其核心功能包括支持多源 RSS 同步与正文补全、信息源与分组管理、规则过滤与复核、AI 摘要生成与事件分析、事件归组以及 AI 日报生成等。技术上采用 TypeScript 编写，并利用了现代 Web 技术栈来实现高效的信息处理流程。该工具特别适合需要从大量 RSS 订阅中快速提取有价值信息的用户或团队使用，如新闻编辑、市场分析师或是对特定领域保持关注的专业人士。","2026-06-11 03:05:14","CREATED_QUERY"]