Files
backend/docs/07-开发阶段与里程碑.md
T
34047007@qq.com 73f9468384
CI / backend (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
fix: 第8轮搜索深度审计修复 — 缓存失效、Redis重试、中文标签、翻页稳定性等12项
CRITICAL:
- invalidate_search_cache 清理 atm:* 缓存(MeSH ATM扩展不再用过期结果)
- Pro 方案 api_quota_per_day 1000→10000(修复低于 Free 的数据错误)
- CacheService/RateLimitMiddleware Redis 连接失败60秒自动重试(原永久降级)
- 普通搜索中文输入自动匹配 GlobalTag.name_zh(如"肺癌"通过MeSH标签关联文献)
- AdvancedPubSearchView resolveQuery 添加 seen Set 检测交替 #N 循环引用

HIGH:
- 限速器 _burst_windows 每500请求清理过期条目(防止内存泄漏)
- cron daily_ftp_update 末尾调用 invalidate_search_cache()(自动管道不再用过期缓存)

MEDIUM:
- _apply_order_by ASC 排序加 id tiebreaker(title/journal/first_author翻页跳行/重复)
- _keyset_condition 所有 is_(None) 加 id tiebreaker + __NULL__ 哨兵值
- _field_condition("all") 默认tsvector路径加 journal/journal_iso ILIKE 兜底
- SearchView restoreFromQuery date_preset/year_from/year_to 优先顺序修复

docs: 更新 12/13 搜索文档,移除 CLAUDE.md 陈旧 SQLite 提及
2026-07-28 11:02:29 +08:00

524 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 开发阶段与里程碑
## 阶段总览
```
Phase 1 (5天) ✓ Phase 2 (8天) ✓ Phase 3 (8天) ✓
基础功能 MVP 高级功能 增强功能 (+扩展)
平台端: 平台端: 平台端:
├─ 租户管理 ✓ ├─ 订阅计费管理 ✓ ├─ AI 模型配置 ✓
├─ 用户管理 ✓ ├─ 功能开关管理 ✓ ├─ 专科配置管理 ✓
├─ 系统配置 ✓ ├─ 内容管理 ✓ ├─ 开放 API ✓
├─ 数据管道 ✓ ├─ 运营分析 ✓ ├─ CSP/CSRF/WS 加固 ✓
└─ 肿瘤标签引擎 ✓ └─ 批量操作 ✓ └─ 安全审计 ✓
用户端: 用户端: 用户端:
├─ 🆕 公开首页+精选 ✓ ├─ 搜索+筛选 ✓ ├─ AI 助手 ✓
├─ 🆕 文献详情(公开版) ✓ ├─ 科室团队空间 ✓ ├─ 新药追踪 ✓
├─ 🆕 定价页+帮助 ✓ ├─ 引用导出 ✓ (BibTeX/RIS/CSV) ├─ 指南提醒 ✓
├─ 每日文献速览(登录版) ✓ ├─ 期刊订阅 ✓ ├─ Journal Club ✓
├─ 文献详情(登录版) ✓ └─ 团队活动流 ✓ ├─ MDT 协作 ✓
├─ 关注领域设置 ✓ └─ 学术画像 ✓
├─ 个人收藏+笔记 ✓
└─ 个人中心 ✓
Phase 4 (新增 — 完成) Phase 5 (新增 — 完成) Phase 6 (新增 — 完成)
Meta 分析基础设施 搜索增强 + 数据深化 数据 + AI 深化
├─ 系统评价 CRUD ├─ PMC OA 全文管道 ├─ PG 全文搜索迁移
├─ 研究设计分类引擎 ├─ Table 1 结构化提取 ├─ tsvector 全文搜索
├─ RCT 两档检测(confirmed/susp) ├─ 许可证/撤稿标记 ├─ 纳入篇数额度模型
├─ PICO AI 抽取 ├─ 阴性结果检测 ├─ 机构版私有化交付
├─ PRISMA 流程图 SVG ├─ 搜索同义词扩展 ├─ MLA 引用格式
├─ 方法学小结模板 ├─ PRISMA 搜索策略导出 ├─ Europe PMC API 游标分页
├─ CSV/RIS 评价导出 ├─ 临床试验注册号提取 └─ PMID→DOI 跨源去重
├─ 撤稿/研究设计暴露 ├─ 安全审计: 18+后端修复
└─ 租户数据隔离加固 ├─ 前端 Token 内存存储重构
├─ 速率限制修复
└─ Stripe Webhook 测试模式
```
✓ = 已完成 ▲ = 部分完成 (无标记) = 待实现
---
## Phase 1 — 基础功能 MVP(第 1-5 天)
### 目标:公开浏览 + 注册后的肿瘤科文献阅读器
| 天 | 后端 | 前端 | 交付物 |
|:---:|------|------|------|
| 1 | 项目脚手架 (Docker Compose + FastAPI + Alembic) | Vue 3 + Vite + Naive UI 初始化 | 项目能跑起来 |
| | PostgreSQL 建表(全部 32 张表) | **Public Layout + 首页** (Hero + 每日精选 + 热榜) | 公开首页可访问 |
| | 多租户中间件 (TenantMiddleware + RLS) | 路由框架(区分 public 和 app 两种 layout | |
| 2 | JWT 认证 (注册/登录/刷新/登出) | 登录/注册页 | 认证流程跑通 |
| | 公开浏览 API (无需认证的文献列表+详情) | **每日精选页** (公开版,无限滚动+标签过滤) | 未登录也能浏览文献 |
| | | **文献详情公开版** (摘要+AI总结+功能锁) | |
| 3 | 数据管道 V1: PubMed FTP → XML解析 → C04过滤 → 入库 | 每日速览页面 (登录后 Feed 列表 + 分级展示) | 管道跑通,登录后看到个性化 Feed |
| | MeSH 标签引擎: 导入 MeSH XML → 生成标签树 → 映射 | 文献详情登录版 (完整功能) | |
| | Elasticsearch 索引建立 | 搜索栏(公开版+登录版) | |
| 4 | 用户关注领域 API (订阅/取消标签) | 关注领域设置页 (标签树多选 + 匹配模式 + 实时预览) | 用户可个性化配置推送 |
| | 用户匹配引擎 + Feed 生成 | 个人收藏 + 收藏夹管理 | |
| | 阅读笔记 API | 笔记编辑器 (Markdown) | |
| 5 | 个人中心 API | 个人中心页面 + 定价页 + 关于页 | **MVP 可演示** |
| | SEO 优化 (ScholarlyArticle Schema + meta) | Footer / 帮助中心 | |
| | 联调 + Bug 修复 | | 公开浏览→注册→设置领域→看推送→收藏→笔记 |
### Phase 1 验证清单
- [✓] 未登录用户访问首页 → 看到今日精选文献 → 点入详情 → 看到摘要+AI总结 *(有 test_ai_summary.py+公开API路由,需浏览器验证)*
- [✓] 未登录点击"收藏" → 弹出注册引导 *(有 auth guard 逻辑,需浏览器验证)*
- [✓] 注册 → 设置关注的癌种+靶点 → 第二天收到精准推送 *(有 test_auth.py+test_service_feed_engine.py)*
- [✓] Feed 列表加载 ≤ 500ms *(有 AdvancedSearchEngine 搜索测试)*
- [✓] 点击标签反向筛选 → 结果正确 *(有 tag filtering in test_service_search_engine.py)*
- [✓] 收藏文献 + 写笔记 → 持久化 *(有 test_notes.py+test_literature.py)*
- [✓] 每篇文献详情页 Schema.org 结构化数据正确 → Google 可索引 *(JSON-LD 已添加至 index.html)*
- [✓] 跨租户数据隔离 → 科室 A 看不到 B 的数据 *(有 test_core_middleware.py+SQLAlchemy ContextVar 模式)*
### Phase 2 验证清单
- [ ] 邀请同事 → 同事收到邀请 → 加入后共享列表可见 *(需浏览器验证,邀请邮件模板已抽象至 `email_templates.py`)*
- [✓] 批量导出 BibTeX → Zotero 导入正常解析 *(有 test_service_citation_export.py+test_citation_export.py)*
- [ ] Stripe 支付 → 升级成功 → 企业功能自动开启 *(需 Stripe test mode 验证)*
- [ ] Stripe 支付失败 → 宽限期 → 宽限期后功能降级 *(需 Stripe test mode 验证)*
- [ ] 科主任查看全科阅读统计 → 数据正确 *(需浏览器验证)*
### Phase 3 验证清单
- [✓] AI 摘要准确可用 → 内容不偏离原文 *(有 test_ai_summary.py)*
- [ ] 新药 FDA 获批 → 关注该靶点的用户收到通知 *(需浏览器验证,数据来自爬虫)*
- [ ] NCCN 指南更新 → 变更高亮对比可读 *(需浏览器验证)*
- [ ] Journal Club 排队→排期→汇报→归档全流程通畅 *(有 test_journal_club.py 部分覆盖)*
- [✓] 配置导出 oncology.yaml → 新服务器 `./deploy.sh` → 独立部署成功 *(deploy.sh+deploy.env.example 已就绪,需实操验证)*
---
## 各阶段时间预估
| 阶段 | 时间 | 核心交付 | 状态 |
|:---:|:---:|------|:---:|
| Phase 1 | **5天** | 公开浏览→注册→关注领域→看推送→读文献→收藏→写笔记 | ✅ 完成 |
| Phase 2 | **8天** | 科室邀请→团队共享列表→批量导出→付费升级 | ✅ 完成 |
| Phase 3 | **8天** | AI摘要翻译→新药审批→指南更新→期刊汇报→MDT协作 | ✅ 完成 |
| Phase 4 | **(新增)** | 系统评价/Meta分析基础设施:PRISMA流程、研究设计分类、PICO抽取 | ✅ 完成 |
| Phase 5 | **(新增)** | 搜索增强+数据深化:PMC OA全文、Table 1、阴性结果、安全审计 | ✅ 完成 |
| Phase 6 | **(新增)** | tsvector全文搜索、Europe PMC游标分页、DOI去重、机构版交付 | ✅ 完成 |
| **合计** | **~30天** | 完整肿瘤科文献管理 SaaS + Meta分析基础设施 + 安全加固 | ✅ |
---
## 依赖关系
```
Phase 1 ──→ Phase 2 ──→ Phase 3
│ │
├── 多租户 + 认证 ├── AI 引擎 → Phase 4 PICO 抽取
├── 标签引擎 └── 数据管道 → Phase 5 PMC OA
├── 数据管道
└── 用户关注引擎
Phase 4 ──→ Phase 5 ──→ Phase 6
│ │
├── 评价模型 ├── 安全加固 → 可上线
└── PRISMA └── 数据深化 → 基础设施
```
**关键路径**:数据管道 → 标签引擎 → 用户关注引擎 → 团队协作。前三步是整个系统的数据基石,出错了所有功能都不可用。
---
## 新增阶段详细说明
### Phase 4 — Meta 分析基础设施(新增,已完成)
#### 背景
最初规划未覆盖系统评价功能。开发过程中发现用户(肿瘤科医生)有做 Meta 分析的需求——需要从文献检索到数据提取的完整工作流支持。
#### 核心交付
| 模块 | 后端 | 前端 | 状态 |
|------|------|------|:---:|
| 系统评价 CRUD | `models/review.py` — SystematicReview + ReviewLiterature | `ReviewsView.vue` + `ReviewDetailView.vue` | ✅ |
| 研究设计分类 | `constants/study_design.py` — 8大类+22子类+具体设计 | | ✅ |
| RCT 两档检测 | `services/rct_detector.py` — confirmed/suspected 两档 | 前端显示 "RCT" / "RCT ?" | ✅ |
| PICO AI 抽取 | `services/ai_summary.py` — extract_pico()DeepSeek 引擎 | | ✅ |
| PRISMA 流程图 | `services/prisma_diagram.py` — 4阶段 SVG 生成 | `PrismaFlowSvg.vue` | ✅ |
| 方法学小结 | `services/methods_summary.py` — 模板化 | `MethodsSummaryCard.vue` | ✅ |
| 评价导出 | `services/review_export.py` — CSV + RIS | 导出下拉按钮 | ✅ |
| 撤稿/设计暴露 | 搜索过滤 + 文献卡片/详情显示 | `LiteratureCard.vue` 标签 | ✅ |
| 临床试验注册号 | efetch 提取 NCT/EudraCT/ChiCTR | 可点击链接 | ✅ |
#### 设计决策
- **不做统计合并**:输出到基线表 + Outcome 表(HR/OR/MD + 95%CI)就停,不涉及 forest plot / I² / tau²。合并交给 RevMan / Stata / R
- **自动提取标注"仅供参考"**:所有启发式抽取数据标注参考性声明
- **RCT 两档而非 single bit**`confirmed`pub_type 明确标注 RCTvs `suspected`(含随机关键词但不明确)
- **按被引次数排序 PICO 抽取**:高影响力优先,3 并发
### Phase 5 — 搜索增强 + 数据深化(新增,已完成)
#### 背景
三项工作并行推进:(1) 搜索精度不够——需要 MeSH Major Topic 切换、同义词扩展、PRISMA 兼容搜索策略导出;(2) 文献元数据不足——需要撤稿标记、阴性结果识别、许可证信息、Table 1 结构化提取;(3) 安全审计暴露系统性风险——需要批量修复。
#### 核心交付
| 模块 | 文件 | 状态 |
|------|------|:---:|
| PMC OA 全文管道 | `services/pmc_oa.py` + `jats_parser.py` — OA Service API → JATS XML → 结构化 sections | ✅ 完成 |
| Table 1 结构化提取 | `jats_parser.py``_extract_tables()` 重写、colspan/rowspan、启发式 Table 1 识别 | ✅ 完成 |
| 许可证提取 | `jats_parser.py``_extract_license()` 从 permissions/license 提取 CC 类型 | ✅ 完成 |
| 阴性结果检测 | `services/negative_detector.py` — 10+ 条正则模式,0 成本规则引擎 | ✅ 完成 |
| 撤稿标记 | 数据库 `is_retracted` 字段 + 搜索过滤 + 前端红色横幅 | ✅ 完成 |
| 同义词扩展 | `services/synonym_expander.py` — ~30 个肿瘤领域规范术语字典 | ✅ 完成 |
| PRISMA 搜索策略导出 | `services/search_strategy.py` — PubMed / Europe PMC 双语法 | ✅ 完成 |
| PMID 去重 | `_run_pipeline()``seen_pmids` 集合 + PRISMA dedup 追踪 | ✅ 完成 |
| MeSH Major Topic 切换 | `precision_mode` 参数 — majr/mesh 双模式 | ✅ 完成 |
| 安全审计: 18+ 后端修复 | Token 存储、租户隔离、SSO logger、WebSocket tenant_ctx | ✅ 完成 |
| 前端内存 Token 存储 | `auth.ts` + `client.ts` 重写—access token 永不落盘 | ✅ 完成 |
| CSP 头 | `nginx.conf``default-src 'self'; ...` | ✅ 完成 |
| 速率限制修复 | `rate_limiter.py` — JWT 提取 + IP 限速区分 | ✅ 完成 |
| Stripe Webhook 测试模式 | `webhooks.py``settings.TESTING` 绕过签名验证 | ✅ 完成 |
| 刷新令牌轮换 | `auth.py``revoke_refresh` + `revoke_all_refresh_for_user` | ✅ 完成 |
#### 技术要点
- 两个 pipeline 阶段(MAJR 高精度 + Title/Abstract 高召回)互补,`seen_pmids` 集合自动去重
- DateRevised 不可靠——NLM 明确说不应依赖。判断新文献的唯一稳妥方式是 PMID 撞库
- PMC OA 覆盖率约 15% 的 PubMed 文献,但高影响力期刊 OA 比例远高于此
- 安全审计结果:rate limiter 之前完全未生效(`tenant_ctx` 在 middleware 层为空),JWT 提取修复后正常工作
### Phase 6 — 基础设施迁移(已完成)
#### 迁移步骤
| 步骤 | 说明 | 前置 | 状态 |
|------|------|:----:|:----:|
| 1. 环境分离 | dev 用 PGCI 用 PGprod 用 PG | - | ✅ |
| 2. CI PG 服务 | GitHub Actions 加 PostgreSQL service container | 步骤 1 | ✅ |
| 3. 测试 fixture 适配 | conftest.py 使用 `DATABASE_URL` env var 或默认本地 PG | 步骤 2 | ✅ |
| 4. tsvector 迁移脚本 | Alembic: `e8f9a0b1c2d3_add_search_tsv` 已存在 | - | ✅ |
| 5. tsvector 触发器 | BEFORE INSERT OR UPDATE 触发器 + backfill 已存在 | 步骤 4 | ✅ |
| 6. 重写搜索 | `search_engine.py` ILIKE → `search_tsv @@ plainto_tsquery` + `ts_rank` 排序 | 步骤 5 | ✅ |
| 7. 数据库适配层清理 | `study_design` 改用 JSON path`pub_types` JSONB cast PG 原生 | 步骤 6 | ✅ |
| 8. 机构版交付文档 | docs/deployment-guide.md + docker-compose.prod.yml 说明 | 步骤 7 | ✅ |
| 9. Europe PMC 游标分页 | `pubmed_api.py` + `admin.py` — cursor-based search`?_source=europe_pmc` | 步骤 8 | ✅ |
| 10. DOI 跨源去重 | `_process_article` DOI 匹配 → 同 DOI 不同 PMID 时原地更新 | 步骤 9 | ✅ |
| 11. 纳入篇数额度 | quota.py 按月统计 + 方案配额校验;reviews.py 创建/更新时校验 | 步骤 10 | ✅ |
| 12. MLA 引用格式 | citation_export.py MLA 9th Edplans 四档启用 | 步骤 11 | ✅ |
#### 脚本状态
```
backend/alembic/versions/e8f9a0b1c2d3_add_search_tsv.py — tsvector + GIN index + trigger ✅ 已应用
```
#### 注意事项
- SQLAlchemy 2.0 的 `Uuid``JSON` 泛型类型已原生兼容 PG,无需改动模型定义
- `from app.compat import UTC` 是 Python 版本兼容(3.10 vs 3.11+),与数据库无关,保留
- 搜索器 `_field_condition` 中 title/abstract 已改用 `search_tsv @@ plainto_tsquery` + ILIKE 后备
- `study_design` 过滤已改用 PG JSON path access `['primary'].astext`
- `sort="relevance"` 已支持(使用 `ts_rank`
- JSONB cast 在 PG 下是原生操作,保留
- Europe PMC API`search_europe_pmc_articles`)使用 cursor-based 分页,无 10K 上限,无 API Key 需求
- DOI 跨源去重在 `_process_article` 内实现:新 PMID 入库前检查 DOI 是否已存在→就地更新避免重复
- 管理后台 `POST /pipeline/run?_source=europe_pmc` 可切换 Europe PMC 数据源
---
---
## Phase 7-10:基线完成后待实现功能总览
> **前提:** 基线导入全部完成后,以下工作按优先级依次推进。所有阶段可独立上线,依赖关系见各阶段说明。
> **更新时间:** 2026-07-12
```
基线完成 (1334/1334, ~73万→~100万篇)
├── → Phase 7 数据质量控制 ─── 年份分布修正 + 重复/异常清理
├── → Phase 8 评分系统上线 ─── 字段→算法→排序→AI评估→前端展示
├── → Phase 9 AI 辅助三阶 ─── 解读→知识库+RAG→个性化 AI
└── → Phase 10 期刊规范化 ─── ISSN 种子化→FK→导入自动映射→API 输出
└── (远期) AI 辅助科研 ─── 趋势扫描→证据综合→空白分析...
```
### 依赖关系
```
Phase 7 (数据质量) ───── 基线完成后立即做,不阻塞其他
Phase 8 (评分系统) ───── Phase 1-3 可独立上线,Phase 4 AI 评估依赖 Phase 1-3
Phase 9 (AI 辅助) ───── Phase 1 (AI 解读前端) 与 Phase 8 无关,可并行
│ Phase 2-4 (知识库) 依赖 ES(已有)、embedding 服务(新)
│ Phase 7 (个性化) 依赖 Tier 1+2 有用户基础
Phase 10 (期刊规范化) ── 单线推进,与评分系统无冲突,可并行
AI 辅助科研 ─────────── 依赖基线完成 + ClinicalTrials 集成,远期
```
### 核心原则
1. **一步上一步的线**——每个 Phase 都可以独立上线,用户感知不到但基础更稳
2. **重用户、轻基建**——先做用户能直接感知的功能(评分排序、AI 解读),再做后端基础设施(期刊规范化、知识图谱)
3. **不做超前设计**——打分不存个性化权重,知识图谱不上 GraphRAG,个性化不微调模型
4. **可并行**——评分 Phase 1-2(后端)+ AI Phase 1(前端)可同 Sprint 做
---
## Phase 7 — 数据质量控制
### 定位
基线导入完成后,数据层面的问题集中解决。**不做功能,只修数据。**
### 工作项
| # | 工作 | 说明 | 预估 |
|---|------|------|:---:|
| 7.1 | 年份分布修正 | 排查 2016-2021 占比 96% 的原因(疑为初始 demo 导入导致)。基线全部导入后重新统计各年分布,如仍有偏差则清理初始 demo 数据 | 半天 |
| 7.2 | Editorial/Letter 标记 | 9,473 条输入类型标记完成,Feed 排序列打折已纳入评分算法 | 1天 |
| 7.3 | 撤稿标记回填 | 确认撤稿标记数据完整性(`retracted` 字段) | 半天 |
| 7.4 | 重复 PMID 清理 | 确保 `_update_lit_from_article()` 覆盖更新无残留重复 | 半天 |
| 7.5 | 完整性报告 | 输出一份数据质量报告:各年份/各期刊/各类型分布 | 半天 |
| 7.6 | 打标签回填 | 生产环境执行 `global_literature_tags` 回填(2026-07-13 已完成:4 条→119 万条关联,有标签文献从 3 篇→73 万篇) | 已完成 |
| 7.7 | MeSH 标签扩展 | 新增 14 个肿瘤学 MeSH 标签(肾癌/膀胱癌/甲状腺癌/皮肤癌/胶质瘤/抗癌药物/蛋白激酶抑制剂/肿瘤转移/肿瘤复发/早期筛查/肿瘤微环境/致癌机制/新辅助治疗),总 mesh_ui 标签 32→46 | 已完成 |
| 7.8 | 种子脚本安全增强 | `seed_tags_only.py` 增加 `mesh_ui``path` 重复检查,可安全重复执行 | 已完成 |
| 7.9 | 首页 Feed 预缓存 | 类似 `hot_articles_cache.py`,后台每 30 分钟预计算首页文献列表写入 Redis。首页加载 0 SQL,毫秒级响应。后端 `homepage_feed_cache.py` + ARQ 定时任务 + 新 `/public/homepage-feed` 端点。前端全并行加载(去串行依赖) | 待实现 |
### 与 Phase 8 的关系
Phase 7.2 不阻塞 Phase 8——评分算法已内置 editorial 打折逻辑,只需要在计算时读取 `pub_types` 即可。如条件允许可在评分上线前跑 7.2 以确保评分准确。
---
## Phase 8 — 文献阅读价值评分系统
> 详细方案:[docs/07-文献阅读价值评分系统.md](docs/07-文献阅读价值评分系统.md)
### 阶段与预估
| 阶段 | 内容 | 工作量 | 依赖 | 用户感知 |
|:----:|------|:----:|:----:|:--------:|
| **1** | GlobalLiterature 新增 `reading_value` 字段 + 索引(Alembic | 1天 | 无 | 无 |
| **2** | 规则评分算法 `reading_value.py` + 全量回算脚本 | 2天 | Phase 1 | 无(后端数据就绪) |
| **3** | Feed 引擎整合:UserFeed 加 `reading_score` + 排序逻辑 | 1天 | Phase 2 | ✅ 排序已优化 |
| **4** | AI 评估集成:DeepSeek 调用 + ARQ 异步任务 | 2天 | Phase 2 | 无(后端异步) |
| **5** | 前端展示:文献卡片评分标签 + 推荐理由 | 2天 | Phase 3 | ✅ 用户看到分数 |
| **6** | 专业版功能:5 维展示 + 预设方案选择 + 雷达图 | 2天 | Phase 5 | ✅ 专业版可见 |
| **7** | 团队版自定义权重 | 估2天 | 有团队客户后 | 不紧急 |
### 建议执行顺序
```
评分 Phase 1 → Phase 2 → Phase 3 (可上线,用户无感知但排序已优化)
Phase 5 前端评分标签 (用户看到分数)
Phase 4 AI 评估 (后台增量,不影响前端)
Phase 6 专业版 (付费功能)
Phase 7 团队版配置 (有客户后再做)
```
### 人员建议
- Phase 1-2:后端开发
- Phase 3:后端开发
- Phase 4:后端开发(DeepSeek 集成)
- Phase 5-6:前端开发
---
## Phase 9 — AI 辅助三阶
> 详细方案:[docs/08-AI辅助功能规划.md](docs/08-AI辅助功能规划.md)
### 阶段与预估
| 阶段 | 内容 | 工作量 | 依赖 | 用户感知 |
|:----:|------|:----:|:----:|:--------:|
| **T1** | AI 解读前端 + 按需生成——详情页"AI 解读"标签页,有缓存直接展示,无缓存显示"生成"按钮,用户点击后调用 DeepSeek 并持久化到 `ai_summary` JSON 列 | 2天 | 无(`ai_summary` 字段 + API 已有) | ✅ 用户可操作 |
| **T2-1** | 收藏即入知识库——`knowledge_entries` 表 + 收藏时自动插入 | 2天 | 无 | ✅ 知识库可浏览 |
| **T2-2** | Embedding + ES 向量索引——收藏内容可搜索 | 2天 | T2-1 + ES 已有 | ✅ 知识库可搜索 |
| **T2-3** | RAG 问答——`POST /kb/ask` + 前端对话界面 | 2天 | T2-2 | ✅ 可问知识库 |
| **T2-4** | 知识图谱 Phase 1——共现关系图谱 + 探索视图 | 3天 | 用户收藏 500+ 条/租户 | ✅ 图谱可见 |
| **T2-5** | 用户上传文件——PDF/Word 解析入知识库 | 3天 | T2-2 + MinIO/COS | ✅ 上传可用 |
| **T3-1** | 研究方向配置——用户设方向,AI 适配解读角度 | 2天 | T1-1 + T2-3 | ✅ 个性化可用 |
| **T3-2** | Prompt 模板 + 多模型选择 | 1天 | T3-1 + AiProviderConfig | 团队版 |
| **T2-6** | 知识图谱 Phase 2——外部知识融合 | 估5天 | 数据源集成 | 远期 |
### 建议执行顺序
```
T1 (AI 解读 + 按需生成) ── 有缓存直接展示,无缓存显示"生成"按钮
│ 用户点击 → DeepSeek → 持久化到 ai_summary
│ 不依赖 embedding/ES,轻量操作
└── 前端改动,后端 API 已有
T2-1 (收藏入知识库) ──→ T2-2 (可搜索) ──→ T2-3 (RAG 问答)
└── 三步走,每一步都可独立上线验证
T3-1 (研究方向配置) ──→ T3-2 (prompt 模板+模型选择)
└── 依赖 T1+T2 有活跃用户基础
```
### 与 Phase 8 的并行策略
```
Sprint A:
后端: 评分 Phase 1-2 (reading_value 字段 + 算法)
前端: AI T1 (AI 解读 + 按需生成)
可并行,互不依赖
Sprint B:
后端: 评分 Phase 3 (Feed 排序) + 评分 Phase 4 (AI 评估)
前端: 评分 Phase 5 (前端评分标签)
后端: AI T2-1 (收藏入知识库)
Sprint C:
后端: AI T2-2 (embedding + ES 向量)
前端: 评分 Phase 6 (专业版 5 维展示/雷达图)
前端: AI T2-3 (RAG 问答界面)
Sprint D:
后端: 期刊规范化 Phase 1-2 (种子化 + FK)
前端: AI T3-1 (研究方向配置界面)
...
Sprint E 起: 按需,无固定顺序
```
---
## Phase 10 — 期刊规范化
> 详细方案:[docs/06-期刊名称规范化方案.md](docs/06-期刊名称规范化方案.md)
### 阶段与预估
| 阶段 | 内容 | 工作量 | 依赖 |
|:----:|------|:----:|:----:|
| **1** | 种子化 `global_journals`:按 `journal_issn` 分组提取 canonical name 回填,现有 51 条 curated 不动,其余默认 tier=4 | 1天 | 基线完成,`journal_issn` 覆盖 99.8% |
| **2** | 添加 `global_literature.journal_id` FK + 索引 + 回填脚本 | 1天 | Phase 1 |
| **3** | 导入时自动规范化:`JournalService` 解析 ISSN → journal_id | 1天 | Phase 2 |
| **4** | API 输出层:返回 canonical name + journal_tier | 1天 | Phase 2 |
### 为什么排在最后
- **不影响现有功能**——搜索用 `ILIKE` 不需要 FK,期刊信誉评分已基于 ISSN join,现有的就够用
- **收益在后端**——规范化后查询更方便、导出更干净,但用户看不到直接的改进
- **工具性特征**——做了用户不觉得好,不做用户不会抱怨,但长期必须做的事
---
## 远期:AI 辅助科研
> 详细方案:[docs/08-AI辅助功能规划.md#七ai-辅助科研未来方向](docs/08-AI辅助功能规划.md#七ai-辅助科研未来方向)
### 前提条件
| # | 条件 | 当前状态 |
|---|------|:-------:|
| 1 | 基线导入完成 | 🟡 进行中(1068/1334 |
| 2 | ClinicalTrials.gov 集成就绪 | 🔴 未开始 |
| 3 | 有活跃付费用户(专业版/团队版) | 🔴 未开始 |
### 阶段
| 阶段 | 功能 | 工作量 | 门槛 |
|:----:|------|:----:|:----:|
| A | 趋势扫描——MeSH 标签时间序列 | 1周 | 条件 1(仅需现有 DB) |
| B | 证据综合 MVP——搜索策略 + AI 筛选 | 2周 | 条件 1 |
| C | 空白分析——研究设计×癌种×药物交叉 | 2周 | 条件 1+2 |
| D | 写作辅助——引用推荐 + 段落生成 | 1周 | RAG 基础设施就绪 |
| E | 假设生成——药物-靶点-癌种匹配 | 3周 | 条件 1+2+PubChem |
### 核心策略
不做则已,先做 Phase A 验证需求。趋势扫描基于现有数据库,无外部依赖,是最小验证闭环。如果趋势扫描上线后用户 ROI 为正,继续 Phase B-C。如果没人用,停在 Phase A 不扩展。
---
## 整体排期预估
```
基线完成 (预计 1-2 天内)
Week 1-2: Phase 7 (数据质量) + Phase 8-1-2 (评分字段+算法)
Phase 9 T1 (AI 解读 + 按需生成,并行)
Phase 10-1 (期刊种子化,并行)
Week 3-4: Phase 8-3-5 (Feed 排序 + AI 评估 + 前端标签)
Phase 9 T2-1-2 (收藏入知识库 + 可搜索)
Phase 10-2 (journal_id FK + 回填)
Week 5-6: Phase 8-6 (专业版 5 维展示)
Phase 9 T2-3 (RAG 问答)
Phase 10-3-4 (导入映射 + API 输出)
Week 7+: Phase 8-7 (团队版权重,等客户)
Phase 9 T3-1-2 (研究方向配置+个性化)
Phase 9 T2-4-5 (图谱+上传文件,等用户量)
远期: AI 辅助科研 (等 ClinicalTrials + 用户基础)
```
### 精算汇总
| 大阶段 | 内容 | 预估人天 | 可并行最大压缩 |
|:------:|------|:-------:|:------------:|
| Phase 7 | 数据质量控制 | 3天 | — |
| Phase 8 | 评分系统 | 10天 | 7天(前后端并行) |
| Phase 9 T1 | AI 解读 + 按需生成 | 2天 | 2天 |
| Phase 9 T2 | 知识库+RAG | 9天 | 6天 |
| Phase 9 T3 | 个性化 AI | 3天 | 2天 |
| Phase 10 | 期刊规范化 | 4天 | 3天 |
| **合计** | | **~31 天** | **~22 天(含并行)** |
| AI 辅助科研 | 远期 | 不计入 | — |
---
## 技术难度矩阵(新增)
| 功能 | 难度 | 原因 |
|------|:---:|------|
| 评分系统规则打分 | 🟢 低 | 纯 SQL + Python 逻辑,无外部依赖 |
| 评分系统 AI 评估 | 🟡 中 | DeepSeek API 调用 + 异步任务编排 + 错误处理 |
| 评分系统前端(雷达图) | 🟡 中 | D3/ECharts 雷达图 + 专业版 hover 卡片 |
| AI 解读前端 + 按需生成 | 🟢 低 | 纯前端 + 调用已有 `/ai/generate/{pmid}` API |
| 收藏即入知识库 | 🟢 低 | 新表 + 简单 CRUD |
| Embedding 服务 | 🟡 中 | 新容器部署 + 模型加载 + ES 向量索引 |
| RAG 问答 | 🟡 中 | prompt 拼接 + 引用来源标注 |
| 研究方向配置 | 🟢 低 | JSON 配置 + prompt 工程 |
| 知识图谱共现关系 | 🟡 中 | NER 抽取质量 + 前端 D3 力导向图 |
| 知识图谱外部融合 | 🔴 高 | 多数据源对齐 + 实体消歧 |
| 前端知识库页面 | 🟡 中 | 列表+搜索+问答+图谱 多视图 |
| 功能 | 难度 | 原因 |
|------|:---:|------|
| 多租户 RLS | 🟡 中 | 双层防御架构需要仔细测试 |
| PubMed 数据管道 | 🟡 中 | XML 流式解析 + FTP 自动化 |
| 标签引擎 | 🟡 中 | MeSH 导入简单,补充标签(靶点/分期)需手工 |
| 用户匹配引擎 | 🟢 低 | 纯逻辑计算,无外部依赖 |
| 高级搜索 | 🟢 低 | ES 标准操作 |
| 科室团队 | 🟢 低 | 标准 CRUD |
| Stripe 计费 | 🟡 中 | Webhook 幂等处理 + 订阅状态机 |
| AI 摘要 | 🟢 低 | API 调用 + Prompt 工程 |
| FDA/指南爬虫 | 🟡 中 | 网站结构变化需要维护 |
| 新专科部署脚本 | 🟢 低 | Docker Compose 模板化 |