版本:v1.0
日期:2026-06-15
配套文档:rss-platform-design.md
一、总体策略
1.1 开发原则
| 原则 |
说明 |
| 渐进式重构 |
不是一次性推翻重写,而是逐步迁移现有能力 |
| 先跑通再优化 |
先让核心流程(抓取→清洗→AI→存储)跑起来,再扩展高级功能 |
| 数据先行 |
先确定数据模型和迁移方案,再写业务逻辑 |
| 可回滚 |
每个阶段都保留回退到旧系统的能力 |
| 测试护航 |
关键模块必须有单元测试和接口测试 |
1.2 阶段划分
二、阶段一:基础骨架(Week 1-5)
目标
搭建可运行的基础平台,完成数据库迁移、Docker 环境、用户鉴权、基础 API。
任务清单
Week 1:项目初始化与技术选型确认
| 任务 |
说明 |
产出 |
| 2.1.1 创建 monorepo |
在 /home/congsh/workspace/dev/rss-platform 初始化项目 |
README.md、Makefile、docker-compose.yml |
| 2.1.2 确定目录结构 |
按模块划分目录 |
见下方目录结构 |
| 2.1.3 选择并锁定依赖版本 |
Python 3.12、FastAPI、SQLAlchemy 2.0、Celery、PostgreSQL、Redis |
backend/requirements.txt |
| 2.1.4 配置代码质量工具 |
ruff、black、pytest、pre-commit |
.pre-commit-config.yaml、pyproject.toml |
| 2.1.5 创建 Docker 基础镜像 |
后端、前端、PostgreSQL、Redis、MinIO |
Dockerfile、docker-compose.dev.yml |
推荐目录结构:
Week 2:PostgreSQL 数据模型与迁移
| 任务 |
说明 |
产出 |
| 2.2.1 设计并创建核心表 |
users、feeds、raw_articles、cleaned_articles、article_references、skills 等 |
backend/app/models/ |
| 2.2.2 配置 Alembic |
初始化迁移工具 |
alembic.ini、baseline migration |
| 2.2.3 编写 SQLite → PostgreSQL 迁移脚本 |
从 rssKeeper + dataClean 导出并导入 |
scripts/migrate_from_sqlite.py |
| 2.2.4 验证迁移数据完整性 |
对比条数、关键字段抽样 |
迁移报告 |
| 2.2.5 配置 pgvector 扩展 |
安装并创建向量表 |
article_embeddings 表 |
Week 3:FastAPI 基础与鉴权
| 任务 |
说明 |
产出 |
| 2.3.1 FastAPI 项目骨架 |
lifespan、中间件、异常处理、日志 |
backend/main.py |
| 2.3.2 JWT 鉴权 |
登录、注册、Token 刷新、API Key |
backend/app/core/auth.py |
| 2.3.3 简单 RBAC |
admin / member 角色 |
backend/app/core/rbac.py |
| 2.3.4 CORS 安全配置 |
白名单、关闭 credentials |
backend/main.py |
| 2.3.5 健康检查与 OpenAPI |
/health、/openapi.json |
API 文档 |
Week 4:配置中心与锁服务
| 任务 |
说明 |
产出 |
| 2.4.1 配置中心 |
环境变量 + DB 覆盖 + 版本化 |
backend/app/core/settings.py |
| 2.4.2 Redis 连接 |
缓存、锁、消息队列 |
backend/app/core/redis.py |
| 2.4.3 分布式锁服务 |
任务锁、文章锁 |
backend/app/services/lock_service.py |
| 2.4.4 任务运行时状态 |
进度追踪、任务日志 |
backend/app/services/task_runtime.py |
| 2.4.5 日志与请求 ID |
结构化日志、request_id |
backend/app/core/logging.py |
Week 5:前端基础与管理后台
| 任务 |
说明 |
产出 |
| 2.5.1 Vue 3 + TS 项目初始化 |
Vite、Element Plus、Pinia、Vue Router |
frontend/ |
| 2.5.2 登录页 |
JWT 登录、API Key 管理 |
LoginView.vue |
| 2.5.3 RSS 源管理页 |
列表、添加、编辑、删除 |
FeedsView.vue |
| 2.5.4 文章列表页 |
分页、筛选 |
ArticlesView.vue |
| 2.5.5 Docker Compose 联调 |
全栈本地启动 |
docker-compose.yml |
阶段一交付物
阶段一里程碑
M1:基础平台骨架完成,可管理 RSS 源和查看文章列表。
三、阶段二:核心流程(Week 6-10)
目标
实现抓取→清洗→去重→AI 处理→存储的完整流水线。
任务清单
| 任务 |
说明 |
产出 |
| 3.6.1 迁移抓取逻辑 |
从 rssKeeper rss_fetcher.py 迁移 |
backend/app/services/feed_fetcher.py |
| 3.6.2 Celery 抓取任务 |
fetch_feed_task、fetch_all_feeds_task |
backend/app/tasks/feeds.py |
| 3.6.3 Celery Beat 调度 |
按 Feed 间隔注册定时任务 |
backend/app/tasks/scheduler.py |
| 3.6.4 抓取失败重试 |
指数退避、死信队列 |
重试装饰器 |
| 3.6.5 Feed 健康度统计 |
复用 rssKeeper 逻辑 |
backend/app/services/health_checker.py |
Week 7:清洗流水线
| 任务 |
说明 |
产出 |
| 3.7.1 数据标准化 |
URL 规范化、HTML 清洗、时间标准化 |
backend/app/services/normalizer.py |
| 3.7.2 正文提取 |
优先 RSS content,fallback 原文页 |
backend/app/services/content_extractor.py |
| 3.7.3 清洗任务 Celery 化 |
process_raw_article_task |
backend/app/tasks/pipeline.py |
| 3.7.4 内容 hash 与语言检测 |
用于后续去重 |
辅助字段 |
| 3.7.5 清洗状态机 |
pending → processing → cleaned / failed |
processing_status |
Week 8:去重插件系统
| 任务 |
说明 |
产出 |
| 3.8.1 定义插件接口 |
DeduplicationPlugin |
backend/app/plugins/base.py |
| 3.8.2 实现默认去重插件 |
URL + 标题 exact + TF-IDF 内容相似 |
plugins/deduplication/current.py |
| 3.8.3 插件加载器 |
动态 import + 热加载 |
backend/app/plugins/loader.py |
| 3.8.4 引用关系写入 |
article_references + reference_links |
去重服务 |
| 3.8.5 去重任务接口 |
手动触发、查看结果 |
/api/tasks/deduplicate |
| 3.8.6 插件版本元数据 |
metadata.json |
版本管理 |
Week 9:AI 处理中心
| 任务 |
说明 |
产出 |
| 3.9.1 AI Provider 配置模型 |
openai / anthropic / gemini / local |
backend/app/models/ai_provider_config.py |
| 3.9.2 AI 任务配置模型 |
每个任务独立配置 |
backend/app/models/ai_task_config.py |
| 3.9.3 LiteLLM/自封装多供应商路由 |
统一调用接口 |
backend/app/ai/client.py |
| 3.9.4 AI 摘要任务 |
复用 dataClean summarizer.py |
backend/app/tasks/ai_tasks.py |
| 3.9.5 AI 分类任务 |
从规则分类迁移到 AI 分类 |
backend/app/tasks/ai_tasks.py |
| 3.9.6 AI Tag 任务 |
AI 打标签 |
backend/app/tasks/ai_tasks.py |
| 3.9.7 AI 打分任务 |
heat/importance/composite |
backend/app/tasks/ai_tasks.py |
Week 10:流水线编排与任务调度
| 任务 |
说明 |
产出 |
| 3.10.1 流水线编排器 |
组合抓取→清洗→去重→AI 处理 |
backend/app/services/pipeline_orchestrator.py |
| 3.10.2 任务进度追踪 |
复用 dataClean task_progress.py |
backend/app/services/task_progress.py |
| 3.10.3 手动/定时任务互斥 |
Redis 锁 + Celery |
调度服务 |
| 3.10.4 仪表盘统计 API |
文章数、分类分布、任务状态 |
/api/stats |
| 3.10.5 前端仪表盘 |
统计卡片、任务进度 |
DashboardView.vue |
阶段二交付物
阶段二里程碑
M2:核心流程跑通,一篇文章从 RSS 抓取到 AI 处理完成可自动化执行。
四、阶段三:产出与聊天(Week 11-14)
目标
实现 Skill 系统、日报任务、聊天窗口、引用链接。
任务清单
Week 11:Skill 系统基础
| 任务 |
说明 |
产出 |
| 4.11.1 Skill 数据模型 |
skills、skill_versions |
数据库表 |
| 4.11.2 Skill 加载与执行 |
解析 prompt、schema、tools |
backend/app/skills/loader.py |
| 4.11.3 内置默认 Skills |
摘要、分类、Tag、打分、日报、聊天 |
backend/app/skills/defaults/ |
| 4.11.4 Skill CRUD API |
创建、修改、导入、导出、恢复默认 |
/api/skills/* |
| 4.11.5 Skill 管理前端 |
编辑器、导入导出 |
SkillsView.vue |
Week 12:日报任务系统
| 任务 |
说明 |
产出 |
| 4.12.1 OutputTask 模型 |
task + skill + filter + schedule |
数据库表 |
| 4.12.2 日报生成任务 |
复用 dataClean brief.py,改为 Skill 驱动 |
backend/app/tasks/output_tasks.py |
| 4.12.3 数据筛选 DSL |
时间、分类、Tag、分数过滤 |
Filter builder |
| 4.12.4 多种日报类型 |
科技观察、综合日报等 |
多个 OutputTask |
| 4.12.5 日报前端 |
列表、详情、重新生成 |
BriefsView.vue |
Week 13:聊天引擎
| 任务 |
说明 |
产出 |
| 4.13.1 聊天数据模型 |
sessions、messages |
数据库表 |
| 4.13.2 聊天 API |
创建会话、发送消息、历史记录 |
/api/chat/* |
| 4.13.3 Tool 调用框架 |
搜索文章、获取文章详情、调用外部 API |
backend/app/chat/tools.py |
| 4.13.4 引用链接解析 |
从 AI 输出提取标记并映射链接 |
backend/app/chat/references.py |
| 4.13.5 聊天前端 |
对话界面、引用渲染 |
ChatView.vue |
Week 14:工具与产出集成
| 任务 |
说明 |
产出 |
| 4.14.1 外部 API Tool |
调用用户配置的 HTTP API |
fetch_external_api tool |
| 4.14.2 产出导出 |
Markdown、JSON、邮件 |
backend/app/services/exporters.py |
| 4.14.3 聊天中运行 Skill |
用户选择 Skill 进行专项对话 |
Skill selector |
| 4.14.4 会话上下文管理 |
窗口大小、历史摘要 |
Context manager |
| 4.14.5 集成测试 |
端到端聊天流程 |
tests/test_chat.py |
阶段三交付物
阶段三里程碑
M3:平台具备 AI 产出能力,日报和聊天均可调用 Skills 生成带引用链接的内容。
五、阶段四:自优化与工业化(Week 15-18)
目标
实现每日凌晨 2 点自优化、去重算法自优化、监控、备份、日志。
任务清单
Week 15:自优化调度器
| 任务 |
说明 |
产出 |
| 5.15.1 自优化数据收集 |
收集最近执行样例、历史优化记录 |
backend/app/optimization/collector.py |
| 5.15.2 Prompt/Skill 优化器 |
用 AI 评审并生成候选 Prompt |
backend/app/optimization/prompt_optimizer.py |
| 5.15.3 优化器自评逻辑 |
候选 vs 当前版本评分 |
评估服务 |
| 5.15.4 自动发布机制 |
保存新版本、自动生效 |
发布服务 |
| 5.15.5 优化日志 |
optimization_logs 表 + API |
留痕 |
Week 16:去重算法自优化
| 任务 |
说明 |
产出 |
| 5.16.1 去重算法优化器 |
分析样例生成候选算法代码 |
backend/app/optimization/dedup_optimizer.py |
| 5.16.2 算法版本备份 |
自动生成 .bak |
版本管理 |
| 5.16.3 算法热加载与回滚 |
失败自动回滚 |
插件加载器增强 |
| 5.16.4 算法性能评估 |
运行时间、内存、误判漏判 |
评估服务 |
| 5.16.5 手动回滚 API |
/api/admin/deduplication/rollback |
管理接口 |
Week 17:监控与可观测性
| 任务 |
说明 |
产出 |
| 5.17.1 Prometheus 指标 |
任务数、AI 调用数、延迟、失败率 |
/metrics |
| 5.17.2 Grafana 仪表盘 |
系统状态、任务状态、AI 成本 |
docker/grafana/ |
| 5.17.3 Sentry 集成 |
错误追踪 |
配置 |
| 5.17.4 日志聚合 |
Loki 或文件日志 |
日志配置 |
| 5.17.5 告警规则 |
任务失败、AI 调用异常 |
Alert rules |
Week 18:备份、安全与部署
| 任务 |
说明 |
产出 |
| 5.18.1 PostgreSQL 自动备份 |
每日备份、保留策略 |
scripts/backup_db.sh |
| 5.18.2 对象存储备份 |
插件、导出产物备份 |
备份脚本 |
| 5.18.3 安全加固 |
API 限流、密码策略、敏感配置加密 |
安全文档 |
| 5.18.4 生产 Docker Compose |
多 Worker 配置 |
docker-compose.prod.yml |
| 5.18.5 部署文档 |
完整部署步骤 |
docs/deployment.md |
阶段四交付物
阶段四里程碑
M4:平台具备工业化能力,可无人值守运行并自动优化。
六、阶段五:规模化与持续优化(Week 19+)
目标
根据实际数据量和负载进行性能优化和架构扩展。
任务清单
| 任务 |
说明 |
时机 |
| 6.1 迁移到 OpenSearch |
当 PG tsvector 性能不足时 |
10万+ 文章 |
| 6.2 向量检索优化 |
使用专用向量库(Qdrant/Milvus) |
需要语义检索时 |
| 6.3 去重算法升级 |
LSH/MinHash/Embedding |
日增 5000+ 时 |
| 6.4 数据库读写分离 |
主从复制 |
读压力高时 |
| 6.5 按时间分库 |
历史数据归档 |
50万+ 文章 |
| 6.6 服务拆分 |
拆分为 feed-service、ai-service 等 |
团队扩大时 |
| 6.7 缓存层优化 |
Redis 缓存热门查询、文章 |
读压力大时 |
| 6.8 AI 调用成本优化 |
缓存 Embedding、批量调用、模型降级 |
AI 成本高时 |
七、关键依赖清单
7.1 Python 后端
7.2 前端
7.3 基础设施
| 组件 |
版本 |
用途 |
| PostgreSQL |
16+ |
主数据库 |
| Redis |
7+ |
缓存、锁、消息队列 |
| MinIO |
latest |
对象存储 |
| Prometheus |
latest |
指标采集 |
| Grafana |
latest |
监控仪表盘 |
八、测试策略
8.1 单元测试
| 模块 |
测试重点 |
plugins/deduplication |
URL/标题/内容去重、代表文章选择 |
app/services/normalizer |
URL 规范化、HTML 清洗 |
app/ai/client |
多 Provider 路由、Fallback |
app/skills/loader |
Skill 解析、Schema 校验 |
app/chat/references |
引用标记解析与链接映射 |
app/services/lock_service |
锁获取/释放/超时 |
8.2 集成测试
| 模块 |
测试重点 |
/api/feeds |
CRUD、抓取触发 |
/api/tasks/deduplicate |
去重任务全流程 |
/api/chat/sessions |
创建会话、发送消息 |
/api/output-tasks |
创建任务、手动运行 |
/api/admin/deduplication/rollback |
算法回滚 |
8.3 端到端测试
- 发布 RSS → 抓取 → 清洗 → 去重 → AI 处理 → 日报生成
- 聊天中提问 → 检索文章 → AI 回答 → 验证引用链接
九、里程碑与验收标准
| 里程碑 |
时间 |
验收标准 |
| M1 基础骨架 |
Week 5 |
docker-compose up 可运行;可管理 Feed;可查看文章列表;JWT 鉴权可用 |
| M2 核心流程 |
Week 10 |
一条 RSS 文章能自动完成:抓取→清洗→去重→AI 摘要/分类/Tag/打分 |
| M3 产出与聊天 |
Week 14 |
可创建日报任务并生成日报;可在聊天中提问并获得带引用链接的回答 |
| M4 自优化与工业化 |
Week 18 |
每日 2:00 自优化成功执行并留痕;去重算法可热加载和回滚;监控可用 |
| M5 规模化 |
持续 |
根据数据量完成 OpenSearch/分库等扩展 |
十、风险与应对
| 风险 |
阶段 |
影响 |
应对 |
| SQLite → PostgreSQL 迁移复杂 |
阶段一 |
高 |
编写迁移脚本 + 数据校验 + 保留旧系统 |
| Celery 任务状态丢失 |
阶段二 |
中 |
使用 Redis 持久化 + 任务结果 backend |
| 去重插件热加载失败 |
阶段二/四 |
高 |
失败自动回滚上一个 .bak |
| AI 自优化产生劣质结果 |
阶段四 |
中 |
优化器自评 + 版本化 + 不自动删除旧版本 |
| AI 调用成本高 |
全程 |
中 |
多供应商路由 + Fallback + 结果缓存 |
| 前端 TypeScript 迁移成本 |
阶段一 |
低 |
新平台前端直接用 TS,旧前端代码逐步重写 |
| 数据量增长超预期 |
阶段五 |
中 |
分区表 + 预留 OpenSearch/向量库扩展路径 |
十一、交付文档清单
| 文档 |
负责阶段 |
状态 |
| 本开发步骤文档 |
全程 |
✅ |
| 架构设计文档 |
全程 |
✅ rss-platform-design.md |
| API 接口详细文档 |
阶段一~三 |
待编写 |
| Skill 开发指南 |
阶段三 |
待编写 |
| 自优化机制说明 |
阶段四 |
待编写 |
| Docker 部署手册 |
阶段一/四 |
待编写 |
| 数据迁移手册 |
阶段一 |
待编写 |
| 运维监控手册 |
阶段四 |
待编写 |
十二、后续建议
- 先验证核心假设:在阶段二结束前,用真实 RSS 源跑一周,观察去重效果和 AI 输出质量。
- Prompt 工程优先于自优化:初期先人工调优 Prompt,阶段四再引入自优化。
- 保留旧系统并行运行:直到阶段三结束,旧 rssKeeper + dataClean 可继续服务,降低切换风险。
- 建立反馈闭环:即使不自优化,也要先收集用户对 AI 产出的反馈数据。
- 控制 AI 成本:为每个任务设置预算上限和模型降级策略。
十三、快速启动命令(预期)
本文档与 rss-platform-design.md 配套使用,开发过程中应根据实际情况迭代更新。