Method · 4 layers

Pipeline 四层架构详解

每一层的输入 / 输出 / 关键代码 / prompt 设计。所有判断都可追溯到 fact 和 knowledge。

Pipeline Flow

数据怎么流

DATA LAYER (输入) KNOWLEDGE LAYER ───────────────── ────────────────── generator v2.1 (sensor/EMA/量表/ knowledge/*.json (35 条) notes/BPSD events) ↑文献 + 李医生采访固化 real baseline (4 受试者) ↑evidence level + PMID │ │ ▼ │ ┌─────────────────────────────────┐ │ │ ANALYZER (无 LLM, 纯统计 + 模板) │ │ │ • outlier (z-score) │ │ │ • trend (linregress 30 天) │ │ │ • comparison (前后对比) │ │ │ • difference (双任务代价 DTC) │ │ │ • extreme (极值 + 跨模态签名) │ │ └──────────────┬──────────────────┘ │ │ DataFact[] │ │ (template_text + z + p) │ ▼ │ ┌─────────────────────────────────┐ │ │ KNOWLEDGE ROUTER │◀───────┤ │ fact tags → kb.query() │ │ │ 不全量推送, 按需检索 │ │ └──────────────┬──────────────────┘ │ │ knowledge_text │ ▼ │ ┌─────────────────────────────────┐ │ │ PHYSIO AGENT (LLM 1) │◀───────┤ │ 接 IMU/PPG/EDA fact + KB │ │ │ → biological insight[] │ │ └──────────────┬──────────────────┘ │ │ │ ┌──────────────┼──────────────────┐ │ │ BEHAVIOR AGENT (LLM 2, 并发) │◀───────┤ │ 接 EMA/活动/EDA fact + KB │ │ │ → psychological/behavioral ins │ │ └──────────────┬──────────────────┘ │ │ │ ▼ │ ┌─────────────────────────────────┐ │ │ CLINICAL AGENT (LLM 3, 串行) │◀───────┘ │ 接前两位 insight + 量表 + notes │ │ → 分期 + 鉴别 + 干预 + 转诊 │ └──────────────┬──────────────────┘ │ insight[] (含 supporting_facts + knowledge_ids) ▼ ┌─────────────────────────────────┐ │ NARRATOR (LLM 4) │ │ Threader + Card Render + │ │ Chart Spec → Dashboard │ └──────────────┬──────────────────┘ ▼ 医生版报告 + 家属版简报 + 图表 JSON
Layer 1 · Statistical

Analyzer — 把原始数据变成"医生能读的事实"

不调 LLM。读 generator 的 30 天多模态 CSV + 健康参考范围, 跑 5 类统计检测, 输出 DataFact[]

输入
  • data_v2/P01/sensor/*.csv (4 任务 × 30 天 = 120 文件)
  • data_v2/P01/ema.jsonl (90 条 EMA)
  • data_v2/P01/surveys.jsonl (5 周量表)
  • data/baseline 4.8/normal_reference_ranges.csv
输出 (P01 实跑)
  • 34 条 DataFact
  • 类型: outlier 8 / trend 22 / comparison 3 / difference 1
  • 模态: imu 12 / ppg 6 / eda 6 / ema 4 / survey 3 / audio 3
5 类 Fact 检测公式
# Outlier
z = (current - baseline_mean) / baseline_sd
if abs(z) > 2.0: → "异常 (升/降)至 X (基线 Y±Z, z=±N)"

# Trend (30 天)
slope, _, r, p, _ = linregress(days, values)
if p < 0.05 and abs(r) > 0.3: → "X 在过去 N 天呈 (升/降) 趋势"

# Comparison (前后对比)
pct = (m2 - m1) / m1 * 100
if abs(pct) > 10: → "X 由 m1 变为 m2 (Δ=±%)"

# Difference (双任务代价 DTC)
dtc = (single - dual) / single * 100
if dtc > 20: → "双任务代价 N% (单任务 X, 双任务 Y)"

# Extreme (跨模态签名)
if EDA↑ + HR↑ + IMU↑ at same timestamp:
    → "cross_modal_signature: sundowning/agitation"

关键设计: Analyzer 是确定性的, 同样输入永远同样 fact。所有定量计算都在这一层完成, LLM 永远拿到的是"已计算好的事实"。

Layer 2 · Retrieval

KnowledgeStore — 文献/采访固化的可检索专家库

35 条 JSON 知识条目, 涵盖 GDS 分期 + 4 模态传感器标志物 + BPSD 七症状 + MCR + 步态常模 + 药物。每条带 evidence.level (A-D) + PMID。

知识结构
{
  "id": "BPSD_SUNDOWNING_001",
  "category": "bpsd",
  "modality": ["eda","ppg","imu"],
  "applicable_stages": ["mci","mild_ad","moderate_ad"],
  "clinical": {
    "prevalence": "20-45%",
    "features": "下午 4-6 点症状加重"
  },
  "detection": {
    "sensor_signature": "EDA + HR 渐进性升高",
    "thresholds": {"time_window": "16:00-18:00"}
  },
  "intervention": {
    "first_line": "光照治疗"
  },
  "evidence": {
    "level": "C",
    "sources": [{"citation": "Canevelli 2016", "pmid": "..."}]
  }
}
路由规则
# 按 fact 决定查什么
for fact in facts:
    if fact.modality == "imu":
        kb.query(modality="imu",
                 category="sensor")
    if fact.pattern == "sundowning":
        kb.query_bpsd("mci")
    if patient.stage:
        kb.query_staging(stage)

# 返回 markdown 块
# 拼到 Agent prompt
Layer 3 · LLM Synthesis

三个 LLM Agent — 把事实和知识结合成临床洞察

PhysioAgent

接 IMU / PPG / EDA / Audio 的传感器 fact + 模态相关知识 → 输出 biological insight (步态 / HRV / 自主神经)。

≈ 神经内科 + 康复 + 言语治疗师

BehaviorAgent

接 EMA / 活动模式 / EDA 反应性 / BPSD 事件 fact + BPSD 知识 → 输出 psychological / behavioral insight。负责信号消歧 (HR↑ 是激越还是运动?)。

≈ 精神科 + 行为分析师

ClinicalAgent

不接原始 fact, 只接前两位 insight + 量表 + clinical note → 输出 分期倾向 + 鉴别诊断 + 干预优先级 + 转诊建议

≈ MDT 主持的高年资神经科医生

每条 Insight 的强制结构
{
  "id": "ins_physio_001",
  "observation": "客观传感器观察 (≤30字)",
  "clinical_implication": "临床含义 (≤50字, 必须基于 KB)",
  "domain": "biological|psychological|behavioral",
  "supporting_facts": ["F03", "F05"],          ← 强制引用 fact_id
  "supporting_knowledge": ["SENSOR_IMU_001"],  ← 强制引用 KB id
  "confidence": 0.0-1.0,
  "differential": "需鉴别的项 (如有)"
}

关键设计: 每条 insight 必须列出 supporting_facts + supporting_knowledge。这让医生可以反查任意结论 → 找到原始数值和文献依据。Agent 不许虚构数字 (system_prompt 强制), 不许引用未提供的知识。

Layer 4 · Narrative

Narrator — 把 insight 变成医生 / 家属能读的叙事 + 图表

Threader 按 alert + confidence 排序 → Insight Card 用两段式 (观察 + 加粗的临床含义) 渲染 → Chart Spec 自动生成 Recharts JSON 配置。

Insight Card 模板 (MIND L1)
## 步态衰退轨迹

步速在过去 21 天持续下降,
从 1.05 m/s 降至 0.82 m/s,
接近 Verghese MCR 阈值 (0.8 m/s)。

**这是 AD 前驱期最典型的步速拐点表现,
与海马-前额叶环路早期受累一致
(Buracchio 2010)。**
Chart Spec 自动生成
{
  "id": "chart_001",
  "linked_insight": "ins_physio_002",
  "type": "line",
  "data": [
    {"day": 0,  "speed": 1.05},
    {"day": 30, "speed": 0.78}
  ],
  "annotations": [
    {"type":"hline", "value":0.95,
     "label":"baseline"},
    {"type":"hline", "value":0.80,
     "label":"MCR threshold",
     "style":"dashed-red"}
  ]
}
Cost & Latency

实跑成本与时延

每次评估时延

T+0 Analyzer (无 LLM): ~2 s
T+2.5s PhysioAgent + BehaviorAgent (并发): ~4 s
T+6.5s ClinicalAgent (串行): ~4 s
T+10s Narrator: ~3 s
总计 ~13 秒

Token 与成本

4 次 LLM 调用, 平均每次 1500 input + 500 output
6000 input + 2000 output per evaluation
sonnet-4: ~$0.025 / 次
每周 1 次稳定期评估 → ~$1.3 / 月 / 患者