Doctor 專案改進建議 — 基於 7 個同領域專案的綜合比較分析

本文基於 8 個 GitHub 專案的完整教學分析,提出 Doctor 專案的系統性改進方案。


1. 現狀診斷:Doctor 的定位與核心問題

1.1 Doctor 做了什麼

Doctor 是一個 Streamlit + Google Gemini 的醫病角色扮演模擬器。核心概念:

  • 9 步 system prompt (系統提示詞) 驅動的「臨床博弈引擎」
  • 心理防禦指標(SAI 主導權感知、MF 面具疲勞度、B-D 邊界防禦)
  • <clinical_engine> 內部推演 + <doctor_output> 外部演繹的雙層輸出

1.2 核心問題(5 大缺失)

#問題影響嚴重度
1無醫療資料庫整合所有「臨床推理」全靠 LLM 幻覺 (hallucination),無法查詢真實藥物、疾病、指引🔴 致命
2無實證醫學 (EBM; Evidence-Based Medicine) 支撐鑑別診斷 (differential diagnosis) 缺乏統計依據,純靠 LLM 生成🔴 致命
3無知識檢索 (RAG; Retrieval-Augmented Generation)無法查詢教科書、臨床指引、藥物交互作用資料庫🔴 致命
4單一 LLM 呼叫架構無法路由到專科 agent、無法分工協作🟡 嚴重
5無持久化記憶多輪對話依賴 session_state,無跨 session 病歷管理🟡 嚴重

1.3 Doctor 的亮點(值得保留)

  • Doubt-Driven 懷疑度標籤化:每個診斷標籤綁定 0-100% 懷疑度,概念有價值
  • 反向鑑別搜索:當懷疑度 > 60% 時強制啟動互斥搜索,防止 confirmation bias (確認偏誤)
  • 心理防禦指標儀表板:SAI/MF/B-D 三維度即時監控,UX 設計有特色
  • 對話節奏控制:一次只問一個問題、一次只提一項檢查的限制合理
  • 雙層輸出結構<clinical_engine> 內部推演 + <doctor_output> 外部呈現的分離

2. 七個對照專案的關鍵啟示

2.1 專案對照矩陣

維度DoctorHealthRex/CDSSMediGeniusMedAgentBenchmulti-agent-systemMedicalAI-PlatformMIMIC_RL_COACHDrug-Interaction
0119332797453408
醫療 DB 整合❌ 無✅ STRIDE/STARR⚠️ PDF RAG✅ FHIR R4✅ GraphRAG + FHIR⚠️ Gemini only✅ MIMIC-III❌ 無
推理方式純 prompt統計共現 + MLLangGraph agentFHIR API agentLangGraph + GraphRAGprompt-as-agentRL (DDQN-BCQ)純 prompt
多 agent❌ 單一❌ 模組化✅ 8 node✅ HTTPAgent✅ 5 agent pipeline⚠️ 偽多 agent❌ 單一❌ 單一
可解釋性⚠️ LLM 生成✅ 統計量追溯⚠️ RAG citation✅ API 呼叫追蹤✅ 決策鏈可追溯⚠️ LLM 生成✅ Q-value❌ 無
安全合規❌ 無✅ PHI 保護❌ 無 HIPAA✅ POST 不執行✅ HIPAA 設計⚠️ 基本 auth⚠️ 研究用❌ 無
即時處置⚠️ 建議性⚠️ 建議性⚠️ benchmark✅ 處方 + 審方⚠️ 建議性✅ 治療決策⚠️ DDI 檢查

2.2 每個專案教會我們的一件事

專案核心啟示對 Doctor 的啟發
HealthRex/CDSS臨床推薦用共現統計 + 貝氏條件頻率,不用深度學習——因為臨床需要可解釋性Doctor 的鑑別診斷應有統計依據,不能純靠 LLM
MediGeniusLangGraph 把「醫療對話」拆成 8 個專責 agent (intake → router → RAG → tools → memory → synthesis)Doctor 的 9 步推演應拆成多個 agent,不是一個 prompt
MedAgentBench醫療 agent 必須能操作 EHR (Electronic Health Record; 電子病歷)——讀取、寫入、查詢、決策Doctor 需要 FHIR 介面連接真實臨床資料
multi-agent-system企業級 CDSS 需要 5 agent pipeline (問診 → 診斷 → 治療 → 編碼 → 審核) + HIPAADoctor 應有完整問診到處方的 pipeline
MedicalAI-Platform多模態 (文字 + 影像 + DICOM) 是真實臨床場景的必要能力Doctor 未來應支援影像輸入(X-ray, CT)
MIMIC_RL_COACH敗血症 (sepsis) 治療用 RL 從真實 ICU 數據學習最佳處置策略高危急症的即時處置需要從真實數據學習,不能靠 LLM 猜
Drug-Interaction藥物交互作用檢查是反面教材——純 LLM 做 DDI (Drug-Drug Interaction) 不可靠Doctor 開處方建議時必須查 DrugBank/RxNorm,不能靠 LLM

