案例研究:醫療 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