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

2025 年 12 月 22 日
 nfksuk
一个功能完善的 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 upgrade 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 配置
```
6754 次点击
所在节点    程序员
1 条回复
summerLast
2025 年 12 月 23 日
佬,咱做的思路很类似

https://github.com/weekend-project-space/ifeed

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/1180480

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX