医疗图检索增强生成助手

一个基于模型上下文协议(MCP)的生产级医疗AI助手平台,具备GraphRAG多模态搜索、FHIR集成、NVIDIA NIM嵌入和AWS Bedrock Claude Sonnet 4.5等功能。

  • by intersystems-community
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 isc-tdyar/medical-graphrag-assistant

使用说明

医学图谱RAG助理

[!重要] 该存储库是InterSystems社区倡议的一部分。有关机构支持和捐款,请参阅 贡献.md 和 TRANSFER_NOTES.md.

一个基于模型上下文协议(MCP)的生产就绪型医疗人工智能辅助平台,具有GraphRAG多模态搜索、Contoso集成、NVIDIA NIM嵌入和AWS Bedrock Claude Sonnet 4.5功能。

GitHub 仓库: https://github.com/intersystems-community/medical-graphrag-assistant

最初分叉自: FHIR-AI-黑客马拉松套件

当前版本:v2.16.0(解耦服务和健康CLI)

这是什么

一 代理医疗聊天平台 具有高级功能:

  • 🤖 模型上下文协议(MCP) -克劳德自主调用医疗搜索工具
  • 🧠 图检索增强生成 -基于知识图的解耦服务逻辑检索
  • 🖼️ 医学图像搜索 -基于NV-CLIP嵌入的胸部X射线语义搜索
  • 💾 代理存储系统 -基于向量搜索的持久语义记忆
  • 🏥 Contoso集成 -临床文献全文检索
  • 🛠️ 系统健康CLI -全面的环境验证和自动修复
  • ☁️ AWS部署 -使用NVIDIA A10G GPU在AWS EC2上进行生产部署
  • 📊 交互式用户界面 -具有执行透明度的流线型界面
  • 🗄️ 系统间IRIS -支持原生Vector(DOUBLE,1024)的矢量数据库

快速开始

1.验证环境

# Verify database, GPU, and schema integrity
python -m src.cli check-health --smoke-test

# If tables are missing or authentication fails (HTTP 401):
python -m src.cli fix-environment

# Or reset security settings specifically:
python -m src.cli reset-security

2.运行Streamlit聊天界面

# Install dependencies
pip install -r requirements.txt

# Set AWS credentials
export AWS_PROFILE=your-profile

# Configure NV-CLIP endpoint (for medical images and memory)
export NVCLIP_BASE_URL="http://localhost:8002/v1"  # Local NIM via SSH tunnel

# Run the chat app
cd mcp-server
streamlit run streamlit_app.py

访问http://localhost:8501开始聊天吧!

2.用作MCP服务器(克劳德桌面等)

# Configure MCP client to point to:
python mcp-server/fhir_graphrag_mcp_server.py

建筑

系统概述

flowchart TB
    subgraph UI["🖥️ Presentation Layer"]
        ST[Streamlit Chat UI<br/>v2.15.0]
    end

    subgraph LLM["🧠 AI/LLM Layer"]
        direction LR
        NIM[NVIDIA NIM<br/>Llama 3.1 8B]
        OAI[OpenAI<br/>GPT-4o]
        BED[AWS Bedrock<br/>Claude Sonnet 4.5]
    end

    subgraph MCP["⚡ MCP Server Layer"]
        MCPS[FHIR + GraphRAG MCP Server<br/>14+ Medical Tools]
    end

    subgraph DATA["🗄️ Data Layer"]
        direction LR
        IRIS[(InterSystems IRIS<br/>Vector Database)]
        FHIR[FHIR Documents<br/>51 Clinical Notes]
        GRAPH[Knowledge Graph<br/>83 Entities • 540 Relations]
        IMG[Medical Images<br/>50 Chest X-rays]
        MEM[Agent Memory<br/>Semantic Store]
    end

    subgraph EMB["🔢 Embedding Layer"]
        NVCLIP[NVIDIA NV-CLIP<br/>1024-dim Multimodal]
    end

    ST <-->|Multi-LLM Support| LLM
    LLM <-->|MCP Protocol| MCPS
    MCPS <-->|IRIS Native API| IRIS
    IRIS --- FHIR
    IRIS --- GRAPH
    IRIS --- IMG
    IRIS --- MEM
    MCPS <-->|Embedding API| NVCLIP

GraphRAG数据流