3. 改進方案:從 Prompt Engine 到 Clinical Intelligence Platform

3.1 改進架構總覽


graph TB
    subgraph "Layer 1: 使用者介面"
        UI[Streamlit UI
保留 Doctor 的儀表板設計] DICOM[DICOM Viewer
影像檢視] end subgraph "Layer 2: Agent 編排 (LangGraph)" Router[Router Agent
分診路由] Intake[Intake Agent
問診採集] Diagnosis[Diagnosis Agent
鑑別診斷] Treatment[Treatment Agent
治療方案] Audit[Audit Agent
安全審核] Psychology[Psychology Agent
保留 Doctor 的 SAI/MF/B-D] end subgraph "Layer 3: 知識工具層" PubMed[PubMed API
文獻檢索] DrugDB[DrugBank/RxNorm
藥物資料庫] Guidelines[臨床指引 RAG
UpToDate/急診教科書] DDI[DDI Checker
藥物交互作用] Lab[Lab Reference
檢驗參考值] FHIR[FHIR R4
EHR 介面] end subgraph "Layer 4: 資料與記憶" VectorDB[ChromaDB/FAISS
向量資料庫] SQLite[SQLite
病歷記憶] KG[Knowledge Graph
Neo4j 醫學圖譜] end UI --> Router DICOM --> Router Router --> Intake Router --> Diagnosis Router --> Treatment Router --> Psychology Intake --> Diagnosis Diagnosis --> Treatment Treatment --> Audit Diagnosis --> PubMed Diagnosis --> Guidelines Treatment --> DrugDB Treatment --> DDI Treatment --> Lab Audit --> FHIR Guidelines --> VectorDB Psychology --> SQLite KG --> Diagnosis

3.2 六大改進模組

模組 A:醫療知識工具層(最高優先)

解決問題: Doctor 完全沒有醫療資料庫整合

工具用途API / 資料來源整合方式
PubMed 檢索查詢最新文獻支持診斷NCBI E-utilities APILangChain PubMed Tool
DrugBank / RxNorm藥物資訊、適應症、劑量DrugBank API / RxNorm RESTFunction calling
DDI 檢查器藥物交互作用即時檢查DDInter / SIDER / ChEMBL結構化查詢 > LLM
臨床指引 RAG急診處置指引、疾病教科書PDF → ChromaDB embeddingRAG retrieval
檢驗參考值正常值範圍 + 異常判讀LOINC code + 自建 JSON確定性查詢(非 LLM)
FHIR R4病歷讀寫標準介面HAPI FHIR / SmileCDRRESTful CRUD

關鍵設計原則(借鑑 HealthRex/CDSS + Drug-Interaction 教訓):

  • 結構化資料庫查詢 > LLM 猜測(DDI、藥物劑量、檢驗正常值必須用 DB)
  • LLM 只做自然語言合成和推理,不做資料查找
  • 每個推薦必須附帶來源引用(PubMed ID / 指引章節)

模組 B:Multi-Agent 架構(借鑑 MediGenius + multi-agent-system)

解決問題: Doctor 的 9 步推演壓在一個 system prompt 裡

 1現在(Doctor):
 2  User Input → [1 個巨大 System Prompt, 9 步推演] → Output
 3
 4改進後:
 5  User Input → Router Agent
 6    ├→ Intake Agent (問診採集, 結構化症狀)
 7    ├→ Diagnosis Agent (鑑別診斷 + 知識工具查詢)
 8    ├→ Treatment Agent (治療方案 + DDI 檢查 + 指引依據)
 9    ├→ Psychology Agent (SAI/MF/B-D, 保留 Doctor 特色)
10    └→ Audit Agent (安全審核 + HIPAA 合規)

技術選型: LangGraph(借鑑 MediGenius 和 multi-agent-system 的驗證)

模組 C:臨床知識 RAG(借鑑 MediGenius)

解決問題: 無急診教科書、疾病教科書資料

知識來源格式RAG 策略
急診醫學教科書(Tintinalli’s / Roberts & Hedges)PDF → chunked embeddingsSemantic search + reranking
臨床指引(AHA/IDSA/NICE guidelines)PDF / HTML → structured extractionHybrid: keyword + semantic
醫院常見參數表(vital signs, NEWS2 score, qSOFA)JSON / CSV確定性查詢(不走 LLM)
感染症處置指引(Sanford Guide)PDF → embeddingRAG with citation

Embedding 策略(借鑑 MediGenius):

  • Chunk size: 512 tokens, overlap: 128
  • Embedding model: text-embedding-3-smallpubmedbert
  • Vector store: ChromaDB(本地優先,隱私考量)

模組 D:感染 + 即時處置判斷(借鑑 MIMIC_RL_COACH)

