跳轉到

案例研究:醫療 AI 文件智能

摘要

一家服務 150 家醫院的健康科技公司,使用 NextPDF Enterprise 建立 HIPAA 合規的 RAG 管線,讓臨床醫師從 38 萬份病歷摘要、臨床指引與研究報告中獲得即時的語意問答能力。GPU 嵌入使索引速度提升 倍,PHI 過濾器確保患者隱私在向量層面的完整保護。


挑戰

醫療機構的知識管理面臨獨特的雙重挑戰:

挑戰 1:臨床文件破碎化 - 38 萬份 PDF 散布於多個系統(EHR 匯出、研究資料庫、內部指引) - 臨床醫師平均花 分鐘搜尋一份指引 - 無法跨文件做語意問答(如「此藥物在腎功能不全患者的劑量調整」)

挑戰 2:HIPAA 合規壁壘 - 病歷摘要含 PHI(患者姓名、生日、診斷、保險 ID 等 18 個 HIPAA 識別元素) - 傳統 RAG 管線將原始文字直接嵌入向量,PHI 會殘留在向量索引中 - HIPAA § 164.312 要求完整的存取日誌與最小必要原則

flowchart TD
    subgraph Problem["挑戰"]
        D1[病歷摘要\n含 PHI]
        D2[臨床指引\nPDF]
        D3[研究報告\nPDF]
    end
    subgraph Issues["障礙"]
        I1[PHI 不可直接嵌入向量]
        I2[跨文件搜尋能力缺乏]
        I3[HIPAA 存取日誌要求]
    end
    D1 --> I1
    D1 & D2 & D3 --> I2
    D1 --> I3
    I1 & I2 & I3 --> GOAL[需要 HIPAA 合規的\n語意搜尋管線]

解決方案

HIPAA 合規 RAG 架構

flowchart LR
    subgraph Ingest["攝取管線(HIPAA 保護)"]
        PDF[病歷 PDF] --> PARSE[NextPDF 結構解析]
        PARSE --> REDACT[HipaaRagFilter\nPHI 過濾]
        REDACT --> CHUNK[結構感知分塊]
        CHUNK --> EMBED[GPU 嵌入\nmE5-large]
        EMBED --> INDEX[CAGRA 索引\n無 PHI 向量]
    end

    subgraph Query["查詢管線"]
        Q[臨床問題] --> QEMBED[查詢嵌入]
        QEMBED --> HYBRID[混合搜尋\nBM25 + ANN + RRF]
        HYBRID --> RESULT[相關段落 + 引用]
        RESULT --> AUDIT[HipaaAuditLogger\n記錄存取]
    end

核心實現:HIPAA 合規攝取

use NextPDF\Enterprise\AiRag\RagClient;
use NextPDF\Enterprise\AiRag\IngestOptions;
use NextPDF\Enterprise\Compliance\Hipaa\HipaaRagFilter;
use NextPDF\Enterprise\Compliance\Hipaa\PhiField;
use NextPDF\Enterprise\MultiTenancy\TenantContext;

// 每家醫院為獨立租戶
$hospitalContext = TenantContext::for(
    tenantId: 'hospital-001',
    encryptionKeyId: $hospital->kekId(),
);

// HIPAA RAG 過濾器:攝取前移除所有 PHI
$hipaaFilter = HipaaRagFilter::create()
    ->removeAllPhiFields()           // 移除 18 個 HIPAA 識別元素
    ->preserveClinicallRelevantAge() // 保留年齡範圍(非精確生日)
    ->preserveAnonymizedDiagnosis(); // 保留診斷分類碼(ICD-10),移除描述

$ragClient = RagClient::fromEnvironment()
    ->withTenantContext($hospitalContext)
    ->withPreprocessor($hipaaFilter);

// 攝取前自動過濾 PHI,再嵌入
$job = $ragClient->ingest(
    documentId: 'protocol-sepsis-mgmt-v4',
    pdfBytes: file_get_contents('sepsis-management-protocol-v4.pdf'),
    options: IngestOptions::create()
        ->withTitle('Sepsis Management Protocol v4.0')
        ->withTags(['clinical-protocol', 'critical-care'])
        ->withChunkingStrategy(ChunkingStrategy::StructureAware),
);

PHP Compatibility

This example uses PHP 8.5 syntax. If your environment runs PHP 8.1 or 7.4, use NextPDF Backport for a backward-compatible build.

核心實現:臨床查詢

use NextPDF\Enterprise\AiRag\QueryRequest;
use NextPDF\Enterprise\AiRag\SearchMode;
use NextPDF\Enterprise\Compliance\Hipaa\HipaaAuditLogger;

$auditLogger = new HipaaAuditLogger($immutableLogAdapter);

// 臨床問題查詢
$results = $ragClient->query(
    QueryRequest::create(
        query: 'What is the vasopressor dosing protocol for septic shock in patients with renal impairment?'
    )
    ->withTopK(5)
    ->withSearchMode(SearchMode::Hybrid)
    ->withFilter(
        QueryFilter::create()
            ->tags(['clinical-protocol', 'critical-care', 'pharmacy'])
    )
);

// 自動記錄 HIPAA 存取日誌
$auditLogger->log(
    AuditEvent::ragQueryExecuted(
        queryId: $results->queryId(),
        clinicianId: $currentUser->id(),
        queryText: $results->query(),  // 注意:查詢文字本身可能含患者資訊
        documentsAccessed: $results->documentIds(),
        purpose: AuditPurpose::Treatment,
        timestamp: new DateTimeImmutable(),
    )
);

// 呈現給臨床醫師(含可追溯引用)
foreach ($results->passages() as $passage) {
    echo $passage->text();
    echo "\n來源:" . $passage->citation()->documentTitle();
    echo " 第 " . $passage->citation()->pageNumber() . " 頁";
}

成效

指標 導入前 導入後 改善幅度
臨床資訊搜尋時間(每次)
文件索引速度(GPU vs CPU) CPU baseline
批次嵌入 p50(1000 segments)
PHI 洩漏至向量索引 不可確認 0(過濾器驗證) 100% 消除
HIPAA 存取日誌完整性 部分手動記錄 100% 自動化,不可刪除
服務醫院數 23 家
臨床醫師滿意度

延伸閱讀

Commercial License

This feature requires a commercial license. Contact our team for pricing and deployment support.

Contact Sales