ASL Tool 3 Development Plan: - Architecture blueprint v1.5 (6 rounds of architecture review, 13 red lines) - M1/M2/M3 sprint checklists (Skeleton Pipeline / HITL Workbench / Dynamic Template Engine) - Code patterns cookbook (9 chapters: Fan-out, Prompt engineering, ACL, SSE dual-track, etc.) - Key patterns: Fan-out with Last Child Wins, Optimistic Locking, teamConcurrency throttling - PKB ACL integration (anti-corruption layer), MinerU Cache-Aside, NOTIFY/LISTEN cross-pod SSE - Data consistency snapshot for long-running extraction tasks Platform capability: - Add distributed Fan-out task pattern development guide (7 patterns + 10 anti-patterns) - Add system-level async architecture risk analysis blueprint - Add PDF table extraction engine design and usage guide (MinerU integration) - Add table extraction source code (TableExtractionManager + MinerU engine) Documentation updates: - Update ASL module status with Tool 3 V2.0 plan readiness - Update system status document (v6.2) with latest milestones - Add V2.0 product requirements, prototypes, and data dictionary specs - Add architecture review documents (4 rounds of review feedback) - Add test PDF files for extraction validation Co-authored-by: Cursor <cursoragent@cursor.com>
6.6 KiB
ASL 工具 3:全文智能提取数据字典与变量规范 (EBM Expert 版)
文档目的: 为 ASL 工具 3 的底层大模型 (如 DeepSeek-V3) 定义结构化的提取目标 (JSON Schema),确保提取的数据能完美喂给下游的系统综述 (Tool 4) 和 Meta 分析引擎 (Tool 5)。
设计原则: 模块化、按需动态提取、强制 Quote 溯源。
🎯 核心逻辑:提取什么取决于下游“要画什么图”
工具 3 的提取不是盲目的,它的所有字段都严格服务于最终的科研图表。我们将其分为四大核心模块:
模块一:通用基础元数据 (Basic Metadata)
提取来源: PDF 首页、标题、摘要、致谢部分。
下游用途: 形成文献特征清单、排查同一临床试验的重复发表。
| 变量名 (JSON Key) | 字段含义 | 数据类型 | 提取位置说明 |
|---|---|---|---|
| study_id | 研究标识 (第一作者+年份) | String | 通常在全文头部,例:Gandhi 2018 |
| nct_number | 临床试验注册号 | String | 摘要末尾或方法学开头,用于多篇文章去重 |
| study_design | 研究设计类型 | Enum | 摘要或方法学 (如 RCT, Cohort Study) |
| funding_source | 资金来源与利益冲突 | String | 文章末尾 Funding / COI 部分 |
模块二:基线特征数据 (Baseline Characteristics)
提取来源: 核心来源于文献中的 Table 1。
下游用途: 直接送入【工具 4】,由后端矩阵转置后,自动拼装成论文的《表 1. 纳入研究基线特征总表》。
注:基线数据具有一定的领域特异性,以下为最通用的核心变量。
| 变量名 (JSON Key) | 字段含义 | 数据类型 | 提取位置说明 |
|---|---|---|---|
| treatment_name | 实验组干预措施 | String | Table 1 表头或方法学,需包含剂量/频次 |
| control_name | 对照组干预措施 | String | Table 1 表头或方法学 (如 Placebo) |
| n_treatment | 实验组样本量 | Integer | Table 1 顶部列总数 (N=xxx) |
| n_control | 对照组样本量 | Integer | Table 1 顶部列总数 (N=xxx) |
| age_treatment | 实验组年龄 (Mean±SD) | String | Table 1 中的 Age 行 |
| age_control | 对照组年龄 (Mean±SD) | String | Table 1 中的 Age 行 |
| male_percent | 男性比例 (%) | String | Table 1 中的 Sex/Gender 行计算或直提 |
模块三:方法学与偏倚风险评估 (Risk of Bias - RoB 2.0)
提取来源: 核心来源于文献的 Methods (方法学) 正文段落。
下游用途: 送入【工具 4】,生成 Cochrane 标准的“偏倚风险红绿灯图”。
大模型需要像方法学专家一样,阅读方法学正文并进行定性评价 (Low/High/Unclear Risk):
| 变量名 (JSON Key) | 评估维度 (RoB 2.0) | AI 判断逻辑与提取目标 |
|---|---|---|
| rob_randomization | 随机序列产生 | 寻找 "computer-generated", "random number table" 等词,评估是否为真随机。 |
| rob_allocation | 分配隐藏 | 寻找 "central web-based", "opaque envelopes" 等词。 |
| rob_blinding | 盲法实施 | 寻找 "double-blind", "open-label" 以及盲法对象 (患者、研究者、结局评估者)。 |
| rob_attrition | 失访与数据完整性 | 从 Results 或 Consort 图中提取失访率,寻找 "Intention-to-treat (ITT)" 分析字眼。 |
模块四:结局指标数据 (Outcomes) —— ⚠️ 动态提取的核心
这是最复杂的部分。根据用户在【工具 5】中想要做的 Meta 分析类型的不同,工具 3 必须动态切换其提取的 JSON Schema。
提取来源:正文的 Results 段落、Table 2/3 (结局表)、Kaplan-Meier 曲线下方的文字。
场景 A:生存分析 / 时间-事件分析 (适用于肿瘤、心血管)
关注点: 结局不仅看是否发生,还看“何时”发生。
提取字典 (送入 Tool 5 的 HR 模板):
- endpoint_name: 终点名称 (如 OS, PFS, MACE)
- hr_value: 风险比 (Hazard Ratio)
- hr_ci_lower: 95% 置信区间下限
- hr_ci_upper: 95% 置信区间上限
- p_value: 统计学 P 值
场景 B:二分类数据 (适用于感染率、死亡率、有效/无效)
关注点: 绝对的发生人数与总人数。
提取字典 (送入 Tool 5 的 Dichotomous 模板):
- event_treatment: 实验组发生事件的具体人数 (从正文或表格中抓取)
- total_treatment: 实验组该指标的分析总人数 (注意:可能与基线总人数不同,需看是否排除失访)
- event_control: 对照组发生事件的具体人数
- total_control: 对照组分析总人数
场景 C:连续型数据 (适用于评分量表、血压下降值、住院天数)
关注点: 均值、标准差与样本量。
提取字典 (送入 Tool 5 的 Continuous 模板):
- mean_treatment: 实验组结局指标均值
- sd_treatment: 实验组结局指标标准差 (SD) (注:若原文提供 SE 或 95% CI,要求 LLM 尝试换算为 SD,或原样摘录待人工换算)
- n_treatment: 实验组分析人数
- mean_control: 对照组均值
- sd_control: 对照组标准差
- n_control: 对照组分析人数
模块五:Quote 溯源系统 (Anti-Hallucination)
这是我们系统的底层信任机制。
上述四大模块中,每一个提取出的字段(尤其是数字),都必须在 JSON 中强制附带一个成对的 _quote 字段。
示例 (LLM 输出格式):
{
"hr_value": 0.63,
"hr_value_quote": "The risk of disease progression or death was significantly lower in the intervention group (hazard ratio, 0.63; 95% CI, 0.52 to 0.76; P<0.001)."
}
规范要求:
- Quote 必须是 PDF 解析出的 Markdown 中的原话,不得修改任何一个单词。
- 对于表格中提取的数据,Quote 必须指出表名与行列坐标,例如:"Table 2, Row 'Overall Survival', Column 'Hazard Ratio'."
📊 最终输出报告 (Output)
当【工具 3】完成批处理后,它的输出不是一篇长篇大论的文章,而是两项高度结构化的科研资产:
- 供人查阅的 Excel 数据宽表 (Data Extraction Matrix):
- 行:每一篇文献(Study)。
- 列:上述所有提取的变量。
- 相邻列:每一个变量紧跟一列对应的 Quote 原文。
- 这张表医生可以直接带走,作为发顶刊时必备的 Supplementary Appendix。
- 供系统流转的 JSON Payload:
- 系统在后台将这些结构化数据自动推送至【工具 4】画图,推送至【工具 5】执行 R 语言计算。