專案

一般

配置概況

動作

Feature #152

已結束
SC SC

實作 RAG-based ICD-10 編碼系統並優化急診編碼規則

Feature #152: 實作 RAG-based ICD-10 編碼系統並優化急診編碼規則

是由 Sashiba Chou約 2 個月 前加入. 於 約 2 個月 前更新.

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

100%

預估工時:
2:00 小時
耗用工時:

概述

重構 ICD-10 預測功能:導入 RAG 架構與急診編碼規則

將原本直接使用 LLM 的 ICD-10 預測功能,重構為 RAG (Retrieval-Augmented Generation) 架構,並加入急診室專用的編碼規則,大幅提升編碼準確性。

變更內容

  1. 新增 RAG 服務 (backend/rag_service.py)
    實作三階段 RAG Pipeline:
  • Extract: LLM 從創傷筆記提取各項傷害描述
  • Search: ChromaDB 向量搜索找出候選 ICD-10 代碼 (top 30)
  • Rank: LLM 根據 ER Coding Rules 篩選並排名
  1. 向量資料庫整合
  • 使用 ChromaDB 作為持久化向量資料庫
  • 使用 Sentence Transformers (paraphrase-multilingual-MiniLM-L12-v2) 進行多語言向量嵌入
  • 已建立索引包含 73,681 個 ICD-10 代碼
  1. ER Coding Rules 實作
    新增急診室專用編碼規則,確保輸出符合臨床情境:
規則 說明
Rule 1 強制使用 A 結尾代碼 (Initial encounter),禁止 D (Subsequent) 和 S (Sequela)
Rule 2 若未提及異物,優先選擇 "without foreign body" 代碼
Rule 3 正確匹配側別 (左/右/未明示)
Rule 4 每項傷害提供 3 個候選代碼,含信心分級 (high/medium/low)
  1. API Response 格式更新

{
  "predictions": [
    {
      "injury_source_text": "laceration on left forearm",
      "candidates": [
        {
          "code": "S51.812A",
          "description_zh": "...",
          "confidence": "high"
        },
        {
          "code": "S41.112A",
          "description_zh": "...",
          "confidence": "medium"
        },
        {
          "code": "S61.512A",
          "description_zh": "...",
          "confidence": "low"
        }
      ]
    }
  ]
}
  1. 候選代碼過濾機制
    新增 _filter_candidates_by_rules() 函數,在 fallback 時自動過濾:
  • D/S 結尾的代碼
  • "with foreign body" 代碼(除非文本明確提及異物)

檔案變更

檔案 狀態 說明
backend/rag_service.py 新增 RAG 服務核心邏輯
backend/main.py 修改 整合 RAG 服務、更新 Pydantic 模型
backend/requirements.txt 修改 新增 chromadb, sentence-transformers, pandas
backend/chroma_db/ 新增 向量資料庫儲存目錄
reference/icd10_clean.csv 新增 ICD-10 代碼資料來源

新增依賴


chromadb>=0.4.0
sentence-transformers>=2.2.0
pandas>=2.0.0

測試結果

輸入:

"Patient presents with a 3cm laceration on the left forearm and contusion on the right knee after a fall."

輸出:

  • S51.812A - 左側前臂撕裂傷未伴有異物之初期照護
  • S80.01XA - 右側膝部挫傷之初期照護

相關 Issue

  • 解決:RAG 結果過於具體的問題(如隨機選擇 "with foreign body" 或 "subsequent encounter")

SC 是由 Sashiba Chou約 2 個月 前更新 動作 #1

  • 狀態New 變更為 Closed
動作

匯出至 PDF Atom