[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82106":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":16,"subscribersCount":16,"size":16,"stars1d":14,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":15,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},82106,"Dibao","Pls-1q43\u002FDibao","Pls-1q43","Local first, super low cost AI-powered personal RSS reader. \u002F 0.6B 模型可驱动的低成本 AI 个人 RSS 阅读器。","https:\u002F\u002Fdibao.app",null,"TypeScript",124,5,1,7,0,14,92,2.33,"Other",false,"main",[],"2026-06-12 02:04:23","\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fapps\u002Fweb\u002Fpublic\u002Flogo-192.png\" width=\"96\" height=\"96\" alt=\"Dibao logo\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">邸报 Dibao\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  把算法推荐放回你的 RSS 信源里。一个 source-available、fair-code、自托管、个人可控的 RSS 推荐阅读器。\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  Dibao is source-available, fair-code, and self-hostable under BUSL-1.1.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\".\u002FREADME.md\">中文\u003C\u002Fa> ·\n  \u003Ca href=\".\u002FREADME.ja.md\">日本語\u003C\u002Fa> ·\n  \u003Ca href=\".\u002FREADME.en.md\">English\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FPls-1q43\u002FDibao\">\u003Cimg alt=\"GitHub repository\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGitHub-Pls--1q43%2FDibao-111827?logo=github\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\".\u002Fcompose.yaml\">\u003Cimg alt=\"Docker Compose\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker_Compose-ready-2563eb?logo=docker&logoColor=white\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\".\u002Fdocs\u002Frelease-notes-v0.1.1.md\">\u003Cimg alt=\"Release notes\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Frelease_notes-v0.1.1-2f6f5e\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n---\n\n## 中文\n\n邸报 Dibao 是一个面向个人的 **自托管 RSS 阅读器、RSS 推荐系统、AI RSS reader、OPML 阅读器、PWA 阅读应用**。它不想再造一个内容平台，也不替你决定该订阅什么；你管理 RSS \u002F Atom 信源，邸报只在这些信源内部帮你排序、去重、搜索、解释推荐原因。\n\n如果你每天打开 RSS 都看到几百篇未读，时间线越来越像一堵墙；如果你不想把阅读历史交给广告平台，却又希望有“更懂我”的推荐；如果你希望推荐可以被追问、被调整、被迁移，邸报就是为这种阅读方式准备的。\n\n快速入口：\n\n- [它解决什么问题](#它解决什么问题)\n- [你会得到什么](#你会得到什么)\n- [支持项目](#支持项目)\n- [快速安装](#快速安装)\n- [推荐 Provider](#推荐-provider)\n- [备份与升级](#备份与升级)\n- [许可证](#许可证)\n- [常见问题](#常见问题)\n- [发布说明](.\u002Fdocs\u002Frelease-notes-v0.1.1.md)\n- [Roadmap](.\u002Fdocs\u002Froadmap.md)\n\n### 它解决什么问题\n\n传统 RSS 把所有文章按时间堆在一起。平台推荐会替你扩大信息来源，也会把阅读数据留在平台里。邸报选择中间路线：\n\n- **信源归你**：只整理你订阅的 RSS \u002F Atom，不引入陌生信息流。\n- **排序帮你**：从“最新”里筛出更值得先看的文章，让未读列表更像一张可复核的日报。\n- **解释给你**：每篇推荐都能看到原因，例如主题相近、来源稳定、时间新鲜、与你最近的阅读反馈有关。\n- **数据留给你**：数据库在你的本地持久化目录、NAS、家用服务器或 VPS 上。\n- **失败可恢复**：订阅源抓取失败、provider 不可用、索引需要重建时，界面会给出状态和恢复入口。\n\n### 你会得到什么\n\n| 场景 | 邸报怎么帮你 |\n| --- | --- |\n| 每天未读太多 | 首页按推荐理由排序，也保留传统 latest 时间线。 |\n| 不想错过重要来源 | 订阅源健康诊断会显示失败、停用、长时间未成功的 feed。 |\n| 想整理旧订阅 | OPML 导入导出、分组、手动添加 RSS \u002F Atom 地址。 |\n| 想稍后再看 | 收藏、稍后读、已读、未读筛选和清账。 |\n| 想知道为什么推荐 | 每篇推荐文章都有解释入口，不只是一个黑盒分数。 |\n| 想用免费或低成本模型 | 可接入硅基流动、Gemini、Ollama 或其他 OpenAI-compatible embedding provider。 |\n| 想在手机上用 | 支持 PWA 安装到主屏幕；离线时能打开应用壳。 |\n\n当前不做：多用户团队协作、官方托管、社交关注、评论转发、平台外内容推荐、云同步、离线全文文章库。\n\n### 支持项目\n\n如果邸报对你有帮助，欢迎使用微信扫码赞赏，支持项目继续维护。\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fdocs\u002Fassets\u002Fwechat-donation.jpg\" alt=\"微信赞赏码\" width=\"320\" \u002F>\n\u003C\u002Fp>\n\n### 快速安装\n\n推荐用 Docker Compose 运行。把下面内容保存为 `compose.yaml`：\n\n```yaml\nname: dibao\n\nservices:\n  dibao:\n    image: ghcr.io\u002Fpls-1q43\u002Fdibao:latest\n    restart: unless-stopped\n    ports:\n      - \"8080:8080\"\n    environment:\n      DIBAO_HOST: 0.0.0.0\n      DIBAO_PORT: \"8080\"\n      DIBAO_DATABASE_PATH: \u002Fdata\u002Fdibao.sqlite\n      DIBAO_COOKIE_SECURE: \"false\"\n    volumes:\n      - .\u002Fdata:\u002Fdata\n```\n\n启动：\n\n```bash\ndocker compose up -d\n```\n\n打开 `http:\u002F\u002Flocalhost:8080`，创建用户名和密码，然后导入 OPML 或添加第一个 RSS \u002F Atom 地址。\n\n如果你从源码构建当前仓库：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FPls-1q43\u002FDibao.git\ncd dibao\ndocker compose up --build -d\n```\n\n### 推荐 Provider\n\n邸报没有强制绑定任何 AI 服务。你可以先跳过 provider，只用基础排序；也可以接入本地模型、免费额度或免费层的 embedding provider，让推荐更像“按你的兴趣整理过的 RSS”。\n\n怎么选，先看邸报部署在哪里：\n\n| 你的部署方式 | 推荐选择 | 原因与参数 |\n| --- | --- | --- |\n| 本地 MacBook、Mac mini、Windows 台式机 \u002F 笔记本 | **Ollama 本地模型** | 本地电脑通常比小 VPS 更适合跑 embedding：不花 API 钱，阅读数据不出本机，首次索引慢一点也可以接受。推荐模型：`bge-m3`；Dimension：`1024`。 |\n| 家用 NAS 或低功耗小主机 | **优先外部 provider** | 如果 CPU 较弱、内存紧张，embedding 会拖慢设备。建议直接用[硅基流动](https:\u002F\u002Fcloud.siliconflow.cn\u002Fi\u002F4wjbYmMH)或 Gemini；如果设备接近桌面级 CPU 且内存充足，再考虑 Ollama。 |\n| VPS >= `4 vCPU \u002F 8GB RAM` | **可以用 Ollama CPU** | 可接受后台慢慢生成 embedding 的话，用 `bge-m3`；如果文章很多或机器还跑别的服务，仍建议外部 provider。 |\n| VPS \u003C `4 vCPU \u002F 8GB RAM` | **[硅基流动](https:\u002F\u002Fcloud.siliconflow.cn\u002Fi\u002F4wjbYmMH)或 Gemini** | 1-2 vCPU、1-4GB RAM 的 VPS 更适合把 embedding 交给 API，避免首次 backfill 和后续刷新挤占服务器资源。 |\n\n本地 Ollama 推荐配置：\n\n```bash\nollama pull bge-m3\n```\n\n| 字段 | 填写 |\n| --- | --- |\n| 类型 | `Ollama` |\n| Base URL | Docker Desktop 上通常填 `http:\u002F\u002Fhost.docker.internal:11434`；非 Docker 同机运行可填 `http:\u002F\u002F127.0.0.1:11434` |\n| Model | `bge-m3` |\n| Dimension | `1024` |\n\n`bge-m3` 是目前更适合邸报默认推荐的本地模型：模型不算大，Ollama 上约 567M 参数，兼顾中文、日文、英文等多语言 RSS；没有必要一开始就上更大的 embedding 模型。只想更轻、更快时，可以把模型换成 `nomic-embed-text`，Dimension 填 `768`。\n\n外部免费 \u002F 低成本 provider 推荐：\n\n| Provider | 适合谁 | 邸报里怎么填 |\n| --- | --- | --- |\n| [硅基流动 SiliconFlow](https:\u002F\u002Fcloud.siliconflow.cn\u002Fi\u002F4wjbYmMH) | 国内访问更方便，支持 OpenAI-compatible API。优先推荐 `BAAI\u002Fbge-m3`：免费，没有日额度上限，按 RPM \u002F TPM 限速；当前 L0 级别为 2,000 RPM、500,000 TPM。 | 类型：`OpenAI-compatible`\u003Cbr>Base URL：`https:\u002F\u002Fapi.siliconflow.cn\u002Fv1`\u003Cbr>Model：`BAAI\u002Fbge-m3`\u003Cbr>Dimension：`1024`\u003Cbr>API Key：硅基流动控制台创建 |\n| Gemini | 有 Google AI Studio \u002F Gemini API key，想用 Google 免费层。Gemini embedding 也是免费的，免费层适合日常个人 RSS；按每天约 1,000 次请求规划更稳妥。 | 类型：`OpenAI-compatible`\u003Cbr>Base URL：`https:\u002F\u002Fgenerativelanguage.googleapis.com\u002Fv1beta\u002Fopenai\u002F`\u003Cbr>Model：`gemini-embedding-001`\u003Cbr>Dimension：`768`\u003Cbr>API Key：Google AI Studio 创建 |\n\n配置入口：`设置` -> `推荐 provider` -> 选择 `OpenAI-compatible` -> 填入 Base URL、Model、Dimension、API Key -> `测试连接`。\n\n注意：\n\n- 免费额度、免费层、模型价格、限速和可用地区会变化，请以 [Ollama bge-m3](https:\u002F\u002Follama.com\u002Flibrary\u002Fbge-m3)、[硅基流动模型与文档](https:\u002F\u002Fdocs.siliconflow.cn\u002Fcn\u002Fapi-reference\u002Fembeddings\u002Fcreate-embeddings) 和 [Gemini API pricing](https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing) 当前页面为准。\n- 更换模型或维度后，需要重新生成 embedding。邸报会保留旧阅读数据，但不同模型的向量不能直接混用。\n- Provider 不可用时，邸报仍可阅读 RSS，只是推荐会退回基础排序。\n\n### 日常使用\n\n1. 导入 OPML 或添加 RSS \u002F Atom 地址。\n2. 在 `推荐` 看今天优先阅读的文章，在 `最新` 保留传统时间线。\n3. 用收藏、稍后读、已读、不感兴趣来调整后续排序。\n4. 对未读债务执行清账：全部、24 小时前、7 天前或 30 天前。\n5. 在订阅源管理里查看失败源、重试刷新、调整分组或导出 OPML。\n\n清账是阅读命令，不会被当成喜欢或推荐正反馈；收藏和稍后读也不会被清掉。\n\n### PWA 安装\n\n- Android Chrome \u002F Edge：浏览器菜单 -> 安装应用 \u002F 添加到主屏幕。\n- iOS Safari：分享 -> 添加到主屏幕。\n- Desktop Chrome \u002F Edge：地址栏安装按钮，或浏览器菜单 -> 安装。\n\n`localhost` \u002F `127.0.0.1` 通常可直接安装。局域网 IP 或公网域名建议使用 HTTPS；如果放在 HTTPS 反向代理后，把 `DIBAO_COOKIE_SECURE` 设为 `true`。\n\n### 备份与升级\n\n邸报默认把数据放在 `compose.yaml` 同目录下的持久化文件夹：\n\n```text\n.\u002Fdata:\u002Fdata\n.\u002Fdata\u002Fdibao.sqlite\n```\n\n升级前建议备份：\n\n```bash\ndocker compose stop\ntar czf dibao-data-backup.tgz -C data .\ndocker compose up -d\n```\n\n升级发布镜像时，修改 `compose.yaml` 里的 image tag，然后运行：\n\n```bash\ndocker compose pull\ndocker compose up -d\ndocker compose ps\n```\n\n数据库迁移会在启动时自动执行。升级后打开 `http:\u002F\u002Flocalhost:8080\u002Fapi\u002Fsystem\u002Fhealth`，返回 `ok: true` 即表示基础健康检查通过。\n\n### 许可证\n\nDibao 采用 [Business Source License 1.1](.\u002FLICENSE.md)（`BUSL-1.1`）实现 source-available \u002F fair-code \u002F delayed open source 模式。BUSL-1.1 不是 OSI 意义上的开源许可证；每个公开发布版本会在首次公开发布 4 年后的 Change Date 自动变更为 [Apache License 2.0](.\u002FLICENSE-APACHE-2.0.md)（`Apache-2.0`）。\n\n个人、家庭、非商业、研究、评估、学习用途，以及公司 \u002F 机构 \u002F 组织内部自托管使用，均可免费使用、修改、自托管和生产使用 Dibao。有偿部署、咨询、培训、迁移和运维支持也被允许，但客户获得的必须是部署在客户自有环境、客户自有账号或客户控制基础设施中的 Dibao 实例。\n\n未经项目维护者单独商业授权，不得提供收费托管、SaaS、Managed Service、Cloud Service、白标、转售、竞争性商业产品，或任何以 Dibao \u002F 修改版 Dibao 为核心能力的商业 RSS 阅读服务、信息流推荐服务、AI 阅读 \u002F 摘要服务、内容聚合平台或知识流产品。商业授权联系：[https:\u002F\u002Fdibao.app](https:\u002F\u002Fdibao.app)。具体 Release Date 和 Change Date 以对应 release tag 中冻结的 `LICENSE.md` 为准；`main` 分支只代表当前开发版。中文说明见 [许可证 FAQ](.\u002Fdocs\u002Flicense-faq.md)。\n\n### 常见问题\n\n**没有 Provider 可以用吗？**\n\n可以。邸报仍然是一个自托管 RSS 阅读器，可以导入 OPML、刷新 feed、阅读、收藏、搜索和清账。Provider 只是让推荐更聪明。\n\n**Provider 测试失败怎么办？**\n\n检查 Base URL、模型名、维度、API Key 是否匹配。硅基流动建议先用免费的 `BAAI\u002Fbge-m3` 和 `1024` 维；Gemini 建议先用 `gemini-embedding-001` 和 `768` 维。\n\n**局域网 HTTP 登录后没有保持会话？**\n\n确认 `DIBAO_COOKIE_SECURE=false`。只有 HTTPS 反向代理后才建议设为 `true`。\n\n**Feed 刷新失败怎么办？**\n\n进入订阅源管理查看错误原因。常见原因包括 feed 地址失效、目标站点拒绝访问、XML 格式异常、网络超时。\n\n**邸报会推荐我没订阅的内容吗？**\n\n不会。邸报只在你明确添加的 RSS \u002F Atom 信源中排序和推荐。\n\n\u003Cdetails>\n\u003Csummary>维护者与开发者信息\u003C\u002Fsummary>\n\n常用环境变量：\n\n| 变量 | 默认值 | 说明 |\n| --- | --- | --- |\n| `DIBAO_HOST` | `0.0.0.0` | Server 监听地址。 |\n| `DIBAO_PORT` | `8080` | Server 监听端口。 |\n| `DIBAO_DATABASE_PATH` | `\u002Fdata\u002Fdibao.sqlite` | SQLite 数据库路径。 |\n| `DIBAO_COOKIE_SECURE` | `false` | HTTP\u002FLAN 自托管可保持 `false`；HTTPS 反向代理后建议设为 `true`。 |\n| `DIBAO_BACKGROUND_JOBS` | `true` | 可设为 `false` 关闭后台 job runner，主要用于测试。 |\n| `DIBAO_FETCH_TIMEOUT_MS` | `15000` | RSS、发现、全文抓取的单次请求超时。 |\n| `DIBAO_FETCH_FEED_MAX_BYTES` | `5242880` | RSS\u002F发现响应最大读取字节数。 |\n| `DIBAO_FETCH_FULL_CONTENT_MAX_BYTES` | `3145728` | 全文抓取响应最大读取字节数。 |\n| `DIBAO_AUTH_MAX_FAILED_ATTEMPTS` | `5` | 同一用户名\u002FIP 组合允许的连续登录失败次数；设为 `0` 可关闭限速。 |\n| `DIBAO_AUTH_LOCKOUT_MS` | `900000` | 登录失败达到阈值后的冷却时间；设为 `0` 可关闭限速。 |\n| `DIBAO_SENTRY_CONFIG` | 未设置 | 可选，指向私有 Sentry 构建配置 JSON。默认读取被忽略的 `config\u002Fsentry.json`；示例见 [config\u002Fsentry.example.json](.\u002Fconfig\u002Fsentry.example.json)。 |\n| `DIBAO_SENTRY_DSN` | 未设置 | 可选，覆盖私有 Sentry 配置中的 DSN。未设置 DSN 时，遥测开关仍显示，但 Sentry SDK 不会初始化。 |\n| `SENTRY_AUTH_TOKEN` | 未设置 | 可选，仅用于前端生产构建上传 source maps。默认不会上传；必须同时设置 `DIBAO_SENTRY_UPLOAD_SOURCEMAPS=1`。 |\n| `DIBAO_SENTRY_UPLOAD_SOURCEMAPS` | `0` | 设为 `1` 时，且存在 Sentry org\u002Fproject\u002Fauth token，生产构建才会生成并上传 source maps。 |\n\n开发命令：\n\n```bash\nnpm install\nnpm run typecheck\nnpm test\nnpm run build\nnpm run spike:sqlite-vec\nnpm run dev:server\nnpm run dev:web\n```\n\nE2E smoke：\n\n```bash\nnpm run e2e:install\nnpm run e2e\n```\n\n推荐链和 Docker 验证：\n\n```bash\nnpm run perf:recommendation\ndocker build -t dibao:local .\ndocker compose config\nnpm run smoke:docker-recommendation\n```\n\n参考文档：\n\n- [工程蓝图](.\u002Fdocs\u002Fengineering-blueprint.md)\n- [数据库 Schema](.\u002Fdocs\u002Fdatabase-schema.md)\n- [API Contract](.\u002Fdocs\u002Fapi-contract.md)\n- [Profile Algorithm v0 参数表](.\u002Fdocs\u002Fprofile-algorithm-v0.md)\n- [sqlite-vec Node.js 集成验证](.\u002Fdocs\u002Fspikes\u002Fsqlite-vec-node.md)\n- [Ollama 测试指南](.\u002Fdocs\u002Fuser-testing-ollama.md)\n\n\u003C\u002Fdetails>\n","邸报 Dibao 是一个低成本、AI 驱动的个人 RSS 阅读器，旨在通过智能排序和推荐来优化用户的阅读体验。该项目利用 0.6B 模型为用户提供个性化的文章推荐，并支持自托管以确保数据隐私与安全。其核心功能包括在用户订阅的 RSS\u002FAtom 信源中进行内容排序、去重及搜索，同时提供每条推荐的具体原因，增强透明度。此外，Dibao 还具备 OPML 导入导出、分组管理等功能，适用于那些希望在保持信息来源可控的同时享受智能化推荐服务的读者。无论是每天面对大量未读文章感到困扰，还是对现有平台的数据处理方式有所顾虑，Dibao 都能作为一个理想的选择来改善日常的信息消费流程。",2,"2026-06-11 04:07:46","CREATED_QUERY"]