健康分析 — 地端智慧,隱私優先

2,123 字 6 分鐘閱讀 12 次閱讀

前言:讓 AI 幫您解讀健康資料

當您拿到一份檢驗報告,上面寫著:

HbA1c: 6.8%
eGFR: 72 mL/min/1.73m2
LDL-C: 142 mg/dL

您知道這些數字代表什麼嗎?是正常還是需要注意?

FHIR LINE Bot 的 AI 分析功能,就是要幫您解讀這些專業資訊。

更重要的是,我們採用「地端 AI」架構,您的健康資料由院內 AI 處理,不會上傳到第三方雲端服務


為什麼選擇地端 AI?

雲端 AI vs 地端 AI

flowchart TB
    subgraph comparison["比較項目"]
        direction TB
        subgraph cloud["雲端 AI"]
            C1["資料傳輸:上傳到雲端伺服器"]
            C2["隱私風險:資料離開機構"]
            C3["網路依賴:需要穩定網路連線"]
            C4["回應速度:受網路延遲影響"]
            C5["成本模式:按使用量計費"]
        end
        subgraph onprem["地端 AI"]
            O1["資料傳輸:在機構內部處理"]
            O2["隱私風險:資料不離開機構"]
            O3["網路依賴:可離線運作"]
            O4["回應速度:低延遲回應"]
            O5["成本模式:一次性建置"]
        end
    end

    style cloud fill:#ffebee
    style onprem fill:#e8f5e9

傳統雲端 AI 的風險

flowchart LR
    subgraph user["用戶端"]
        A["您的健康資料"]
    end

    subgraph cloud["第三方雲端"]
        B["雲端 AI<br/>(OpenAI/Azure等)"]
    end

    subgraph result["結果"]
        C["分析結果"]
    end

    A -->|"資料上傳"| B
    B -->|"回傳結果"| C

    D["風險:資料離開機構控制範圍"]

    style cloud fill:#ffcdd2
    style D fill:#ffcdd2

我們的架構:隱私優先

flowchart LR
    subgraph user["用戶端"]
        A["您的健康資料"]
    end

    subgraph cloud["雲端服務"]
        B["LINE Bot"]
        K["Kafka Broker"]
    end

    subgraph hospital["醫療機構內部"]
        C["Kafka Consumer"]
        D["地端 AI 模型"]
    end

    subgraph result["結果"]
        E["分析結果"]
    end

    A --> B
    B -->|"發送請求"| K
    K -.->|"消費訊息"| C
    C -->|"呼叫模型"| D
    D -->|"產生結果"| C
    C -.->|"發送結果"| K
    K -->|"接收結果"| B
    B --> E

    style hospital fill:#e8f5e9
    style cloud fill:#e3f2fd

關鍵差異:健康資料在院內由地端 AI 處理,只有分析結果會回傳給用戶。


系統架構:Kafka 訊息佇列

完整資料流程

sequenceDiagram
    participant U as LINE 用戶
    participant B as LINE Bot<br/>(雲端)
    participant K as Kafka Broker<br/>(雲端)
    participant C as Kafka Consumer<br/>(院內)
    participant F as FHIR Server<br/>(院內)
    participant AI as AI 模型<br/>(院內)

    U->>B: 1. 請求 AI 分析
    B->>F: 2. 查詢 FHIR 資料
    F-->>B: 3. 回傳健康資料
    B->>K: 4. 發送分析請求
    K->>C: 5. Consumer 接收
    C->>AI: 6. 呼叫地端模型
    AI-->>C: 7. 回傳分析結果
    C->>K: 8. 發送結果訊息
    K->>B: 9. Bot 接收結果
    B->>U: 10. 推送分析報告

為什麼使用 Kafka?

mindmap
  root((Kafka 優勢))
    非同步處理
      請求與回應分離
      用戶不需等待
      可繼續其他操作
    訊息持久化
      訊息儲存在磁碟
      系統重啟不遺失
      可重新處理失敗請求
    水平擴展
      可增加 Consumer 數量
      應對大量分析請求
      負載平衡
    解耦合
      生產者與消費者獨立
      AI 模型可獨立升級
      不影響其他服務

分析流程詳解

步驟一:用戶發起請求

flowchart TB
    U["用戶輸入:/ai 分析"]

    subgraph menu["分析類型選單"]
        M1["全面分析"]
        M2["用藥分析"]
        M3["檢驗分析"]
        M4["就診分析"]
    end

    U --> menu

步驟二:系統收集 FHIR 資料

