當 AI 學會寫病歷 — Draft-Only Enforcement 的設計哲學
Blog/

當 AI 學會寫病歷 — Draft-Only Enforcement 的設計哲學

iRehab Doctor AI Phase 2 讓 AI 可以起草臨床評估紀錄,但只能存草稿。為什麼我們選擇 draft-only enforcement,而不是讓 AI 直接發布?從 MCP Server 到紫色 badge,一個醫療 AI 寫入系統的設計思考。

醫師最討厭的工作

問任何一位骨科醫師「你最不喜歡工作的哪個部分」,答案很少是手術本身。通常是:

「寫病歷。」

評估紀錄、SOAP notes、追蹤報告、品質報表。這些文書作業佔據大量時間,但每一份都必須精確。你不能亂寫,但你也不想每次都從零開始打字。

這就是 Doctor AI 想解決的問題。


Phase 1:AI 會讀了

2026 年初,我們推出 Doctor AI Phase 1。醫師透過 API Token 連接自己慣用的 AI 工具(Claude Code、Gemini CLI、Codex CLI 等),AI 可以:

  • 讀取病患的 VAS 趨勢、遵從率、PROM 分數
  • 產生週報和趨勢摘要
  • 回答「哪些病患遵從率偏低?」「這位病患的恢復速度正常嗎?」之類的問題

Phase 1 是 read-only 的。AI 可以看,但不能改任何東西。身分證、電話、Email 等個資在送入 AI 前自動移除。

這很好,但醫師開始問:「AI 都已經看完資料了,可以幫我寫 SOAP notes 嗎?」


Phase 2:AI 會寫了(但只能存草稿)

Phase 2 開放了寫入權限。AI 現在可以幫醫師起草臨床評估紀錄(Assessment)。

但這裡有一個關鍵的設計決策:

AI 的寫入只能存為草稿。永遠不會自動發布。

我們把這個原則叫做 draft-only enforcement

為什麼不讓 AI 直接發布?

因為臨床決策的最終責任在醫師身上。

AI 可以根據 VAS 趨勢建議「疼痛改善中,建議進階」,但它不知道今天門診時病患走進來時看起來很不舒服。它不知道病患昨天跌倒了。它不知道病患對某個處方有心理抗拒。

這些 context 是 AI 目前無法完全掌握的。所以正確的做法是:AI 提供草稿,醫師在 30 秒內掃一眼、修改、確認。而不是 AI 直接寫進正式紀錄。


實際操作流程

一個回診場景

病患剛做完 ROM 測量,醫師在 AI 工具裡打了一句:

「王先生術後六週,ROM 120/0,走路不太痛了,可以進階。」

AI 會做三件事:

  1. 自動讀取病患資料 — 查 VAS 趨勢、PROM 分數、運動遵從率、上次評估紀錄
  2. 填入欄位 — 把 ROM 120/0 填進屈曲/伸直欄位,progression 設為「進階」,根據趨勢資料預填 S/O/A/P 四區筆記
  3. 追問未提到的項目 — 「你沒有提到積液程度和運動後 VAS,需要填嗎?上次評估是 trace effusion、VAS 3。」

醫師回覆「積液消了,VAS 2」,AI 補完草稿,透過 MCP Server 送出。

Doctor PWA 端

  1. 評估列表中出現一筆新紀錄,帶有紫色 badge — 表示「AI 草稿,待確認」
  2. 醫師點開,看到完整的 S/O/A/P + ROM + VAS + 積液 + progression 決策
  3. 確認沒問題 → 點「確認」→ 紀錄正式生效,badge 消失;phase advancement 在此刻才會執行

整個流程的目標:醫師交代兩句話,AI 填完表單。原本要手動點選十幾個欄位的工作,變成一次對話。

技術架構

層級說明
MCP Server v2.0.02 支寫入工具(draft_assessment, draft_prescription)+ 6 支讀取工具(趨勢、警報、PROM 等)
API 預設拒絕白名單制 — 只有明確列在 allowlist 的 endpoint 才能被 AI Token 存取
Draft-only enforcementAPI 層面強制:AI Token 只能寫入 status=draft 的紀錄,無法直接設定 status=published
Scope 管理醫師在 Doctor PWA 的 Token Scope 管理 UI 中,明確授權哪些寫入權限

安全邊界

我們對 Doctor AI 設定了明確的安全邊界:

