Summary: - Implement L2 Statistical Validator (CI-P consistency, T-test reverse) - Implement L2.5 Consistency Forensics (SE Triangle, SD>Mean check) - Add error/warning severity classification with tolerance thresholds - Support 5+ CI formats parsing (parentheses, brackets, 95% CI prefix) - Complete Python forensics service (types, config, validator, extractor) V2.0 Development Progress (Week 2 Day 6): - Day 1-5: Python service setup, Word table extraction, L1 arithmetic validator - Day 6: L2 StatValidator + L2.5 consistency forensics (promoted from V2.1) Test Results: - Unit tests: 4/4 passed (CI-P, SE Triangle, SD>Mean, T-test) - Real document tests: 5/5 successful, 2 reasonable WARNINGs Status: Day 6 completed, ready for Day 7 (Skills Framework) Co-authored-by: Cursor <cursoragent@cursor.com>
8.1 KiB
RVW V2.0 MVP 产品需求文档 (PRD)
项目名称: RVW 智能审稿系统 V2.0 (Intelligent Review Engine)
核心战役: "数据侦探" (Data Forensics) + "柔性架构" (Skills Architecture)
文档版本: v1.0 (Draft)
优先级: P0
面向对象: 产品经理、后端工程师、Python 工程师、前端工程师
1. 项目背景与目标 (Background & Goals)
1.1 背景
当前的 RVW 模块(v3.2)是一个基于 LLM 的“文档阅读器”,能较好地完成稿约规范性和方法学评估。然而,在面对中文核心期刊(对政治安全和数据造假的零容忍)和高水平英文期刊(对学术深度的要求)时,系统存在以下痛点:
- 数据验证能力缺失:无法识别表格中的数据造假(如 P 值捏造、合计错误)。
- 架构僵化:无法针对不同期刊配置不同的审稿流程(如 A 期刊查政治,B 期刊查数据)。
- PDF 解析瓶颈:复杂表格在 PDF 中识别率低,导致计算不可行。
1.2 核心目标
本期项目采用 “垂直切片 (Vertical Slice)” 策略,不追求大而全,而是集中兵力攻克核心技术壁垒。
- 业务目标:实现对 Word 稿件 中表格数据的**“审计级”验证**,包括算术自洽性和基础统计复核。
- 架构目标:落地 Skills (技能) 架构,将审稿能力原子化,为未来扩展(如政治审查、竞品对标)奠定底座。
- 交付物:一个能自动提取 Word 表格、计算数据错误、并在前端高亮显示的 MVP 版本。
2. 用户画像与场景 (User Stories)
| 用户角色 | 典型场景 | 期望结果 |
|---|---|---|
| 期刊初审编辑 | 收到一篇包含 5 个表格的 Word 稿件,怀疑作者捏造了 P 值。 | 上传稿件后,系统自动高亮 Table 1 中的 3 处算术错误,并提示 Table 2 的 P 值与数据不符(计算值 0.04 vs 报告值 0.8)。 |
| 系统管理员 | 需要为医学类期刊配置“强制数据检查”,为社科类期刊配置“仅文本检查”。 | 能够在后台通过 Profile 配置文件,灵活组合不同的 Skill(技能)。 |
| 开发人员 | 需要快速新增一个“图片查重”功能。 | 能够开发一个新的 Skill 并注册到系统,无需修改核心审稿逻辑代码。 |
3. MVP 范围定义 (Scope)
为了确保 3 周内上线,我们严格划定 MVP 边界:
| 维度 | ✅ MVP 包含 (In Scope) | ❌ MVP 不包含 (Out of Scope) |
|---|---|---|
| 文件格式 | Word (.docx, .doc) 优先 | PDF, 图片扫描件 |
| 表格类型 | 三线表 (Standard Tables) | 跨页断裂表、极其复杂的嵌套表 |
| 验证深度 | L1 (算术) + L2 (基础 P 值) | L3 (回归逻辑), L4 (跨表一致性) |
| Skill 数量 | DataForensicsSkill (数据侦探) | 政治审查、竞品对标、方法学检查 |
| 架构改造 | Skill Interface, Profile Config | 动态 Profile 管理 UI, 计费系统 |
| 前端交互 | 静态报告 (新增数据验证 Tab) | 交互式 Chat, 在线修改表格 |
4. 详细功能需求 (Functional Requirements)
4.1 核心功能:数据侦探 (Data Forensics)
FR-1: Word 表格精准提取
- 输入:Word 文档流。
- 逻辑:
- 识别文档中的所有表格对象。
- 关键:合并单元格处理。对于 Merge Cells,必须采用 Forward Fill (向前填充) 策略。
- Case: 表头 "Group A" 跨了两列,提取后的 DataFrame 这两列的表头都应为 "Group A"。
- 关联 Caption:自动向前回溯,提取表格上方的 "Table X. xxxx" 作为表格标题。
- 输出:结构化的 JSON 数据(包含每个单元格的值、坐标)。
FR-2: L1 算术自洽性验证
- 逻辑:Python 后端对提取的 DataFrame 进行计算。
- Sum Check:识别 "Total" 列,验证是否等于其他列之和。
- Percentage Check:识别 n (%) 格式,验证 n/N 是否等于 %。
- 容错:允许 ±0.1% 的舍入误差。
FR-3: L2 统计学复核
- 逻辑:针对 T 检验和卡方检验的逆向验证。
- 识别:从表头或单元格中提取 Mean ± SD 或 n (%)。
- 计算:调用 scipy.stats 计算 P 值。
- 比对:将计算出的 P 值与表中报告的 P 值比对。
- 阈值:差异 > 0.05 视为重大错误(Error),0.01-0.05 视为警告(Warning)。
4.2 架构功能:Skills 引擎
FR-4: Skill 接口标准
- 系统必须定义统一的 Skill 接口:
interface Skill {
id: string;
run(context: DocumentContext, config: any): Promise<SkillResult>;
}
FR-5: Profile 配置驱动
- 审稿流程不再硬编码。
- 系统读取 journal_profile.json,其中定义了 skills: ["DataForensicsSkill"]。
- Worker 根据配置依次调度 Skill。
5. 技术架构与实现 (Technical Architecture)
5.1 数据流图 (Data Flow)
graph LR
Word[Word稿件] --> Python[Python Microservice]
Python --"1.提取表格\n2.Pandas计算"--> Result[JSON验证结果]
Result --> Node[Node.js Backend]
Node --"封装为"--> Skill[DataForensicsSkill]
Skill --> DB[Postgres (rvw_schema)]
DB --> UI[前端报告页]
5.2 Python 服务升级 (python-extraction)
- 新增库:python-docx, pandas, scipy, libreoffice (Docker内)。
- 新增接口:POST /api/v1/forensics/analyze_docx。
- 核心类:
- DocxTableExtractor: 负责 DOM 解析和清洗。
- StatValidator: 负责数学计算。
5.3 Node.js 后端升级
- 目录结构:
- modules/rvw/skills/core/: 存放基础接口 (Skill, SkillRegistry)。
- modules/rvw/skills/library/: 存放具体实现 (DataForensicsSkill)。
- 数据库变更:
- ReviewTask 表增加 contextData (Json) 字段,用于存储 Skill 的输出。
5.4 前端升级 (frontend-v2)
- TaskDetail:新增一个 Tab "数据验证 (Data Forensics)"。
- 展示组件:
- 左侧:渲染还原后的 HTML 表格。
- 右侧:错误列表(点击错误项,表格中对应单元格高亮变红)。
6. 实施路线图 (Roadmap)
我们采用 3 周冲刺 计划。
Week 1: 攻克算力 (Python & Word)
- 目标:Python API 能跑通,准确提取 Word 表格并算出错误。
- 关键任务:
- 集成 LibreOffice 实现 doc 转 docx。
- 编写 DocxTableExtractor (重点解决合并单元格)。
- 编写 StatValidator。
Week 2: 架构封装 (Node.js)
- 目标:后端代码 Skills 化,不再写死逻辑。
- 关键任务:
- 定义 TypeScript Skill 接口。
- 实现 DataForensicsSkill (调用 Python)。
- 改造 ReviewService 使用 Profile 配置。
Week 3: 前端与交付
- 目标:用户可见。
- 关键任务:
- 开发数据验证报告 UI。
- 全链路联调测试。
- 部署上线。
7. 验收标准 (Acceptance Criteria)
- 准确性:上传一份标准的临床三线表 Word 文档,表格数据提取准确率需达到 99%(无错行错列)。
- 验证能力:
- 能检出明显的 Sum 错误(如 50+50=90)。
- 能检出明显的 P 值错误(如两组数据差异巨大但 P=0.8)。
- 稳定性:处理 100 页的 Word 文档不超时(或有合理的异步处理机制)。
- 架构规范:后端代码中不存在硬编码的审稿逻辑,必须通过 Skill 模式调用。
8. 附录:数据结构示例
Python 返回的 JSON 格式:
{
"tables": [
{
"id": "tbl_0",
"caption": "Table 1. Baseline Characteristics",
"issues": [
{
"severity": "ERROR",
"cell_ref": "R3C4",
"message": "Calculated P-value (0.03) differs from reported (0.85)",
"evidence": { "calc": 0.03, "report": 0.85 }
}
],
"data": [ ...二维数组... ]
}
]
}