flowchart LR
    subgraph fhir["FHIR 伺服器"]
        P["Patient<br/>基本資料"]
        O["Observation<br/>檢驗數據"]
        M["MedicationRequest<br/>用藥資訊"]
        C["Condition<br/>診斷紀錄"]
        E["Encounter<br/>就診紀錄"]
    end

    subgraph bot["LINE Bot"]
        B["資料收集器"]
    end

    P --> B
    O --> B
    M --> B
    C --> B
    E --> B

步驟三:發送至 Kafka 佇列

flowchart LR
    subgraph cloud["雲端"]
        B["LINE Bot"]
        K["Kafka Broker<br/>ai.request topic"]
    end

    subgraph message["訊息內容"]
        M["request_id: uuid<br/>health_data: {...}<br/>category: all<br/>locale: zh-TW"]
    end

    B -->|"Produce"| K
    K -.-> M

步驟四:地端 AI 處理

flowchart TB
    subgraph hospital["醫療機構內部環境"]
        subgraph consumer["Kafka Consumer"]
            C1["1. 解析健康資料"]
            C2["2. 建構分析提示詞"]
            C3["3. 呼叫 AI 模型"]
            C4["4. 格式化分析結果"]
            C1 --> C2 --> C3 --> C4
        end

        subgraph ai["地端 AI 模型"]
            A1["Llama 3.1 70B"]
            A2["Qwen 2.5 72B"]
            A3["醫療專用模型"]
        end

        C3 --> ai
    end

    K["Kafka<br/>(雲端)"] -.->|"消費請求"| consumer
    consumer -.->|"發送結果"| K

    style hospital fill:#e8f5e9

步驟五:回傳分析結果

flowchart TB
    subgraph report["健康分析報告"]
        H["王小明 先生 / 65歲"]

        subgraph sections["分析內容"]
            S1["整體評估<br/>血糖控制需加強注意"]
            S2["用藥提醒<br/>Metformin 按時服用"]
            S3["腎功能<br/>eGFR 72 輕度下降"]
            S4["生活建議<br/>飲食控制、規律運動"]
        end

        D["免責聲明:僅供參考"]
    end

    H --> sections --> D

支援的分析類型

flowchart TB
    subgraph types["分析類型"]
        subgraph all["全面健康分析"]
            A1["綜合評估所有健康資料"]
            A2["提供整體建議"]
        end

        subgraph med["用藥分析"]
            M1["用藥清單與用途"]
            M2["藥物交互作用"]
            M3["用藥注意事項"]
            M4["漏服風險評估"]
        end

        subgraph obs["檢驗報告分析"]
            O1["數值解讀"]
            O2["異常值警示"]
            O3["趨勢變化"]
            O4["生活建議"]
        end

        subgraph enc["就診紀錄分析"]
            E1["就診頻率統計"]
            E2["健康問題整理"]
            E3["慢性病管理"]
            E4["回診提醒"]
        end
    end

隱私保護機制

資料最小化原則

flowchart TB
    subgraph send["發送給 AI 的資料"]
        S1["年齡、性別"]
        S2["檢驗數值"]
        S3["診斷代碼"]
        S4["用藥資訊"]
    end

    subgraph nosend["不發送的資料"]
        N1["身分證字號"]
        N2["聯絡方式"]
        N3["住址"]
        N4["詳細病歷內容"]
    end

    style send fill:#e8f5e9
    style nosend fill:#ffebee

資料流向保護

flowchart TB
    subgraph cloud["雲端環境"]
        L["LINE Bot"]
        K["Kafka Broker"]
    end

    subgraph hospital["醫療機構防火牆內"]
        F["FHIR 伺服器"]
        C["Kafka Consumer"]
        AI["AI 模型"]
    end

    subgraph user["用戶"]
        U["手機"]
    end

    F -->|"健康資料<br/>(院內傳輸)"| C
    C -->|"呼叫模型<br/>(院內處理)"| AI
    AI -->|"分析結果<br/>(院內產生)"| C
    C -.->|"僅傳送結果文字"| K
    K --> L
    L -->|"顯示報告"| U

    style hospital fill:#e8f5e9
    style cloud fill:#e3f2fd

結果快取機制

flowchart LR
    subgraph cache["快取機制"]
        C1["分析結果存入快取"]
        C2["保留時間:30 分鐘"]
        C3["過期自動刪除"]
        C4["不建立長期儲存"]
    end

    R["用戶查詢結果"] --> C1
    C1 --> C2 --> C3
    C4 --> E["用戶可隨時重新分析"]

技術規格

Kafka Topic 設計

