動作
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)
狀態:
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_search靠raw_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:」)不誤補。
部署注意¶
-
啟用需在部署機
.env設ICD_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,未實作)。
沒有任何資料可供顯示
動作