flowchart LR
    subgraph INPUT["📥 Input"]
        Q[User Query]
    end

    subgraph RECALL["🔄 Auto-Recall"]
        MR[Memory Recall<br/>Past Corrections]
    end

    subgraph SEARCH["🔍 Multi-Modal Search"]
        direction TB
        VS[Vector Search<br/>FHIR Documents]
        GS[Graph Search<br/>Entities & Relations]
        IS[Image Search<br/>NV-CLIP Similarity]
    end

    subgraph FUSION["⚗️ Fusion"]
        RRF[Reciprocal Rank Fusion<br/>RRF Algorithm]
    end

    subgraph OUTPUT["📤 Output"]
        R[Ranked Results +<br/>Knowledge Graph Viz]
    end

    Q --> MR
    MR --> VS
    MR --> GS
    MR --> IS
    VS --> RRF
    GS --> RRF
    IS --> RRF
    RRF --> R

组件交互

sequenceDiagram
    participant U as User
    participant S as Streamlit UI
    participant L as LLM (Claude/GPT/NIM)
    participant M as MCP Server
    participant I as IRIS DB
    participant N as NV-CLIP

    U->>S: "Find pneumonia X-rays"
    S->>L: Query + Tools
    L->>M: search_medical_images()
    M->>N: embed_text(query)
    N-->>M: 1024-dim vector
    M->>I: VECTOR_COSINE search
    I-->>M: Top-K results
    M-->>L: Images + metadata
    L->>M: search_knowledge_graph()
    M->>I: Entity/relation query
    I-->>M: Graph data
    M-->>L: Entities + relations
    L-->>S: Response + visualizations
    S-->>U: Display results

IRIS矢量包架构

该项目使用 系统间IRIS矢量 生态系统:

flowchart TB
    subgraph APP["🏥 Medical GraphRAG Assistant"]
        MCP[MCP Server<br/>14+ Medical Tools]
        CFG[YAML Config<br/>CloudConfiguration API]
    end

    subgraph IRIS_PKG["📦 InterSystems IRIS Vector Packages"]
        direction TB
        RAG["<a href='https://pypi.org/project/iris-vector-rag/'>iris-vector-rag</a><br/>RAG Framework"]
        GRAPH["<a href='https://pypi.org/project/iris-vector-graph/'>iris-vector-graph</a><br/>Graph Toolkit"]
        TEST["<a href='https://pypi.org/project/iris-devtester/'>iris-devtester</a><br/>Env Manager"]

        subgraph RAG_DETAIL["iris-vector-rag Features"]
            BYOT[BYOT Storage<br/>Bring Your Own Tables]
            PIPE[RAG Pipelines<br/>basic • graphrag • crag]
            SCHEMA[SchemaManager<br/>Table Validation]
        end

        subgraph GRAPH_DETAIL["iris-vector-graph Features"]
            ENT[Entity Storage<br/>Type-Tagged Nodes]
            REL[Relationship Store<br/>Typed Edges]
            TRAV[Graph Traversal<br/>Path Queries]
        end
    end

    subgraph IRIS_DB["🗄️ InterSystems IRIS"]
        VEC[(VECTOR Column<br/>DOUBLE, 1024)]
        SQL[(SQL Tables<br/>ClinicalNoteVectors)]
        KG[(Knowledge Graph<br/>Entities • Relations)]
    end

    MCP --> RAG
    MCP --> GRAPH
    CFG --> RAG
    RAG --> BYOT
    RAG --> PIPE
    RAG --> SCHEMA
    GRAPH --> ENT
    GRAPH --> REL
    GRAPH --> TRAV
    
    %% The Integration Points
    PIPE -.->|GraphRAG Pipeline| GRAPH
    ENT --> VEC
    
    %% Lifecycle Management
    TEST -.->|Config & Reset| IRIS_DB
    
    BYOT --> VEC
    SCHEMA --> SQL
    ENT --> KG
    REL --> KG

软件包链接:

  • iris-vector-rag -具有多个管道的生产RAG框架(基本、图形、峭壁、multi_query_rrf)
  • iris-vector-graph -面向图的GraphRAG工作负载矢量工具包

NVIDIA NIM架构

此项目使用 英伟达尼姆 (推理微服务)用于GPU加速的AI推理,部署在AWS EC2上,带有NVIDIA A10G GPU。

