开源 部署了一个 AI 版 rss 阅读器 接入 AI 优化 向量搜索 自定义抓取规则 支持 AI 整理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
nfksuk
V2EX    程序员

开源 部署了一个 AI 版 rss 阅读器 接入 AI 优化 向量搜索 自定义抓取规则 支持 AI 整理

  •  
  •   nfksuk 3 小时 32 分钟前 533 次点击
    一个功能完善的 RSS 订阅管理器,支持多用户、分类管理、定时抓取、自定义抓取规则以及 AI 翻译和摘要功能。

    github: https://github.com/inspoaibox/RSS-feed-manager

    ![]( https://telegraph-image-92x.pages.dev/file/8384ad8a1b5bdf291764f-7767f7ae8dfd15a4d7.png)

    ![]( https://telegraph-image-92x.pages.dev/file/c2021908651f43e59c121-9a254d668e9da19559.png)

    ![]( https://telegraph-image-92x.pages.dev/file/22193a747d4b489b699c6-66edfc0c9e8d47459d.png)

    ![]( https://telegraph-image-92x.pages.dev/file/676d1e8ca26b7a856b3c8-168aaf8991b0d9949c.png)

    ![]( https://telegraph-image-92x.pages.dev/file/b7e93b3740e6733d752d9-fa5d3855afe90c68d6.png)

    ![]( https://telegraph-image-92x.pages.dev/file/5c58615b17fec9039a64b-3ef641bde5d81c4ef1.png)

    ![]( https://telegraph-image-92x.pages.dev/file/12e9affa6e78c662896e6-038a85072b06e928bb.png)

    ![]( https://telegraph-image-92x.pages.dev/file/a116db02d21531fbea854-7c7330673cd66c8300.png)


    ## 功能特性

    - RSS/Atom 订阅源管理
    - 分类管理
    - 文章阅读(已读/未读、收藏)
    - 全文搜索和排序
    - 定时自动抓取(可设置 1 分钟 - 24 小时间隔)
    - Playwright 浏览器模式(支持 Cloudflare 保护的网站)
    - AI 自动翻译和整理(支持 OpenAI 、Gemini 及兼容 API )
    - **AI 智能内容分析**(语义搜索 + AI 总结)
    - 自定义抓取规则
    - OPML 导入导出
    - 配置备份恢复

    ## 技术栈

    | 后端 | 前端 |
    |------|------|
    | Python 3.11+ | React 18 |
    | FastAPI | TypeScript |
    | SQLAlchemy 2.0 | TailwindCSS |
    | Celery + Redis | React Query |
    | PostgreSQL + pgvector | Zustand |

    ## 快速开始

    ### 方式一:生产环境部署( Docker 一键启动,推荐)

    只需安装 Docker ,几条命令启动所有服务:

    ```bash
    # 1. 启动所有服务
    docker compose -f docker-compose.prod.yml up -d

    # 2. 初始化数据库(首次部署必须执行)
    docker exec -it rss_manager_backend alembic upgrade head
    ```

    启动后访问: http://localhost:5666

    包含的服务:
    - PostgreSQL 数据库
    - Redis 缓存
    - 后端 API
    - Celery 定时任务(自动抓取订阅源)
    - 前端界面

    停止服务:
    ```bash
    docker compose -f docker-compose.prod.yml down
    ```

    **更新代码后重新部署:**
    ```bash
    # 拉取最新代码后,重建并重启所有服务
    docker compose -f docker-compose.prod.yml up -d --build

    # 如果有数据库结构变更,执行迁移
    docker exec -it rss_manager_backend alembic upgrade head
    ```

    > 如果只重建单个服务(如 `--build backend`),需要同时重启 frontend ,否则 nginx 会因 DNS 缓存连接失败:
    > ```bash
    > docker compose -f docker-compose.prod.yml up -d --build backend
    > docker restart rss_manager_frontend
    > ```

    ### 方式二:开发环境( SQLite ,无需 Docker )

    适合本地开发调试,不支持定时抓取功能和 AI 语义搜索(会自动回退到关键词搜索)。

    **后端设置:**
    ```bash
    cd backend
    python -m venv venv
    .\venv\Scripts\activate # Linux/Mac: source venv/bin/activate
    pip install -e ".[dev]"
    copy .env.sqlite .env # Linux/Mac: cp .env.sqlite .env
    alembic upgrade head
    uvicorn app.main:app --reload
    ```

    **前端设置(新终端):**
    ```bash
    cd frontend
    npm install
    npm run dev
    ```

    访问: http://localhost:5173

    ### 方式三:开发环境 + 定时抓取(需要 Docker )

    使用 Docker 运行 PostgreSQL 和 Redis ,本地运行代码。

    **1. 启动数据库:**
    ```bash
    docker compose up -d postgres redis
    ```

    **2. 后端设置:**
    ```bash
    cd backend
    python -m venv venv
    .\venv\Scripts\activate
    pip install -e ".[dev]"
    copy .env.postgres .env
    alembic upgrade head
    uvicorn app.main:app --reload
    ```

    **3. 启动定时任务(新终端):**
    ```bash
    cd backend
    .\venv\Scripts\activate
    celery -A app.tasks.celery_app worker --loglevel=info --pool=solo
    ```

    **4. 启动调度器(新终端):**
    ```bash
    cd backend
    .\venv\Scripts\activate
    celery -A app.tasks.celery_app beat --loglevel=info
    ```

    **5. 前端设置(新终端):**
    ```bash
    cd frontend
    npm install
    npm run dev
    ```

    > Windows 上 Celery Worker 需要 `--pool=solo` 参数

    ## AI 智能内容分析

    AI 分析功能允许你使用自然语言查询订阅的文章内容,系统会通过语义搜索找到相关文章,并生成 AI 分析总结。

    ### 功能特点

    - **语义搜索**:基于 pgvector 向量数据库,理解查询意图而非简单关键词匹配
    - **AI 分析总结**:自动生成主题分类、关键点提取、趋势识别
    - **相关度排序**:按语义相似度排序,最相关的文章优先展示
    - **查询历史**:保存最近 10 条查询,支持快速重新执行
    - **智能回退**:当语义搜索不可用时,自动回退到关键词搜索

    ### 使用方法

    1. 在侧边栏点击「 AI 分析」进入分析页面
    2. 在搜索框输入自然语言查询,例如:
    - "Python 相关的技术文章"
    - "最近的 AI 发展趋势"
    - "前端框架对比"
    3. 点击「分析」按钮,等待 AI 处理
    4. 查看 AI 生成的分析总结和相关文章列表

    ### 技术要求

    - **数据库**:需要使用 PostgreSQL + pgvector (生产环境 Docker 配置已包含)
    - **AI 服务**:需要配置 OpenAI 或兼容的 AI 服务(用于生成 embedding 和分析)
    - **注意**:SQLite 开发模式不支持语义搜索,会自动回退到关键词搜索

    ### 配置 Embedding 模型

    1. 进入「设置 → AI 设置」
    2. 在「 Embedding 模型」区域选择 AI 渠道
    3. 输入 embedding 模型名称(如 `text-embedding-3-small`)
    4. 点击「保存 Embedding 配置」

    常用 Embedding 模型:
    - `text-embedding-3-small` - OpenAI 推荐,性价比高
    - `text-embedding-3-large` - 更高精度
    - `text-embedding-ada-002` - 旧版模型

    ### Embedding 生成

    文章的向量嵌入( embedding )通过 Celery 后台任务异步生成:
    - 需要先配置 Embedding 模型才能生成
    - 批量生成任务:`generate_embeddings_batch`(通过 Celery 调用)
    - embedding 生成失败不会影响文章保存,会自动回退到关键词搜索

    ## 定时任务说明

    | 任务 | 执行频率 | 说明 |
    |------|---------|------|
    | 订阅源刷新 | 每分钟检查 | 根据每个订阅源设置的同步间隔自动抓取 |
    | 自定义规则 | 每分钟检查 | 根据规则设置的间隔执行 |
    | 旧文章清理 | 每天凌晨 3 点 | 清理 90 天前的非收藏文章 |

    ## 默认配置

    **开发环境 (docker-compose.yml):**
    - PostgreSQL: 用户 `rss_manager`,密码 `rss_manager_password`
    - Redis: 无密码

    **生产环境 (docker-compose.prod.yml):**
    - PostgreSQL: 用户 `rss_manager`,密码 `rss_manager_prod_2024`
    - Redis: 密码 `redis_prod_2024`
    - JWT 密钥: `rss_manager_secret_key_2024_production`

    > 部署到公网服务器时,建议通过环境变量修改默认密码

    ## 注意事项

    ### 部署相关
    - 项目可以安装在任意目录,没有路径限制
    - 端口 5666 需要可用,如需修改请编辑 `docker-compose.prod.yml` 中的端口映射
    - 首次部署必须执行数据库迁移:`docker exec -it rss_manager_backend alembic upgrade head`
    - 首个注册的用户将自动成为管理员

    ### 更新部署
    - 修改后端代码(包括 Celery 任务)需要重建对应容器:
    ```bash
    # 重建所有服务(推荐)
    docker compose -f docker-compose.prod.yml up -d --build

    # 或只重建特定服务
    docker compose -f docker-compose.prod.yml up -d --build backend celery_worker celery_beat
    ```
    - 只重建 `backend frontend` 不会更新 Celery 定时任务
    - **数据库结构变更时**,必须执行迁移:
    ```bash
    docker exec -it rss_manager_backend alembic upgrad head
    ```

    ### 从旧版本升级(添加 AI 分析功能)
    如果你是从不支持 AI 分析的旧版本升级,需要执行以下步骤:
    ```bash
    # 1. 备份数据库(可选但推荐)
    docker exec rss_manager_postgres pg_dump -U rss_manager rss_manager > backup.sql

    # 2. 拉取最新代码
    git pull

    # 3. 重建所有服务( PostgreSQL 镜像已更换为支持 pgvector 的版本)
    docker compose -f docker-compose.prod.yml up -d --build

    # 4. 执行数据库迁移(添加 embedding 列和查询历史表)
    docker exec -it rss_manager_backend alembic upgrade head
    ```
    > 数据不会丢失,pgvector 镜像与原 PostgreSQL 镜像完全兼容

    ### 安全建议
    - 公网部署时务必修改默认密码(通过环境变量设置)
    - 建议使用反向代理(如 Nginx )并配置 HTTPS
    - 可以关闭注册功能(管理员在设置页面操作)

    ## 访问地址

    | 服务 | 地址 |
    |------|------|
    | 前端界面(生产) | http://localhost:5666 |
    | 前端界面(开发) | http://localhost:5173 |

    ## 项目结构

    ```
    ├── backend/ # Python FastAPI 后端
    │ ├── app/
    │ │ ├── api/ # API 路由
    │ │ ├── core/ # 核心配置
    │ │ ├── models/ # 数据模型
    │ │ ├── repositories/ # 数据访问层
    │ │ ├── schemas/ # Pydantic 模式
    │ │ ├── services/ # 业务逻辑
    │ │ ├── tasks/ # Celery 后台任务
    │ │ └── utils/ # 工具函数
    │ └── alembic/ # 数据库迁移
    ├── frontend/ # React 前端
    │ └── src/
    │ ├── components/ # UI 组件
    │ ├── pages/ # 页面组件
    │ ├── services/ # API 服务
    │ ├── stores/ # 状态管理
    │ └── types/ # TypeScript 类型
    ├── docker-compose.yml # 开发环境 Docker 配置
    └── docker-compose.prod.yml # 生产环境 Docker 配置
    ```
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2803 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:40 PVG 22:40 LAX 06:40 JFK 09:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86