LESSON

診断支援エージェントの設計

「画像分類と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分