feat(rvw,asl): RVW V3.0 smart review + ASL deep research history + stability

RVW module (V3.0 Smart Review Enhancement):
- Add LLM data validation via PromptService (RVW_DATA_VALIDATION)
- Add ClinicalAssessmentSkill with FINER-based evaluation (RVW_CLINICAL)
- Remove all numeric scores from UI (editorial, methodology, overall)
- Implement partial_completed status with Promise.allSettled
- Add error_details JSON field to ReviewTask for granular failure info
- Fix overallStatus logic: warning status now counts as success
- Restructure ForensicsReport: per-table LLM results, remove top-level block
- Refactor ClinicalReport: structured collapsible sections
- Increase all skill timeouts to 300s for long manuscripts (20+ pages)
- Increase DataForensics LLM timeout to 180s, pg-boss to 15min
- Executor default fallback timeout 30s -> 60s

ASL module:
- Add deep research history with sidebar accordion UI
- Implement waterfall flow for historical task display
- Upgrade Unifuncs DeepSearch API from S2 to S3 with fallback
- Add ASL_SR module seed for admin configurability
- Fix new search button inconsistency

Docs:
- Update RVW module status to V3.0
- Update deployment changelist
- Add 0305 deployment summary

DB Migration:
- Add error_details JSONB column to rvw_schema.review_tasks

Tested: All 4 review modules verified, partial completion working
Made-with: Cursor
This commit is contained in:
2026-03-07 19:24:21 +08:00
parent 91ae80888e
commit 87655ea7e6
46 changed files with 2929 additions and 511 deletions

View File