解決問題: 無法做敗血症等感染的即時處置判斷

功能實作方式來源
qSOFA score 自動計算Rule-based(GCS + SBP + RR)確定性規則
NEWS2 scoreRule-based(6 參數加權)NHS 標準
敗血症 bundle 提醒觸發條件 → 標準處置清單Surviving Sepsis Guidelines
抗生素建議RAG → Sanford Guide + 院內 antibiogram結構化查詢 + LLM 合成
即時介入優先序Decision tree + 嚴重度分級急診分級標準 (TTAS/ESI)

模組 E:持久化病歷管理(借鑑 MediGenius + MedAgentBench)

解決問題: Doctor 的 session_state 重開就消失

 1# 借鑑 MediGenius 的 SQLite 記憶
 2class PatientMemory:
 3    def __init__(self, db_path="patient_records.db"):
 4        self.conn = sqlite3.connect(db_path)
 5        self.create_tables()
 6
 7    def save_encounter(self, patient_id, encounter_data):
 8        # SOAP note 結構化存儲
 9        # S: Subjective (主訴)
10        # O: Objective (理學檢查 + 檢驗數據)
11        # A: Assessment (評估 + 鑑別診斷)
12        # P: Plan (治療計畫)
13        ...

模組 F:安全合規層(借鑑 multi-agent-system + MedAgentBench)

安全面向現狀改進
API key 管理硬編碼 + Streamlit input.env + Secrets Manager
輸入驗證Prompt injection 防護
醫療免責聲明每次輸出附帶免責 + 就醫建議
PHI 保護去識別化 + 本地優先
審計軌跡每次決策記錄 + 可追溯

4. 實施路線圖

Phase 1:基礎強化(1-2 週)

優先序工作項複雜度
P0加入 PubMed API 工具(LangChain PubMedQueryRun)
P0加入 DrugBank / RxNorm 藥物查詢
P0加入 DDI 檢查(DDInter API)
P1將 9 步 prompt 拆成 LangGraph 多 agent
P1加入 SQLite 病歷持久化
P1加入醫療免責聲明 + API key 安全化

Phase 2:知識 RAG(2-4 週)

工作項複雜度
建立 ChromaDB 向量資料庫
匯入急診教科書 / 臨床指引 PDF
建立 RAG retrieval pipeline
加入檢驗參考值 JSON(LOINC-based)
加入 qSOFA / NEWS2 自動計算

Phase 3:進階功能(4-8 週)

工作項複雜度
醫學知識圖譜(Neo4j + 疾病-症狀-藥物關係)
FHIR R4 EHR 介面
多模態支援(影像 + DICOM)
敗血症 / 感染即時處置模組
HIPAA 合規審計軌跡

5. 保留 Doctor 的核心特色

改進不是拋棄 Doctor 的設計——以下特色值得保留並強化:

Doctor 特色保留方式強化方向
Doubt-Driven 懷疑度作為 Diagnosis Agent 的核心指標用統計數據(共現頻率)輔助懷疑度計算
反向鑑別搜索保留 > 60% 觸發機制加入 PubMed 文獻交叉驗證
SAI/MF/B-D 心理指標獨立 Psychology Agent加入真實醫病溝通研究的指標校準
對話節奏控制保留一問一檢限制加入教學模式(可解除限制觀察完整推理)
雙層輸出結構保留 clinical_engine / doctor_output 分離讓每個 agent 都有內部推演 + 外部呈現

6. 技術選型建議

類別推薦替代方案理由
LLMGoogle Gemini(現有)+ Claude APIOpenAI GPT-4oGemini 已整合,Claude 用於審核
Agent 框架LangGraphCrewAI / AutoGenMediGenius + multi-agent-system 驗證
向量 DBChromaDBFAISS / Weaviate本地輕量、隱私友善
知識圖譜Neo4jNetworkX (小規模)醫學關係圖查詢
病歷存儲SQLite → PostgreSQLMongoDB結構化醫療記錄
前端Streamlit(現有)Next.js + React原型階段保留 Streamlit

7. 總結:從玩具到工具的三步跨越

1Step 1: 加入知識工具層(PubMed + DrugBank + DDI + 指引 RAG)
2        → 從「LLM 猜測」升級為「查詢 + 推理」
3
4Step 2: 拆成多 Agent(LangGraph pipeline: 問診 → 診斷 → 治療 → 審核)
5        → 從「一個大 prompt」升級為「專責分工」
6
7Step 3: 加入真實資料(FHIR EHR + 知識圖譜 + 感染即時處置)
8        → 從「模擬器」升級為「臨床決策支援系統」

Doctor 的 Doubt-Driven 概念和心理防禦指標是有特色的創新設計。問題不在概念,而在缺乏支撐這些概念的資料基礎設施。加上知識工具層和多 agent 架構後,這個專案有潛力成為一個真正實用的臨床決策支援系統。