🚀 FHIR Careplan - 汎用FHIRサーバーとツールキット
このプロジェクトは、医療データの統合、患者のケアプランニング、臨床判断支援を目的とした包括的なFHIR(Fast Healthcare Interoperability Resources)サーバーとツールキットを提供します。複数のFHIRサーバーに対する汎用インターフェースを備え、高度なAIによる臨床分析機能も搭載しています。
🚀 クイックスタート
FHIR Careplanプロジェクトは、医療データの統合、患者のケアプランニング、臨床判断支援を行うための包括的なソリューションです。以下の手順に従って、プロジェクトをセットアップし、利用を開始しましょう。
✨ 主な機能
🔗 複数サーバーのFHIR統合
- 汎用FHIRインターフェース:複数のFHIRサーバー(Epic、Cerner、HAPI、Firelyなど)に接続できます。
- ベンダー非依存:基盤となるFHIRサーバーの実装に関係なく、標準化されたAPIを提供します。
- リアルタイム接続テスト:サーバーのヘルスチェックと診断を自動で行います。
- インテリジェントフェイルオーバー:最適なパフォーマンスを得るために、サーバー間を自動的に切り替えます。
🤖 AIによる臨床分析
- OpenAI統合:自由記述のテキストから臨床キーワードと概念を抽出します。
- セマンティックマッピング:臨床用語を標準化されたFHIRコードにマッピングします。
- 類似患者マッチング:類似した臨床プロファイルを持つ患者を検索します。
- 予測分析:過去のデータに基づいてケアレコメンデーションを生成します。
📊 包括的な患者データアクセス
- 完全な患者レコード:人口統計情報、病状、投薬、手術、診察記録などを含みます。
- バイタルサインと検査結果:時系列データを持つ分類された観察結果を提供します。
- ケアプランとチーム:治療計画と医療提供者の情報を提供します。
- アレルギーと手術歴:完全な医療履歴を追跡します。
🚀 パフォーマンス最適化
- 非同期操作:高性能なデータアクセスのための非ブロッキングI/Oをサポートします。
- インテリジェントキャッシュ:病状コードや頻繁にアクセスされるデータをキャッシュします。
- バッチ処理:複数の患者レコードを効率的に処理します。
- コネクションプーリング:複数のサーバーに対する最適化されたHTTP接続を管理します。
📦 インストール
前提条件
- Python 3.11以上
- OpenAI APIキー(AI機能を使用する場合)
- FHIRサーバーへのアクセス(ローカルまたはリモート)
MCPサーバーのセットアップ
-
リポジトリをクローンする
git clone https://github.com/Kushagra-Dutta/Fhir-MCP.git
cd FHIR-MCP
-
依存関係をインストールする
pip install -r requirements.txt
uv sync
-
環境変数を設定する
echo "OPENAI_API_KEY=your_openai_api_key" > .env
-
FHIR MCPサーバーを起動する
python fhir_server.py
Firelyテストデータベースをローカルにセットアップする
-
Firelyサーバーのライセンスキーを取得する
- Firely Server Trial Pageにアクセスします。
- フォームに入力し、ライセンスキーをメールで受け取ります。
- ライセンスキーとダウンロードファイルを受け取ります(ライセンスは7日間有効)。
- ライセンスファイルを
firelyserver-license.jsonとして保存します。
-
Dockerを使用してセットアップする
docker pull firely/server
docker run -d -p 9090:4080 --name firely.server -v %CD%/firelyserver-license.json:/app/firelyserver-license.json firely/server
docker run -d -p 9090:4080 --name firely.server -v ${PWD}/firelyserver-license.json:/app/firelyserver-license.json firely/server
docker ps
-
テストデータをロードする
- Postmanを使用してテストデータバンドルをロードします。
- Postmanで新しいPUTリクエストを作成します。
- リクエストタイプをraw JSONに設定します。
- テストデータバンドルの内容をコピーします。
- ベースURL(http://localhost:9090)にリクエストを送信します。
- 各データバンドルに対して同じ手順を繰り返します。
これらの手順を完了すると、http://localhost:9090でアクセス可能なテストデータベースが使用できるようになります。
MCPチャットボットクライアントのセットアップ
MCPチャットボットクライアントは、リポジトリをフォークするか、Dockerを使用してセットアップできます。チャットボットは、FHIRサーバーとの対話のためのフロントエンドインターフェースとして機能します。
-
チャットボットのセットアップを取得する
git clone https://github.com/cgoinglove/mcp-client-chatbot.git
cd mcp-client-chatbot
-
PNPMをインストールする(未インストールの場合)
npm install -g pnpm
-
セットアップ方法を選択する
Docker Composeを使用したセットアップ 🐳
pnpm i
pnpm docker-compose:up
ローカルセットアップ 🚀
pnpm i
pnpm initial:env
pnpm docker:pg
pnpm db:migrate
pnpm dev
pnpm build:local && pnpm start
-
環境変数を設定する
必要なAPIキーを含む.envファイルを作成または編集します。
# LLMプロバイダーのAPIキー(使用するものを追加)
OPENAI_API_KEY=****
GOOGLE_GENERATIVE_AI_API_KEY=****
ANTHROPIC_API_KEY=****
XAI_API_KEY=****
OPENROUTER_API_KEY=****
OLLAMA_BASE_URL=http://localhost:11434/api
# 認証設定
BETTER_AUTH_SECRET=**** # 生成方法: npx @better-auth/cli@latest secret
BETTER_AUTH_URL= # オプション: アプリにアクセスするURL
# データベース設定
POSTGRES_URL=postgres://your_username:your_password@localhost:5432/your_database_name
# MCP設定
FILE_BASED_MCP_CONFIG=false
# オプションのOAuth設定(Google/GitHubログイン用)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
-
MCPサーバーをチャットボットに接続する
- http://localhost:3000でチャットボットにアクセスします。
- アカウントを作成してログインします。
- MCP設定に移動します。
- "Add Server"をクリックします。
.chatbot-config.jsonの設定をコピーして貼り付けます。
-
システムプロンプトを設定する
これらの手順を完了すると、チャットボットがMCPサーバーに接続され、FHIRデータベースとの対話が可能になります。
🔧 技術詳細
コアコンポーネント
graph TD
A[FHIR Server] --> B[Universal FHIR MCP Server]
B --> C[FHIR Tools Library]
C --> D[Multiple FHIR Servers]
C --> E[OpenAI Integration]
C --> F[Caching Layer]
D --> G[Firely Local]
D --> H[HAPI R4]
D --> I[Epic Systems]
D --> J[Cerner]
E --> K[Clinical Text Analysis]
E --> L[Code Mapping]
E --> M[Patient Matching]
サーバーレジストリ
システムは、FHIRサーバーの包括的なレジストリを維持しています。
- Firely Local (
http://localhost:9090) - ローカル開発用サーバー
- HAPI R4 (
http://hapi.fhir.org/baseR4) - 公開テストサーバー
- Epic, Cerner, Azure - エンタープライズ医療システム(設定可能)
📚 ドキュメント
基本的なFHIR操作
1. サーバー管理
from fhir_tools import UniversalFhirMcpServer
fhir_server = UniversalFhirMcpServer()
await fhir_server.initialize()
result = await fhir_server.test_server_connectivity("firely_local")
print(result)
await fhir_server.switch_server("hapi_r4")
2. 患者検索
search_criteria = {
"family": "Smith",
"given": "John",
"birthdate": "1990-01-01"
}
patients = await fhir_server.find_patient(search_criteria)
3. 患者データの取得
patient_info = await fhir_server.get_comprehensive_patient_info("patient-123")
conditions = await fhir_server.get_patient_conditions("patient-123")
medications = await fhir_server.get_patient_medications("patient-123")
vital_signs = await fhir_server.get_vital_signs("patient-123")
lab_results = await fhir_server.get_lab_results("patient-123")
AIによる臨床分析
1. 臨床テキストの抽出
clinical_note = "45-year-old female with HER2+ invasive ductal carcinoma, stage IIIA"
keywords = await fhir_server.extract_clinical_keywords(clinical_note)
2. FHIRコードのマッピング
clinical_data = {
"conditions": ["breast cancer", "diabetes"],
"age": 45,
"gender": "female"
}
fhir_codes = await fhir_server.map_to_fhir_codes_fast(clinical_data)
3. 類似患者の検索
criteria = {
"age": 45,
"gender": "female",
"conditions": ["breast cancer"]
}
similar_patients = await fhir_server.find_similar_patients_simple(criteria)
MCPサーバーの統合
FHIRサーバーは、AIアシスタントとの統合のためのMCPサーバーとして使用できます。
{
"mcpServers": {
"fhir-server": {
"command": "python",
"args": ["fhir_server.py"],
"env": {
"OPENAI_API_KEY": "your-key-here"
}
}
}
}
サーバー設定
システムは、fhir_tools.pyで構成された複数のFHIRサーバーをサポートしています。
servers = {
"firely_local": {
"name": "Firely Server Local",
"base_url": "http://localhost:9090",
"version": "R4",
"vendor": "Firely",
"auth_type": "none"
},
"hapi_r4": {
"name": "HAPI FHIR R4 Public",
"base_url": "http://hapi.fhir.org/baseR4",
"version": "R4",
"vendor": "HAPI",
"auth_type": "none"
}
}
環境変数
OPENAI_API_KEY=your_openai_api_key
FHIR_SERVER_URL=http://localhost:9090
FHIR_SERVER_AUTH_TOKEN=your_auth_token
利用可能なツール
コアFHIR操作
switch_server(server_name) - FHIRサーバーを切り替えます。
test_server_connectivity(server_name) - サーバーの接続性をテストします。
find_patient(search_criteria) - 患者を検索します。
get_comprehensive_patient_info(patient_id) - 完全な患者データを取得します。
臨床データアクセス
get_patient_observations(patient_id) - 患者の観察結果を取得します。
get_patient_conditions(patient_id) - 患者の病状を取得します。
get_patient_medications(patient_id) - 患者の投薬情報を取得します。
get_vital_signs(patient_id) - バイタルサインを取得します。
get_lab_results(patient_id) - 検査結果を取得します。
get_patient_encounters(patient_id) - 患者の診察記録を取得します。
get_patient_allergies(patient_id) - 患者のアレルギー情報を取得します。
get_patient_procedures(patient_id) - 患者の手術歴を取得します。
AIによる分析
extract_clinical_keywords(text) - テキストから臨床情報を抽出します。
map_to_fhir_codes_fast(clinical_data) - 用語をFHIRコードにマッピングします。
find_similar_patients_simple(criteria) - 類似した患者を検索します。
extract_condition_codes_from_fhir() - すべての病状コードを抽出します。
システム管理
list_available_servers() - 構成されたすべてのサーバーをリストします。
get_server_registry() - 完全なサーバーレジストリを取得します。
diagnose_fhir_server(server_name) - サーバーの機能を診断します。
clear_condition_cache() - 病状コードのキャッシュをクリアします。
get_condition_cache_stats() - キャッシュのパフォーマンス統計を取得します。
テストツール
MCPインスペクター
MCP(Model Context Protocol)インスペクターは、FHIRサーバーのインタラクションをデバッグおよび検証するための強力な開発およびテストツールです。サーバーの動作とAPIレスポンスをリアルタイムで検査します。
MCPインスペクターの使用方法
mcp dev fhir_server.py
機能
- リアルタイム監視:FHIRサーバーのインタラクションをリアルタイムで監視します。
- リクエスト/レスポンスロギング:すべてのAPI呼び出しとレスポンスの詳細なログを記録します。
- エラー検出:APIエラーや設定ミスに対する即時のフィードバックを提供します。
- パフォーマンスメトリクス:レスポンス時間とサーバーのパフォーマンスを追跡します。
- デバッグモード:開発時のトラブルシューティングのための拡張ロギングを提供します。
ログファイルの場所
インスペクターは、詳細なログを以下の場所に書き込みます。
logs/mcp_dev_inspector.log
ベストプラクティス
- 開発中にMCPインスペクターを使用して、サーバーの動作を検証します。
- ログファイルを監視して、予期しないエラーやパフォーマンスの問題を確認します。
- 新しいFHIRエンドポイントを実装するときにインスペクターを実行します。
- 外部FHIRサーバーとの接続問題をデバッグするために使用します。
🏥 ビジネスアプリケーション
病院関与プラットフォーム
このツールキットは、自動化された病院関与プラットフォームを構築することができます。
-
患者ケアコーディネーション
- 自動化されたケアプランの生成
- 治療タイムラインの管理
- 多職種チームのコーディネーション
-
臨床判断支援
- エビデンスベースの治療レコメンデーション
- リスク評価と早期警告
- 類似症例に基づくアウトカム予測
-
リソース最適化
- リソース割り当てのための予測分析
- 自動化されたスケジューリングと容量管理
- データ駆動型の洞察によるコスト最適化
-
品質向上
- 自動化された品質指標の追跡
- コンプライアンス監視と報告
- パフォーマンス分析とベンチマーク
🔐 セキュリティとコンプライアンス
- HIPAAコンプライアンス:医療データのプライバシーを考慮して設計されています。
- 安全な通信:すべてのサーバー通信にHTTPS/TLS暗号化を使用します。
- 認証サポート:複数の認証方法(OAuth、APIキーなど)をサポートします。
- 監査ロギング:コンプライアンスとデバッグのための包括的なロギングを提供します。
📊 パフォーマンス機能
- 非同期操作:高スループットのための非ブロッキングI/Oをサポートします。
- コネクションプーリング:効率的なHTTP接続管理を提供します。
- インテリジェントキャッシュ:病状コードやメタデータをキャッシュします。
- バッチ処理:複数のレコードを効率的に処理します。
- エラーハンドリング:堅牢なエラーハンドリングとリトライメカニズムを提供します。
🧪 テスト
テストの実行
python -c "
import asyncio
from fhir_tools import UniversalFhirMcpServer
async def test():
server = UniversalFhirMcpServer()
await server.initialize()
result = await server.test_server_connectivity('firely_local')
print(result)
asyncio.run(test())
"
サーバー診断
diagnostics = await fhir_server.diagnose_fhir_server("firely_local")
print(diagnostics)
📝 ロギング
システムは、包括的なロギングを提供します。
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
🤝 コントリビュート
- リポジトリをフォークします。
- 機能ブランチを作成します。
- 変更を加えます。
- 新しい機能に対するテストを追加します。
- プルリクエストを送信します。
📄 ライセンス
このプロジェクトは、MITライセンスの下でライセンスされています。詳細については、LICENSEファイルを参照してください。
🆘 サポート
サポートや質問については、以下の方法で対応します。
- GitHubリポジトリにイシューを作成します。
- ログディレクトリを確認して、詳細なエラー情報を取得します。
- サーバーのトラブルシューティングには、診断ツールを使用します。
🔄 バージョン履歴
- v0.1.0 - コアFHIR機能を備えた初期リリース
- v0.2.0 - AIによる臨床分析機能を追加
- v0.3.0 - 複数サーバーサポートとキャッシュ機能を強化
🎯 ロードマップ
- [ ] 高度な分析ダッシュボード
- [ ] リアルタイムデータストリーミング
- [ ] 機械学習モデルの統合
- [ ] 強化されたセキュリティ機能
- [ ] モバイルアプリケーションのサポート
- [ ] クラウドデプロイメントテンプレート
🕒 FHIRタイムラインエージェント
FHIRタイムラインエージェント (fhir_timeline_agent.py) は、実際のFHIRデータを使用して患者のクエリから詳細な臨床治療タイムラインを生成するために設計された特殊なエージェントです。特にFirely Local FHIRサーバーと連携するように構成されています。
機能
- 自然言語処理:自由記述の患者クエリを構造化された臨床データに変換します。
- 実際の患者データ分析:タイムライン生成に実際のFHIR患者レコードを使用します。
- AIによるタイムライン生成:OpenAI GPT-4を利用して正確な臨床タイムラインを生成します。
- インタラクティブなCLIインターフェース:リッチなフォーマットのユーザーフレンドリーなコマンドラインインターフェースを提供します。
- 包括的な患者マッチング:年齢、性別、病状に基づいて類似した患者を検索します。
使用方法
python fhir_timeline_agent.py
python fhir_timeline_agent.py --demo
クエリの例
• "45歳の男性、膵臓腺癌"
• "62歳の女性、HER2陽性乳がん"
• "58歳の男性、III期Aの肺腺癌"
タイムライン生成プロセス
-
クエリ処理
- 自然言語から臨床キーワードを抽出します。
- 年齢、性別、病状、病期、バイオマーカーを特定します。
-
FHIRコードマッピング
- 臨床用語を標準化されたFHIRコードにマッピングします。
- Firely Localサーバーのコードシステムを使用します。
-
類似患者検索
- FHIRデータベース内で一致する患者を検索します。
- 年齢、性別、病状に基づいてマッチングスコアを付けます。
-
データ集約
- 包括的な医療履歴を収集します。
- 手術、投薬、診察記録を含みます。
-
タイムライン生成
- AIを使用して詳細な治療タイムラインを作成します。
- 臨床的なコンテキストを持つイベントを時系列で整理します。
出力形式
エージェントは、以下のようなリッチなフォーマットの出力を生成します。
- 患者プロファイル:人口統計情報、診断、病期、バイオマーカー
- 治療タイムライン:日付付きの段階的な臨床イベント
- 臨床アウトカム:治療反応、生存状態、毒性
- データソース:サーバー情報と分析メトリクス
設定
エージェントは、以下の設定でハードコードされています。
- Firely Local FHIRサーバー (
http://localhost:9090)
- OpenAI GPT-4を使用したタイムライン生成
- リッチなコンソール出力によるフォーマット表示
要件
ベストプラクティス
- クエリには完全な患者情報を提供します。
- 年齢、性別、主要な診断を含めます。
- 可能であれば病期とバイオマーカー情報を追加します。
- より良いマッチングのために具体的な臨床用語を使用します。
エラーハンドリング
エージェントは、以下のエラーに対する堅牢なエラーハンドリングを含んでいます。
- 患者情報の不足
- FHIRサーバーの接続問題
- AI生成の失敗
- データ解析エラー
各エラーは、解決のための有用な提案とともに表示されます。
医療の相互運用性と患者ケアの改善のために愛情を込めて開発されました