flowchart TB
    subgraph AWS["☁️ AWS EC2 g5.xlarge"]
        subgraph GPU["🎮 NVIDIA A10G GPU (24GB)"]
            direction TB
            NIM_LLM["<a href='https://build.nvidia.com'>NIM Container</a><br/>Port 8001<br/>meta/llama-3.1-8b-instruct"]
            NIM_CLIP["<a href='https://build.nvidia.com/nvidia/nvclip'>NV-CLIP Container</a><br/>Port 8002<br/>nvidia/nvclip"]
        end

        subgraph SERVICES["🔧 Application Services"]
            MCP[MCP Server<br/>Medical Tools]
            ST[Streamlit UI<br/>Port 8501]
            IRIS[(IRIS DB<br/>Port 1972)]
        end
    end

    subgraph CLIENT["💻 Client"]
        TUNNEL[SSH Tunnel<br/>localhost:8002 → AWS:8002]
        APP[Local Development]
    end

    APP --> |NVCLIP_BASE_URL| TUNNEL
    TUNNEL --> NIM_CLIP
    ST --> MCP
    MCP --> |Text Embeddings| NIM_LLM
    MCP --> |Image Embeddings| NIM_CLIP
    MCP --> |Vector Search| IRIS
    NIM_LLM --> GPU
    NIM_CLIP --> GPU

NIM服务:

服务 型号 端口 用途 维度
名称 meta/llama-3.1-8b-instruct 8001 文本生成、实体提取 不适用
NV-CLIP nvidia/nvclip 8002 多模态嵌入(文本+图像) 1024 dim
NV嵌入式QA nvidia/nv-embedqa-e5-v5 云API RAG的文本嵌入 1022-dm

部署选项:

  • 自托管NIM (生产):GPU实例上的Docker容器符合HIPAA标准
  • NVIDIA云API (开发): https://integrate.api.nvidia.com/v1 带有API密钥

知识图谱:实体与关系提取

知识图是使用 基于正则表达式的实体提取 目前没有使用外部医学本体,而是使用精心策划的正则表达式模式提取实体。

flowchart LR
    subgraph FHIR["📄 FHIR Repository"]
        DOC[DocumentReference<br/>Clinical Notes]
    end

    subgraph EXTRACT["🔬 Entity Extraction"]
        direction TB
        REGEX[Regex Patterns<br/>Confidence-Scored]
        TYPES[Entity Types:<br/>SYMPTOM • CONDITION<br/>MEDICATION • PROCEDURE<br/>BODY_PART • TEMPORAL]
    end

    subgraph RELATE["🔗 Relationship Inference"]
        direction TB
        HEUR[Heuristic Rules:<br/>Proximity + Context]
        REL_TYPES[Relationship Types:<br/>TREATS • CAUSES<br/>LOCATED_IN • CO_OCCURS]
    end

    subgraph STORE["🗄️ Knowledge Graph Tables"]
        ENT_TBL[(RAG.Entities<br/>83 entities)]
        REL_TBL[(RAG.EntityRelationships<br/>540 relationships)]
    end

    DOC --> REGEX
    REGEX --> TYPES
    TYPES --> HEUR
    HEUR --> REL_TYPES
    REL_TYPES --> ENT_TBL
    REL_TYPES --> REL_TBL

提取的实体类型:

类型 示例 置信区间
SYMPTOM 胸痛、呼吸急促、发烧 0.80-0.95
CONDITION 高血压、糖尿病、肺炎 0.75-0.95
MEDICATION 阿司匹林、二甲双胍、胰岛素 0.85-0.95
PROCEDURE CT扫描、MRI、血液检查 0.85-0.92
BODY_PART 胸部、腹部、心脏 0.75-0.90
TEMPORAL 3天前,上周 0.75-0.95

关系类型:

关系 模式 示例
TREATS 药物治疗→ 状况/症状 阿司匹林→ 胸痛
CAUSES 条件→ 症状 高血压→ 头痛
LOCATED_IN 症状→ 身体_部位 疼痛→ 胸部
CO_OCCURS 症状↔ 症状(窗口内) 发烧↔ 咳嗽

当前限制和未来工作:

  • 无医学本体论 (SNOMED-CT、ICD-10、RxNorm)-提取是基于模式的
  • 无kubectl原生查询 -临床记录从DocumentReference.content进行十六进制解码
  • 未来:基于LLM的实体提取,以提高覆盖率和本体映射

