診断支援エージェントの設計
「画像分類とVLMを組み合わせて、診断を支援するAIエージェントを作ろう。」
田中VPoEが要件を説明する。
「画像を受け取り、分類し、所見を生成し、リスクを判定する。人間の専門家を支援するエージェントだ。最終判断は必ず人間が行う。この大原則を忘れるな。」
エージェントの要件
| 機能 | 入力 | 出力 |
|---|---|---|
| 画像分類 | 画像ファイル | クラス + 確信度 |
| 所見生成 | 画像 + 分類結果 | 所見テキスト |
| リスク判定 | 分類 + 所見 | リスクレベル |
| 類似症例検索 | 画像特徴量 | 類似症例リスト |
| レポート生成 | 全分析結果 | 構造化レポート |
ツール設計
tools = {
"classify_image": {
"description": "画像を分類する",
"input": "image_path: str",
"output": "dict (class, confidence, grad_cam_path)",
},
"generate_findings": {
"description": "VLMで所見を生成する",
"input": "image_path: str, classification: dict",
"output": "str (所見テキスト)",
},
"assess_risk": {
"description": "リスクレベルを判定する",
"input": "classification: dict, findings: str",
"output": "dict (risk_level, urgency, recommendation)",
},
"search_similar": {
"description": "類似症例を検索する",
"input": "image_path: str, top_k: int",
"output": "list[dict] (case_id, similarity, diagnosis)",
},
"generate_report": {
"description": "分析レポートを生成する",
"input": "all_results: dict",
"output": "str (構造化レポート)",
},
}
State設計
from typing import TypedDict, Optional, Annotated
from operator import add
class DiagnosisAgentState(TypedDict):
messages: Annotated[list, add]
image_path: str
classification: Optional[dict]
findings: Optional[str]
risk_level: Optional[str]
similar_cases: Optional[list]
report: Optional[str]
needs_expert_review: bool
error: Optional[str]
ワークフロー設計
画像入力
↓
[画像分類] → クラス + 確信度 + Grad-CAM
↓
[所見生成] → VLMによる所見テキスト
↓
[リスク判定] → リスクレベル + 緊急度
↓
[類似症例検索] → 過去の類似ケース
↓
[レポート生成] → 構造化レポート
↓
[専門家レビュー判定]
↓
┌─── 要レビュー ──┐ ┌─── レビュー不要 ──┐
│通知 + ドラフト │ │レポート確定 │
└────────────────┘ └──────────────────┘
まとめ
| 項目 | ポイント |
|---|---|
| 5つのツール | 分類/所見/リスク/類似検索/レポート |
| Human-in-the-Loop | 最終判断は必ず専門家が行う |
| Grad-CAM | 判断根拠の可視化で信頼性を向上 |
| ワークフロー | 分類→所見→リスク→類似→レポートの流れ |
チェックリスト
- 診断支援エージェントの要件を定義できる
- 必要なツールを設計できる
- Human-in-the-Loopの設計原則を説明できる
- ワークフローの全体像を描ける
次のステップへ
エージェントの設計ができた。次は画像分析ツールの実装を学ぼう。
推定読了時間: 30分