flowchart LR
    subgraph topics["Kafka Topics"]
        subgraph req["ai.request"]
            R1["用途:分析請求"]
            R2["保留:24 小時"]
            R3["分區:依 user_id"]
        end

        subgraph res["ai.response"]
            S1["用途:分析結果"]
            S2["保留:24 小時"]
            S3["分區:依 request_id"]
        end
    end

    P["Producer<br/>(LINE Bot)"] --> req
    req --> C["Consumer<br/>(院內)"]
    C --> res
    res --> P

訊息格式

flowchart TB
    subgraph request["Request 訊息"]
        RQ["request_id: uuid<br/>line_user_id: Uxxxxx<br/>health_data: {...}<br/>category: all/medications/...<br/>locale: zh-TW/en<br/>created_at: timestamp"]
    end

    subgraph response["Response 訊息"]
        RS["request_id: uuid<br/>status: completed/failed<br/>result: 分析結果文字<br/>model: llama-3.1-70b<br/>completed_at: timestamp"]
    end

    request -->|"處理"| response

支援的 AI 模型

flowchart TB
    subgraph models["支援的 AI 模型"]
        subgraph llama["Llama 3.1"]
            L1["參數量:70B"]
            L2["特點:通用型"]
            L3["多語言支援"]
        end

        subgraph qwen["Qwen 2.5"]
            Q1["參數量:72B"]
            Q2["特點:中文優化"]
            Q3["醫療知識強"]
        end

        subgraph custom["客製化模型"]
            C1["參數量:依需求"]
            C2["特點:機構微調"]
            C3["專科優化"]
        end
    end

部署架構

單一機構部署

flowchart TB
    subgraph cloud["雲端"]
        L["LINE Bot"]
        K["Kafka Cluster"]
    end

    subgraph hospital["醫療機構內部網路"]
        F["FHIR Server"]
        C["Kafka Consumer"]
        AI["AI Server<br/>(GPU)"]

        F --> C
        C --> AI
    end

    L <--> K
    K <-.-> C

    style hospital fill:#e8f5e9
    style cloud fill:#e3f2fd

多機構共享部署

flowchart TB
    subgraph cloud["雲端服務"]
        L["LINE Bot"]
        K["Kafka Cluster"]
    end

    subgraph hospA["醫院 A"]
        FA["FHIR Server"]
        CA["Consumer"]
        AA["AI Server"]
        FA --> CA --> AA
    end

    subgraph hospB["醫院 B"]
        FB["FHIR Server"]
        CB["Consumer"]
        AB["AI Server"]
        FB --> CB --> AB
    end

    subgraph hospC["醫院 C"]
        FC["FHIR Server"]
        CC["Consumer"]
        AC["AI Server"]
        FC --> CC --> AC
    end

    L <--> K
    K <-.-> CA
    K <-.-> CB
    K <-.-> CC

    style hospA fill:#e8f5e9
    style hospB fill:#e8f5e9
    style hospC fill:#e8f5e9
    style cloud fill:#e3f2fd

共享 AI 中心模式(政府雲)

flowchart TB
    subgraph cloud["雲端服務"]
        L["LINE Bot"]
        K["Kafka Cluster"]
    end

    subgraph govcloud["政府雲 / 醫療雲"]
        C["Kafka Consumer Cluster"]
        AI["AI GPU Cluster"]
        C --> AI
    end

    subgraph hospitals["各醫療機構"]
        H1["醫院 A FHIR"]
        H2["醫院 B FHIR"]
        H3["醫院 C FHIR"]
    end

    L <--> K
    K <-.-> C
    H1 -.-> C
    H2 -.-> C
    H3 -.-> C

    style govcloud fill:#fff3e0
    style cloud fill:#e3f2fd

未來擴展

mindmap
  root((未來擴展))
    更多分析類型
      飲食建議
      運動處方
      風險預測
      健康趨勢
    多模態分析
      影像分析
      語音互動
      穿戴裝置整合
    持續學習
      用戶回饋機制
      醫師審核品質
      模型定期更新
    跨機構協作
      聯合學習
      知識共享
      標準化輸出

本章小結

mindmap
  root((AI 健康分析核心理念))
    隱私優先
      採用地端 AI
      資料不離開機構
      只傳送結果文字
    架構解耦
      Kafka 雲端佇列
      Consumer 院內運作
      彈性擴展
    專業解讀
      複雜數據轉化
      易懂的建議
      免責聲明保護
    持續演進
      支援多種模型
      可獨立升級
      未來功能擴展

讓 AI 成為您的健康助手,而不是隱私的威脅。

下一章,我們將展望更多未來的可能性。

© 2025-2026 Nickle Cheng Built with Ruby Ruby on Rails