🚀

Anatom-AI - 自然言語で動かす3D人体解剖図

に公開

はじめに

こんにちは!チームJCS 300 (Japan Changing System 300) です。
今回はAgentic AI Hackathon with Google Cloudで Anatom-AI という自然言語で動かせる3D人体解剖図を作成しました。その概要を本記事にまとめます。

1. プロジェクト概要

プロジェクト概要

人体の理解の本質の一つに臓器の立体的な配置の学問、すなわち解剖学があります。一般にatlasとよばれる解剖図アプリケーションを介して解剖の勉強を医師・医学部生は行っています。
しかし、そもそもの解剖があまりにも複雑なために、1つの解剖を理解するのに極めて煩雑な操作を伴っています。アプリケーションの操作そのものに莫大な認知的負荷を課しており、より本質的な解剖の理解に割くリソースを奪ってしまいます。また、病気や手術など複数臓器が関与してくるような事象の理解には、その事象を要素に分解して連続的にatlasを操作する必要があります。本プロジェクトでは多くの場面で人間の専門家相当の知性を持ちかつmultimodal性能も高いGeminiを活用することで、煩雑な操作を自然言語で直感的に操作可能なatlas Anatom-AI を作成いたしました。

対象ユーザ

  • 人体の解剖についてより直感的に理解したい医学部生
  • 手術前シミュレーションをしたい外科医
  • 病気について患者に説明したい外来医師とその患者
  • 救急科など現場の医師

2. 使用例


上記画像は脳梗塞の勉強をAnatom-AIに依頼した一例です。脳梗塞は、おおまかには、脳を栄養している血管の一部が何らかの原因で詰まることで血液が行かなくなり、脳細胞が死滅する病態です。貼付の写真では最も代表的な中大脳動脈 (MCA) が詰まることで引き起こされる脳梗塞を説明するべく、Anatom-AIが自律的に脳とMCA、そのMCAが詰まることで死滅すると考えられる脳の領域を表示してくれています。

3. System architecture

3.1 要点

Anatom-AI は、次の3つを分離して設計しています。

  1. 自然言語の解釈(ユーザーの意図を理解する)
  2. 解剖構造の同定(どの構造IDを表示すべきか決める)
  3. 3D表示の実行(実際にビューアを更新する)

この分離により、LLMの柔軟性を活かしつつ、構造IDの誤推測による誤表示リスクを抑えています。

3.2 コンポーネント構成

3.3 Request/Response

フロントエンドは、単なる質問文だけでなく、現在の表示状態もAPIに送ります。
これにより、AIは「今何が表示されているか」を踏まえて差分操作を作れます。

  • Request例

    • message: ユーザー入力
    • history: 会話履歴
    • atlasState: 現在のカテゴリ表示・選択・断面状態
    • operationLog: 直近の操作ログ
    • mode, viewMode, model: 操作モードやモデル指定
  • Response例

    • reply: ユーザー向け自然言語説明
    • atlasCommands: ビューア操作命令(検索、フォーカス、断面、着色など)
    • plan / reasoning: どういう意図でその操作にしたかの要約

3.4 実行シーケンス

3.5 この構成で得られる利点

  • 安定性: 構造IDをツールで確定してから操作するため、誤表示を減らしやすい
  • 拡張性: 新しい操作は atlasCommands を追加するだけで拡張しやすい
  • 保守性: LLM側と描画側を分離しているため、モデル切替時の影響範囲を限定できる
  • 直感的理解のしやすさ: 説明文と3D可視化が同一フローで同期し、理解の文脈が切れにくい

3.6 フォールバック設計

Anatom-AI は、うまく解釈できない入力やAPIエラー時に、以下のように段階的にフォールバックします。

  • 曖昧な入力
    例: 「お腹を見せて」のように解釈が分かれる場合は、候補を提示して確認質問を返します(誤表示を避けるため)。

  • 構造が直接見つからない入力
    まず関連構造への言い換え・分解(例: 空間名→周辺臓器)を試み、それでも解決できない場合は「該当構造を特定できない」旨を返します。

  • レート制限・外部API負荷(HTTP 429)
    ユーザーには待機またはモデル切替を促すメッセージを表示します。

  • API失敗・認証不備・内部エラー
    UI上では失敗メッセージを返し、誤った操作コマンドは実行しません。

  • 推論ループが収束しない場合
    一定回数で処理を打ち切り、より具体的な質問を促して再試行可能な形に戻します。

この設計により、Anatom-AIは「常に完璧な回答を返す」ことよりも、誤った可視化を避けつつ安全に再試行できることを優先しています。

3.7 現時点の制約

  • データセットに存在しない概念は、近似構造へのフォールバックが必要になる場合がある
  • 生成品質はプロンプト設計とツール仕様の改善余地がある

上記への対応として、Anatom-AIは「一発で完全正解を出す固定システム」ではなく、ツールで根拠を取りながら改善可能なエージェント型UIとして設計しています。

各種リンク

動画デモ: https://youtu.be/S_R1thf5z9g?si=lXkA-Eo6JoJMewDq
GitHub: https://github.com/chicken-salad/Anatomography

Discussion