使用说明
医学图谱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:
- search_fhir_documents -临床记录全文检索
- get_document_details -按ID检索完整的临床记录
- 搜索知识图 -搜索医疗实体(症状、状况、药物)
- 混合搜索 -结合向量+图搜索与RRF融合
- 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 SDKstreamlit-聊天界面streamlit-agraph-交互式图形可视化mcp-模型上下文协议SDKpydicom-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个结果→ 通过量值测试检查嵌入物
- 已达到最大迭代次数→ 查询可能太复杂,请尝试简化
文档
核心文件
当前会话文档
- 嵌入式_FIXED.md -图像和内存嵌入修复
- 内存_搜索_BROWSE_FIX.md -内存搜索UI修复
- PROGRESS.md -发展历程与成就
- TODO.md -当前任务和路线图
历史文档
- 存档/ -旧的实现、脚本和会话文档
未来的增强功能
自动矢量同步
当前状态: 向量是在初始数据加载期间通过批处理生成的。当存储库中的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 医学影像数据集