@@ -15,19 +15,32 @@
| # | 变更内容 | 迁移文件 | 优先级 | 备注 |
|---|---------|---------|--------|------|
| — | *暂无* | | | |
| DB-1 | modules 表 seed 新增 ASL_SR 模块(系统综述项目) | `backend/scripts/seed-modules.js` | 高 | 部署后需执行 `node scripts/seed-modules.js`,并在运营管理端为目标用户/租户开通 |
| DB-2 | prompt_templates 表新增 RVW_DATA_VALIDATION + RVW_CLINICAL 两个 Prompt | `backend/scripts/migrate-rvw-prompts.ts` | 高 | 部署后需执行 `npx tsx scripts/migrate-rvw-prompts.ts`,运营管理端可配置修改 |
| DB-3 | ReviewTask 表新增 `error_details` JSONB 字段(存储 Skill 级失败详情) | `prisma/migrations/20260307_add_error_details_to_review_task/migration.sql` | 高 | 支持 partial_completed 状态,记录每个失败/超时 Skill 的名称和原因 |
### 后端变更 (Node.js)
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---------|---------|---------|------|
| — | *暂无* | | | |
| BE-1 | Deep Research V2.0 新增历史列表 + 删除接口 + getTask 鉴权修复 | `deepResearchController.ts`, `routes/index.ts` | 重新构建镜像 | GET /research/v2/tasks, DELETE /research/tasks/:taskId, getTask 增加 userId 校验 |
| BE-2 | SR 相关路由projects/literatures/screening/fulltext-screening/extraction/charting/meta-analysis增加 `requireModule('ASL_SR')` 中间件 | `asl/routes/index.ts`, `extraction/routes/index.ts`, `charting/routes/index.ts`, `meta-analysis/routes/index.ts` | 重新构建镜像 | 需先完成 DB-1 seed否则无 ASL_SR 模块会 403 |
| BE-3 | Unifuncs DeepSearch API 从 S2 升级至 S3新增 `language: "zh"` | `unifuncsSseClient.ts`, `unifuncsAsyncClient.ts` | 重新构建镜像 | 通过 `UNIFUNCS_MODEL` 环境变量控制,默认 s3设为 s2 可降级 |
| BE-4 | RVW 数据验证增加 LLM 核查通道DataForensicsSkill 增强) | `DataForensicsSkill.ts`, `prompt.fallbacks.ts` | 重新构建镜像 | 规则验证完成后批量调用 LLM 核查所有表格,失败时降级为纯规则验证 |
| BE-5 | RVW 新增临床专业评估维度ClinicalAssessmentSkill | `clinicalService.ts`(新), `ClinicalAssessmentSkill.ts`(新), `library/index.ts`, `profile.ts`, `utils.ts`, `reviewWorker.ts`, `reviewService.ts` | 重新构建镜像 | 新增 clinical Agent + Skill存储在 contextData.clinicalReview |
| BE-6 | RVW 稳定性增强SkillExecutor Promise.allSettled + partial_completed 状态 + errorDetails | `executor.ts`, `reviewWorker.ts`, `reviewService.ts`, `reviewController.ts`, `types/index.ts` | 重新构建镜像 | 并行 Skill 故障隔离,部分模块失败时仍返回成功模块结果,新增 `partial_completed` 任务状态 |
| BE-7 | DataForensicsSkill LLM 核查增加独立 60s 超时 | `DataForensicsSkill.ts` | 重新构建镜像 | LLM 核查超时不阻塞整体 Skillgraceful 降级为纯规则验证 |
### 前端变更
| # | 变更内容 | 涉及文件 | 需要操作 | 备注 |
|---|---------|---------|---------|------|
| — | *暂无* | | | |
| FE-1 | ASL 左侧导航栏重构为互斥手风琴Deep Research 历史记录 + SR 工具导航) | `ASLLayout.tsx`, `asl-sidebar.css`(新建), `DeepResearchPage.tsx`, `asl/index.tsx` | 重新构建镜像 | Panel A: 智能文献检索历史Panel B: 系统综述项目5 工具) |
| FE-2 | Deep Research 历史记录功能API 客户端 + 类型定义 + URL 任务恢复) | `asl/api/index.ts`, `types/deepResearch.ts`, `DeepResearchPage.tsx`, `asl/index.tsx` | 重新构建镜像 | 新增 listDeepResearchTasks / deleteDeepResearchTask API新增 /research/deep/:taskId 路由 |
| FE-3 | Panel B SR 工具导航权限控制hasModule('ASL_SR') | `ASLLayout.tsx`, `asl-sidebar.css` | 重新构建镜像 | 未开通时显示"请联系管理员开通";已开通显示 5 个 SR 工具导航项 |
| FE-4 | RVW 数据验证报告增加 LLM 核查结果展示 | `ForensicsReport.tsx`, `rvw/types/index.ts` | 重新构建镜像 | 总览展示完整 LLM 报告,每个表格卡片展开后显示对应 AI 核查结果Markdown |
| FE-5 | RVW 新增临床专业评估 Tab + Agent 选择项 | `ClinicalReport.tsx`(新), `AgentModal.tsx`, `TaskDetail.tsx`, `rvw/types/index.ts` | 重新构建镜像 | 共 4 个 Tab稿约规范性/方法学/数据验证/临床评估Word 导出包含临床评估章节 |
| FE-6 | RVW 前端支持 partial_completed 状态(部分完成) | `TaskDetail.tsx`, `TaskTable.tsx`, `rvw/types/index.ts` | 重新构建镜像 | 琥珀色警告横幅展示失败模块详情,列表页显示"部分完成"标签,支持查看已完成模块的报告 |
### Python 微服务变更
@@ -45,7 +58,7 @@
| # | 变更内容 | 服务 | 变量名 | 备注 |
|---|---------|------|--------|------|
| — | *暂无* | | | |
| ENV-1 | Unifuncs 模型版本控制(可选,不配置则默认 s3 | nodejs-backend | `UNIFUNCS_MODEL=s3` | 降级时改为 `s2`,无需重新部署代码 |
### 基础设施变更

View File

@@ -0,0 +1,197 @@
# 2026年3月5日部署完成总结
> **部署日期**2026-03-05
> **部署范围**数据库数据更新1项 + Node.js后端 + 前端Nginx + R统计引擎待部署
> **部署状态**:✅ 后端/前端已完成
> **文档日期**2026-03-05
---
## 部署成果一览
### 服务版本对比
| 服务 | 部署前 | 部署后 | 变更类型 |
|------|--------|--------|---------|
| PostgreSQLRDS | 86 表 | 86 表(数据更新) | modules 表 seed 更新 |
| Node.js后端 | v2.4 | **v2.6** | 登录踢人 + 权限体系 + SSA双通道 |
| 前端Nginx | v2.0 | **v2.3** | UI优化 + 权限适配 + 批量导入重构 |
### 内网地址变更
| 服务 | 部署前地址 | 部署后地址 | 状态 |
|------|-----------|-----------|------|
| Node.js后端 | `172.17.197.32:3001` | `172.17.197.36:3001` | ✅ 已变更 |
| 前端Nginx | `172.17.197.32:80` | `172.17.173.104:80` | ✅ 已变更 |
---
## 一、数据库更新
### 1.1 DB-1modules 表数据更新
通过 `node scripts/seed-modules.js` 连接 RDS 外网执行upsert 幂等操作):
| 操作 | 模块代码 | 名称 | 说明 |
|------|---------|------|------|
| 新增 | `RM` | 研究管理 | 排序 9 |
| 新增 | `AIA_PROTOCOL` | 全流程研究方案制定 | 排序 100 |
| 更新 | `IIT` | CRA质控 | 原名 IIT Manager |
执行结果modules 表共 10 个模块,全部上线 ✅
### 1.2 未执行项
| 项目 | 原因 |
|------|------|
| DB-2RVW Prompt 更新 | 用户指定不执行 |
| DB-3SSA 双通道表结构 | 待后续部署 |
---
## 二、Node.js后端更新v2.4 → v2.6
### 2.1 主要变更9 项)
| 类别 | 变更内容 |
|------|---------|
| 登录安全 | 同一手机号登录踢人机制JWT tokenVersion + 缓存校验) |
| 权限体系 | `/me/modules` API 尊重 user_modules 精细化配置 |
| 权限体系 | 用户模块配置校验放宽(模块代码存在即可,不限租户订阅) |
| 权限体系 | user_modules 独立生效(如 AIA_PROTOCOL 可单独配给用户) |
| 模块名称 | getModuleName 补充 RM、AIA_PROTOCOL、IIT→CRA质控 |
| RVW | 稿约 Prompt 源文件期刊名称修正 |
| Seed | 内部租户补充 RM、AIA_PROTOCOL 模块 |
| SSA | 双通道架构Agent 模式 4 服务 + ChatHandler 分流 |
| 用户管理 | 批量导入增加 autoInheritModules + 模块校验 |
### 2.2 镜像信息
| 项目 | 值 |
|------|---|
| ACR 仓库 | `backend-service` |
| 镜像版本 | v2.4 → **v2.6** |
| Digest | `sha256:17dc3b3b6171bad891b0d366a22e1b52d79db7fc9caccedf816a7feab4cea449` |
| 内网地址 | `http://172.17.197.36:3001` |
---
## 三、前端Nginx更新v2.0 → v2.3
### 3.1 主要变更11 项)
| 类别 | 变更内容 |
|------|---------|
| ASL | 隐藏数据源/年限/篇数 + 去掉研究方案生成/文献管理 + 默认进入智能文献检索 |
| AIA | 删除「已接入DeepSeek」和搜索框 + Protocol Agent 按权限动态显示 |
| AIA | 数据评价与预处理/智能统计分析链接修正 |
| 首页 | 重定向到 `/ai-qa`,不再显示模块卡片首页 |
| PKB | 创建知识库时隐藏科室选择,默认 General |
| 安全 | 被踢出时提示「账号已在其他设备登录」 |
| 运营端 | 用户模块权限弹窗显示所有模块(含未订阅标注) |
| 运营端 | 批量导入用户重构为 4 步流程 + 自动继承租户模块 |
### 3.2 镜像信息
| 项目 | 值 |
|------|---|
| ACR 仓库 | `ai-clinical_frontend-nginx` |
| 镜像版本 | v2.0 → **v2.3** |
| Digest | `sha256:db031053d8ac50d8f2ce39a8406534743d974a5506b7d4af5a944dd145ce8589` |
| 内网地址 | `http://172.17.173.104:80` |
---
## 四、环境变量联动更新
| 服务 | 环境变量 | 旧值 | 新值 |
|------|---------|------|------|
| frontend-nginx-service | `BACKEND_SERVICE_HOST` | `172.17.197.32` | `172.17.197.36` |
> CLB 负载均衡器由阿里云自动更新,无需手动操作。
---
## 五、待后续部署项
| 项目 | 说明 |
|------|------|
| DB-3 | SSA 双通道表结构ssa_sessions + ssa_agent_executions |
| R-1 | R 统计引擎新增 execute-code 端点(需重构 R 镜像) |
---
## 六、当前系统配置速查
### 服务内网地址
```
R统计引擎: http://172.17.173.101:8080 (不变)
Python: http://172.17.173.102:8000 (不变)
后端: http://172.17.197.36:3001 (更新)
前端: http://172.17.173.104:80 (更新)
```
### ACR 镜像版本
| 仓库 | 版本 |
|------|-----|
| `ssa-r-statistics` | v1.0.1 |
| `python-extraction` | v1.2 |
| `backend-service` | **v2.6** |
| `ai-clinical_frontend-nginx` | **v2.3** |
### 公网访问
```
CLB: http://8.140.53.236/
域名: https://iit.xunzhengyixue.com/
```
---
---
## 七、二次热修部署(同日)
### 7.1 触发原因
- SSA 智能统计分析上传文件报错:`The column execution_mode does not exist in the current database`
- 前端/后端其他 bug 修复(基于测试反馈)
### 7.2 数据库热修
| 操作 | 内容 | 状态 |
|------|------|------|
| ALTER TABLE | `ssa_sessions` 新增 `execution_mode` 列(默认 `'qper'` | ✅ |
| CREATE TABLE | `ssa_agent_executions` 表 + 索引 + 外键 | ✅ |
| INSERT | Prisma 迁移记录同步注册 | ✅ |
### 7.3 镜像重构与部署
| 服务 | 版本变化 | 镜像 Digest | IP 变化 |
|------|---------|-------------|---------|
| Node.js 后端 | v2.6 → **v2.7** | `sha256:bfb7d3e6ce39...` | `172.17.197.36``172.17.197.37` |
| 前端 Nginx | v2.3 → **v2.4** | `sha256:03fab06fb1a2...` | `172.17.173.104``172.17.173.105` |
### 7.4 最终系统配置
```
后端: http://172.17.197.37:3001
前端: http://172.17.173.105:80
R统计引擎: http://172.17.173.101:8080
Python: http://172.17.173.102:8000
```
| ACR 仓库 | 最终版本 |
|----------|---------|
| `backend-service` | **v2.7** |
| `ai-clinical_frontend-nginx` | **v2.4** |
| `ssa-r-statistics` | v1.0.1 |
| `python-extraction` | v1.2 |
---
> **文档版本**v1.1
> **最后更新**2026-03-05
> **维护人员**:开发团队