專案

一般

配置概況

動作

Feature #330

進行中
SC

ICD-10 外傷 B1:faceted Stage1 漏抽以表單點名補回(ICD_ROLLCALL,330 案 A/B +19 碼退步 0)

Feature #330: ICD-10 外傷 B1:faceted Stage1 漏抽以表單點名補回(ICD_ROLLCALL,330 案 A/B +19 碼退步 0)

是由 Sashiba Chou26 天 前加入.

狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-07-07
完成日期:
完成比例:

0%

預估工時:

概述

ICD-10 外傷 pipeline B1:faceted Stage1 漏抽以表單「點名」補回(add-only,ICD_ROLLCALL 開關,330 案 A/B +19 碼退步 0)

背景

#325 後的外傷 pipeline B 區塊。faceted 管線的 Stage1(LLM 抽傷)偶爾會漏抽醫師已明確記錄的傷(尤其多傷病歷),漏掉的傷後續完全不進檢索/排序,無論後段多準都救不回。

前端 ReviewTab 送 /predict_icd10本來就附帶 fallback_injuries(人體圖點選清單,如 "Laceration on Head"),但 faceted 路徑原本在入口就把它丟棄(只有舊 legacy 用得到)。等於一張現成的安全網沒接上電。

本 ticket 把它接上,做**「點名補漏」**:拿醫師親手點的清單對 Stage1 抽取點名,補回被漏掉的傷。

變更內容(backend/rag_service.py)

1. 表單傷情 → 可檢索 facet

  • _parse_fallback_facet:把表單字串解析成最小 facet。傷型/部位以中英雙語關鍵字 best-effort 解析(specific-first),猜不到留 None —— 交由 faceted_searchraw_text 語意檢索 + where 過濾放寬補救。純部位標題/徵象行(無可編傷情詞)回 None 不編。

2. add-only 點名合併

  • _rollcall_merge / _is_covered:Stage1 未涵蓋(同傷型 + 部位相容)的表單傷才補進,絕不刪改既有抽取。fallback 內部去重。

3. 隔離排序(關鍵,防退步)

  • 補進的傷標記 _rollcall,於 predict 端另開一次 Stage3 排序,不併入原傷的 joint LLM prompt。原傷排序輸入與 baseline 逐字相同 → B1 不擾動原傷選碼(只加不改)。
  • 初版曾把補進的傷併入同一 prompt,導致 LLM 連原傷選碼都變(case 87 退步);改為隔離排序後解決。

4. Feature-flag(比照 faceted / sapbert 上線紀律)

  • env ICD_ROLLCALL:on 啟用 / off(預設)完全忽略 fallback_injuries,行為與過往逐位元相同 = rollback 路徑。

5. 回歸 benchmark 工具強化(backend/tests/test_icd10_accuracy.py)

  • --with-fallback:從病歷 PE 段合成 fallback_injuries(還原真實前端送出樣態,考卷不再低估真實用法)。
  • --limit N 取樣;逐案記錄 rollcall_added(可把 B1 真實貢獻與 LLM 跨輪雜訊分開);client timeout 120→240s。

Benchmark 結果(330 案例 A/B,openai + sapbert + faceted,兩輪皆 0 錯誤)

指標 off(基準) on(B1)
PASS(全對) 221/330 (67.0%) 235/330 (71.2%) +14 案
碼召回(exact) 553/678 (81.6%) 572/678 (84.4%) +19 碼

分區(把 B1 真實貢獻與 AI 雜訊分開):

  • B1 有出手(補了漏傷)51 案:改善 16、退步 0。
  • B1 未出手 279 案:+3 / −1 為 LLM 排序跨輪雜訊(與 B1 無關,大致對消)。

驗收標準

  • 「B1 有出手」分區 退步 0;整體碼召回 只升不降
  • 典型漏傷案例補回:老人跌倒髖+腕骨折兩條都漏 → 全補回置頂;漏髖骨折 → 補回。
  • ICD_ROLLCALL=off 時行為與過往逐位元相同(rollback 可驗)。
  • 純部位標題/徵象行(「Head: pain」「Extremities:」)不誤補。

部署注意

  • 啟用需在部署機 .envICD_ROLLCALL=on(比照 ICD_EMBED=sapbert,.env 未進版控,屬部署步驟)。不設則安全預設 off、B1 不生效。
  • 回滾:.env 改回 ICD_ROLLCALL=off 重啟即退。
  • 前端已送 fallback_injuries,無需前端改動,end-to-end 即通。

後續(另案)

  • B2 per-injury 排序(ICD_RANK 開關,保留 rollback)。
  • A1 複製行為記錄(隱性相關性標註)。
  • B3 後續:醫師複查 72 高訊號 facet 異常後修 icd10_facets_validated.json 重建兩個 faceted collection。
  • B4 外因碼(V/W/X/Y,計畫書 docs/icd10-external-cause-plan.md,未實作)。

沒有任何資料可供顯示

動作

匯出至 PDF Atom