AI 可以做的

  • 讀取病患的復健資料(VAS、PROM、運動紀錄、評估歷史)
  • 根據醫師口頭交代,起草評估紀錄(SOAP notes + ROM + VAS + 積液 + progression)
  • 起草運動處方(從運動庫選取項目、設定組數次數)
  • 追問醫師未提到的欄位(這是 AI 工具的自然對話能力,不是 server 功能)
  • 產生趨勢分析和週報

AI 不能做的

  • 直接發布任何紀錄(必須經醫師確認)
  • 直接推進 phase(phase advancement 延遲到醫師確認草稿時才執行)
  • 起草術式紀錄或自費紀錄(目前僅支援評估和處方)
  • 存取個資(身分證、電話、Email 自動移除)
  • 存取超出該醫師權限範圍的病患資料
  • 自動診斷或自動開立處方

如果 AI 寫錯了?

不會有任何後果 — 因為它只是草稿。醫師在確認前看到任何問題,直接刪除或修改即可。草稿不會進入病患的正式紀錄,不會影響 PROM 排程,不會觸發任何臨床流程。


BYO-LLM:不綁定,不代管

另一個設計決策:iRehab 不內嵌特定的 AI 聊天框。

我們提供標準的 MCP Server 和 API Token 介面,讓醫師自由選擇 AI 工具。Claude Code、Gemini CLI、Codex CLI、本地模型 — 都可以。

理由很簡單:

  1. AI 模型半年就換一代 — 綁定特定供應商是短視的
  2. 資料主權 — 醫師選擇哪個 AI 供應商,就決定了資料經過誰的伺服器。Enterprise 版通常不會留存資料
  3. 成本 — 不同的 AI 供應商有不同的定價。醫師應該有選擇權

iRehab 的角色是提供安全的資料存取層,而不是成為 AI 供應商。


出嘴巴就好:語音輸入 + AI 填表

一個常見的問題:「我不想打字,可以用說的嗎?」

答案是可以,而且不需要任何額外設定。

iPhone、Mac、Android 都內建了聽寫功能 — 在任何輸入框點麥克風鍵就能用。醫師在 AI 工具的輸入框裡按麥克風,講完送出,AI 就會把自然語言對應到表單欄位。

這不需要「訓練」模型。MCP Server 定義了每個欄位的 schema(ROM 的屈曲/伸直、VAS 0-10、積液分級等),LLM 讀了 schema 就知道怎麼對應。醫師說「屈曲一百二,伸直零度」,AI 自動填入 kneeFlexion: 120, kneeExtension: 0

用 CLAUDE.md 定義你的快捷語

如果你用 Claude Code,可以在專案的 CLAUDE.md 裡寫你的慣用語:

# 我的慣用語
- 「可以進」= progressionDecision: advance
- 「退一階」= progressionDecision: regress
- 「腫」= effusionGrade,問我程度
- 沒提到的欄位一律問我,不要自己猜

AI 每次都會遵守這些規則,等於用自然語言定義了一套快捷指令。其他 AI 工具也有類似的系統提示詞設定。

目前的限制

  • 系統聽寫對中文日常用語辨識率很高,但英文醫學縮寫(ROM、VAS、TKA)偶爾會聽錯
  • 不能邊講邊看 AI 即時填入 — 要講完送出後 AI 才處理
  • 語音輸入的品質取決於你的設備和環境,不是 iRehab 可以控制的

信任但驗證

「Draft-only enforcement」這個名字借鑑了一個老原則:信任但驗證(Trust but verify)。

我們信任 AI 的能力 — 它確實可以根據資料產出合理的臨床評估草稿。但我們也驗證 — 每一筆草稿都必須經過人類醫師的眼睛和判斷。

這不是對 AI 的不信任。這是對「臨床決策必須有人類在 loop 中」的堅持。

在 AI 技術持續進步的過程中,draft-only 是一個可以逐步放寬的起點。當 AI 的可靠性提升到一定程度,我們可以考慮更多的自動化。但起步時,寧可保守。


兩句話填完一張表

最後,回到最初的問題:醫師最討厭的工作。

有了 Doctor AI Phase 2,回診時的流程從「打開表單 → 逐欄手動填入 → 存檔」變成「跟 AI 說兩句話 → AI 追問漏的 → 確認」。醫師不需要記得每個欄位在哪裡、不需要從零開始寫 SOAP notes。AI 已經看過病患趨勢,只需要你補上今天門診的觀察。

省下來的時間,可以花在更重要的事情上 — 比如跟病患多說兩句話。

如果你想試試 Doctor AI,在 Doctor PWA「我的」→「API Token」頁面產生 Token,連接你慣用的 AI 工具即可。設定只需要 3 分鐘。

完整設定指南:denovortho.com/irehab/ai-setup