MCP工具架构

MCP服务器公开 14+工具 Claude(或其他LLM)可以自主调用以搜索医疗数据。

flowchart TB
    subgraph LLM["🧠 LLM (Claude/GPT/NIM)"]
        AGENT[Agentic Chat]
    end

    subgraph MCP["⚡ MCP Server Tools"]
        direction TB
        subgraph SEARCH["🔍 Search Tools"]
            T1[search_fhir_documents<br/>Full-text clinical notes]
            T2[search_knowledge_graph<br/>Entity-based search]
            T3[hybrid_search<br/>RRF fusion of all sources]
            T4[search_medical_images<br/>NV-CLIP similarity]
        end

        subgraph DETAIL["📋 Detail Tools"]
            T5[get_document_details<br/>Full document content]
            T6[get_entity_relationships<br/>Graph traversal]
            T7[get_entity_statistics<br/>Graph stats]
        end

        subgraph MEMORY["💾 Memory Tools"]
            T8[remember_information<br/>Store corrections/prefs]
            T9[recall_information<br/>Semantic memory search]
            T10[get_memory_stats<br/>Memory statistics]
        end

        subgraph VIZ["📊 Visualization Tools"]
            T11[plot_symptom_frequency]
            T12[plot_entity_distribution]
            T13[plot_patient_timeline]
            T14[plot_entity_network]
        end
    end

    subgraph DATA["🗄️ Data Sources"]
        FHIR[(FHIR Documents)]
        KG[(Knowledge Graph)]
        IMG[(Medical Images)]
        MEM[(Agent Memory)]
    end

    AGENT -->|MCP Protocol| MCP
    T1 --> FHIR
    T2 --> KG
    T3 --> FHIR
    T3 --> KG
    T3 --> IMG
    T4 --> IMG
    T8 --> MEM
    T9 --> MEM

工具类别:

类别 工具 数据源 查询类型
➤搜索 search_fhir_documents, get_document_details ClinicalNoteVectors 全文SQL LIKE
图检索增强生成 search_knowledge_graph, get_entity_relationships, hybrid_search 实体,实体关系 实体+向量+RRF
医学影像 search_medical_images MIMICCXR图像 向量_余弦(NV-CLIP)
代理记忆 remember_information, recall_information Agent记忆向量 向量_余弦(NV-CLIP)
可视化 plot_* 工具 所有来源 Plotly/NetworkX图表

注: Contoso查询是通过SQL对IRIS表中的预摄取数据执行的。该系统确实 不 进行实时的FHIR REST API调用-文档在设置期间被批量加载,并与它们的嵌入一起存储在IRIS向量列中。

数据管道:摄入→ 存储→ Query

注: 当前实施使用 批量矢量化 在初始数据加载时。矢量存储在标准矢量列中,当源文档发生变化时,需要手动重新矢量化。看 未来的增强功能 用于计划的自动同步功能。

flowchart LR
    subgraph INGEST["📥 Data Ingestion (Batch)"]
        direction TB
        FHIR_SRC[FHIR Bundles<br/>JSON Resources]
        CXR[MIMIC-CXR<br/>Chest X-rays]
        PARSE[fhirpy Parser<br/>Resource Extraction]
    end

    subgraph EMBED["🔢 Vectorization"]
        direction TB
        NIM_EMB[NVIDIA NIM<br/>NV-EmbedQA-E5-v5]
        NVCLIP_EMB[NV-CLIP<br/>Multimodal 1024-dim]
        NER[Entity Extraction<br/>Symptoms • Conditions]
    end

    subgraph STORE["🗄️ IRIS FHIR Repository"]
        direction TB
        subgraph FHIR_TABLES["FHIR Tables"]
            DOC[(ClinicalNoteVectors<br/>51 Documents)]
            IMG[(MIMICCXRImages<br/>50 X-rays)]
        end
        subgraph GRAPH_TABLES["Knowledge Graph"]
            ENT_TBL[(Entities<br/>83 Nodes)]
            REL_TBL[(EntityRelationships<br/>540 Edges)]
        end
        subgraph MEM_TABLES["Agent Memory"]
            MEM_TBL[(AgentMemoryVectors<br/>Semantic Store)]
        end
    end

    subgraph QUERY["🔍 Query Processing"]
        direction TB
        VEC_SEARCH[Vector Search<br/>VECTOR_COSINE]
        GRAPH_TRAV[Graph Traversal<br/>Entity → Relations]
        RRF_FUSE[RRF Fusion<br/>Rank Combination]
    end

    subgraph OUTPUT["📤 Results"]
        RANKED[Ranked Documents<br/>+ Knowledge Graph]
    end

    FHIR_SRC --> PARSE
    CXR --> NVCLIP_EMB
    PARSE --> NIM_EMB
    PARSE --> NER
    NIM_EMB --> DOC
    NVCLIP_EMB --> IMG
    NER --> ENT_TBL
    NER --> REL_TBL
    DOC --> VEC_SEARCH
    IMG --> VEC_SEARCH
    ENT_TBL --> GRAPH_TRAV
    REL_TBL --> GRAPH_TRAV
    MEM_TBL --> VEC_SEARCH
    VEC_SEARCH --> RRF_FUSE
    GRAPH_TRAV --> RRF_FUSE
    RRF_FUSE --> RANKED

IRIS数据库架构

erDiagram
    ClinicalNoteVectors {
        int ID PK
        string ResourceID UK
        string PatientID
        string DocumentType
        text TextContent
        vector Embedding "VECTOR(DOUBLE,1024)"
        string EmbeddingModel
        string SourceBundle
    }

    MIMICCXRImages {
        int ID PK
        string DicomID UK
        string PatientID
        string StudyID
        string ViewPosition
        text Findings
        vector Embedding "VECTOR(DOUBLE,1024)"
        string ImagePath
    }

    Entities {
        int ID PK
        string EntityText
        string EntityType
        float Confidence
        string SourceDocID FK
    }

    EntityRelationships {
        int ID PK
        int SourceEntityID FK
        int TargetEntityID FK
        string RelationType
        float Confidence
        string SourceText
        string TargetText
    }

    AgentMemoryVectors {
        int ID PK
        string MemoryType
        text Content
        vector Embedding "VECTOR(DOUBLE,1024)"
        datetime CreatedAt
    }

    ClinicalNoteVectors ||--o{ Entities : "extracts"
    Entities ||--o{ EntityRelationships : "source"
    Entities ||--o{ EntityRelationships : "target"

特性

MCP工具(10+可用)

kubectl和GraphRAG:

  1. search_fhir_documents -临床记录全文检索
  2. get_document_details -按ID检索完整的临床记录
  3. 搜索知识图 -搜索医疗实体(症状、状况、药物)
  4. 混合搜索 -结合向量+图搜索与RRF融合
  5. get_entity_statistics -知识图统计和见解

医学图像: 6. 搜索医疗图像 -基于NV-CLIP的胸部X光语义搜索

代理内存: 7. 记住信息 -存储语义记忆(更正、知识、偏好、反馈) 8. 回顾信息 -基于代理记忆的语义搜索 9. get_memory_stats -内存系统统计信息

可视化: 10. plot_症状_频率 -最常见症状图表 11. 绘图实体分布 -实体类型分布图 12. plot_patient_timeline -患者就诊时间表 13. 绘图实体网络 -知识图关系可视化 14. 可视化图表结果 -交互式GraphRAG搜索结果

聊天界面功能

  • ✅ 多模态搜索 -搜索临床文本、医学图像和知识图
  • ✅ 代理记忆 -基于向量搜索的持久语义记忆
  • ✅ 医学图像显示 -查看支持DICOM的胸部X光片
  • ✅ 执行透明度 -看看克劳德调用了哪些工具及其推理
  • ✅ 交互式图表 -从数据生成可视化
  • ✅ 对话历史 -带上下文的多回合对话
  • ✅ 内存编辑器 -在侧边栏中浏览、搜索、添加和删除代理记忆
  • ✅ 错误处理 -通过详细日志优雅地处理API问题
  • ✅ 最大迭代次数控制 -防止无限循环(10次迭代限制)

最新功能(v2.16.0):

  • ✅ 解耦搜索服务:从MCP服务器提取的搜索逻辑 src/search/ 为了可测试性。
  • ✅ 系统健康CLI新 python -m src.cli 用于环境验证和修复的工具。
  • ✅ 放射学修复:保证 SQLUser.FHIRDocuments 表在EC2上正确初始化。

以前的更新(v2.14.0):

  • ✅ 自动记忆召回:每次查询前自动调用记忆以指导工具选择
  • ✅ 交互式图形Viz:力导向、可拖动的图形 streamlit-agraph
  • ✅ 执行日志中的内存:在“显示执行详细信息”窗格中查看回忆
  • ✅ 基于NetworkX的图形布局与物理模拟

以前的更新:

  • v2.13.0:多LLM提供商支持(NIM>OpenAI>基岩),OneDrive备份
  • v2.12.0:带有纯IRIS矢量存储的代理存储系统
  • v2.10.2:修复内容处理错误,增加最大迭代次数
  • v2.10.0:基于RRF融合的GraphRAG多模态搜索
  • v2.0.0:与NVIDIA NIM集成的AWS部署

配置

所需的环境变量

# AWS Credentials
export AWS_PROFILE=your-profile  # or set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

# IRIS Database (defaults to local Docker container)
export IRIS_HOST=localhost    # Default; set to your EC2 IP for remote
export IRIS_PORT=32782        # Docker port (1972 for native IRIS)
export IRIS_NAMESPACE=%SYS
export IRIS_USERNAME=_SYSTEM
export IRIS_PASSWORD=SYS      # Default Docker password

# NVIDIA NV-CLIP (for medical images and memory)
export NVCLIP_BASE_URL="http://localhost:8002/v1"  # Local NIM via SSH tunnel
# or use cloud API:
# export NVCLIP_BASE_URL="https://integrate.api.nvidia.com/v1"
# export NVIDIA_API_KEY="your-api-key"

配置文件

  • config/fhir_graphrag_config.yaml -本地开发配置
  • config/fhir_graphrag_config.aws.yaml - AWS生产配置(活动)
  • config/aws-config.yaml -AWS基础架构设置

项目结构

medical-graphrag-assistant/
├── mcp-server/                      # MCP server and Streamlit app
│   ├── fhir_graphrag_mcp_server.py  # MCP server (Tool Wrappers)
│   ├── streamlit_app.py             # Chat UI v2.12.0 with memory editor
│   └── test_*.py                    # Integration tests
├── src/
│   ├── cli/                         # System Management CLI
│   ├── db/                          # IRIS database clients
│   ├── embeddings/                  # NVIDIA NIM integration
│   ├── memory/                      # Agent memory system
│   ├── search/                      # Decoupled Search Services (Business Logic)
│   │   ├── fhir_search.py           # Document search
│   │   ├── kg_search.py             # Knowledge graph search
│   │   └── hybrid_search.py         # Multi-modal fusion
│   ├── vectorization/               # Document vectorization
│   └── validation/                  # Data validation & Health checks
├── config/                          # Configuration files
│   └── fhir_graphrag_config.aws.yaml  # Active AWS config
├── docs/                            # Documentation
│   ├── architecture.md              # System architecture
│   ├── deployment-guide.md          # AWS deployment
│   └── troubleshooting.md           # Common issues
├── scripts/                         # Deployment and utility scripts
│   └── aws/                         # AWS-specific scripts
├── tests/                           # Test suite
└── archive/                         # Historical implementations and docs

技术栈

AI/ML:

  • AWS基岩(克劳德十四行诗4.5)
  • NVIDIA NV-CLIP(1024个暗多模式嵌入)
  • NVIDIA NIM(推理微服务)
  • 模型上下文协议(MCP)

数据库和矢量存储:

  • 跨系统IRIS社区版(AWS EC2)
  • 原生矢量(DOUBLE,1024)支持
  • 向量相似度搜索
  • 表:临床笔记向量、MIMICCXR图像、实体、实体关系、代理记忆向量

系统间IRIS矢量包:

  • iris-vector-rag -带有BYOT存储、GraphRAG管道和CloudConfiguration API的生产RAG框架
  • iris-vector-graph -面向图的实体存储和关系遍历向量工具包
  • iris-devtester -IRIS容器生命周期管理和自动化配置
  • intersystems-irispython -本地IRIS数据库驱动程序

基础设施:

  • AWS EC2 g5.xlarge(NVIDIA A10G GPU)
  • Python 3.10+
  • UI流式显示
  • Docker用于容器化

关键库:

  • fhirpy -Contoso资源解析和处理
  • boto3 -AWS SDK
  • streamlit -聊天界面
  • streamlit-agraph -交互式图形可视化
  • mcp -模型上下文协议SDK
  • pydicom -DICOM医学图像处理
  • networkx -图形算法和布局

查询示例

在聊天界面中尝试以下操作:

➤搜索:

  • “寻找胸痛患者”
  • “搜索糖尿病病例”
  • “显示最近的紧急访问”

图RAG:

  • “什么药物治疗高血压?”
  • “向我展示条件和程序之间的关系”
  • “二甲双胍的副作用是什么?”

医学图像:

  • “给我看肺炎的胸部X光片”
  • “找到显示心脏肥大的胸部X光片”
  • “搜索侧视胸部X光片”

代理内存:

  • “记住,我更喜欢简洁的临床总结”
  • “你对我的喜好了解多少?”
  • “回想一下我对医学术语所做的任何更正”

混合搜索:

  • “查找慢性疼痛的治疗方案”(结合矢量+图形+图像搜索)

可视化:

  • “按频率显示条件图表”
  • “可视化胸痛知识图谱”
  • “绘制实体关系图”

备份

该项目使用OneDrive进行自动云备份:

# Run backup (rsync to OneDrive folder)
./scripts/backup-to-onedrive.sh

备份包括所有代码、配置和医学图像(约195 MB)。OneDrive会自动同步到云端。

发展

运行测试

# Unit tests
pytest tests/unit/

# Integration tests
pytest tests/integration/

# E2E tests
pytest tests/e2e/

调试模式

启用调试日志记录:

import logging
logging.basicConfig(level=logging.DEBUG)

AWS部署

该系统部署在AWS EC2上,具有:

  • 例子:g5.xlarge(NVIDIA A10G GPU)
  • 区域:美国东部-1
  • 数据库:系统间IRIS社区版
  • GPU服务:用于NV-CLIP嵌入的NVIDIA NIM
  • 数据:50张医学图像,51份临床记录,83个实体,540个关系

看 docs/deployment-guide.md 了解详细的部署说明。

故障排除

看 docs/故障排除.md 对于常见问题。

常见问题:

  • 未配置AWS凭据→ 设置AWS_PROFILE或AWS环境变量
  • IRIS连接失败→ 检查IRIS_HOST和凭据
  • NV-CLIP没有响应→ 检查NVCLIP_BASE_URL和SSH隧道
  • 未找到医学图像→ 验证图像路径和DICOM支持
  • 内存搜索返回0个结果→ 通过量值测试检查嵌入物
  • 已达到最大迭代次数→ 查询可能太复杂,请尝试简化

文档

核心文件

当前会话文档

历史文档

  • 存档/ -旧的实现、脚本和会话文档

未来的增强功能

自动矢量同步

当前状态: 向量是在初始数据加载期间通过批处理生成的。当存储库中的Contoso文档更新时,必须手动重新生成嵌入。

计划增强: 利用IRIS EMBEDDING列类型进行自动矢量同步:

-- Future: Auto-computed embeddings on INSERT/UPDATE
CREATE TABLE ClinicalNoteVectors (
    ID INT PRIMARY KEY,
    TextContent TEXT,
    Embedding EMBEDDING[MODEL='NV-EmbedQA-E5-v5'](TextContent)  -- Auto-computed
);

优点:

  • 在以下情况下自动重新矢量化 TextContent 变化
  • 无需手动批量重新处理
  • Contoso存储库和矢量存储之间的实时同步

其他计划功能

  • kubectl订阅挂钩 -触发资源创建/更新事件的矢量化
  • 增量知识图更新 -更新实体/关系而不完全重建
  • IRIS健康共享集成 -直接的kubectl R4存储库连接
  • 矢量索引优化 -针对更大数据集的HNSW索引调整
  • 多租户支持 -多个医疗机构的命名空间隔离

贡献

这个项目是基于HttpClientAI黑客马拉松工具包。原始教程内容仍保留在 tutorial/ 目录。

许可证

从上游的kubectl AI Hackathon Kit存储库继承许可证。

致谢

  • 原始项目: FHIR-AI-黑客马拉松套件 作者:林
  • 系统间IRIS 矢量数据库平台
  • AWS基岩 Claude Sonnet 4.5版访问权限
  • 英伟达尼姆 用于NV-CLIP多模态嵌入
  • 模型上下文协议 通过Anthropic
  • MIMIC-CXR 医学影像数据集