皆さんがよく使うChatGPT。とても便利ですよね。雑談、文章の要約、アイデア出し、柔軟な会話
などでとても便利ですし、ChatGPTはそのようことが得意です。
しかしChatGPTは確率に基づいて「それらしい答え」を生成する道具なんです!
普段の雑談で使う際は気にならないかもしれませんが、お金などの重要な計算をして、ChatGPTが間違った回答をすると、致命的なミスになってしまいます。
画像のような設計で「高額療養費制度の利用者のなかにメンタルヘルスが原因となっている人がいます。精神科を受診している全国約576.4万人の外来受診者のうち、支援を受けている件数は約259.2万件。残りの317.2万人の中に適切な支援や行動がとれていない人に向けて、病院帰りのその日から支援を受けられるようなサービスを考えました」
顔画像を端末処理して、AIが精神状態を推定し、MCPで行政支援や相談先までを探し、連絡先にgmailを送る文章を書くまでの一気通貫の支援ai agentを目的としています。
| 比較項目 | チャットAI(ChatGPTなど) | AIエージェント |
|---|---|---|
| 主な目的 | 雑談・要約・アイデア出し | 厳密な計算・ルール処理 |
| 仕組み | 確率に基づく「それらしい答え」の生成 | 制度・数式に従った厳密な算出 |
| 得意なこと | 柔軟な対話、クリエイティブ作業 | 正確な計算、システム連携 |
そこで私たちは国の制度のルールや数式に従って厳密に合否や金額を算出するAIエージェント「医療費サポートナビ」を作成しました。
本記事では、解決したい課題、システムの設計思想について紹介します。
1. 解決する課題
病院に行って医療費が高くなった場合、条件を満たせばお金が戻る制度があります。しかし、病院が自動で申請してくれるわけではありません。
そもそも手続きが複雑すぎて、対象者であっても制度の存在自体を知らずに受け取れていないという課題があります。高額療養費制度の利用者のなかにメンタルヘルスが原因となっている人がいます。心の病院を受診している全国約576.4万人の外来受診者のうち、支援を受けている件数は約259.2万件。残りの317.2万人の中に適切な支援や行動がとれていない人に向けて、病院帰りのその日から支援を受けられるようなサービスを考えました。
高額な医療費がかかったりしたときに、「私たちが支払う医療費のルール(自己負担の上限額)」

出典:https://www.mhlw.go.jp/content/001725284.pdf#page=2.00
自分が使える制度を探す: 制度の種類が多く、自分に合うものが分かりにくい。
制度の説明を読む: 専門用語が多く、内容が難しい。
自分が対象になるか確認する: 年齢・所得・保険・医療費など、確認すべき条件が膨大。
必要書類をそろえる: 領収書や申請書など、必要な書類が制度ごとに異なる。
申請先と期限を調べる: 加入している保険によって申請先が異なり、期限もある。
申請して給付を受け取る: 途中で面倒になり諦めてしまうと、対象者でも給付を受け取れない。
この面倒な作業を「AIエージェントが楽に案内する」状態に変化させたいと思いました。
2.なぜChatGPTではダメなのか?
「それ、ChatGPTに聞けば済むのでは?」と思われるかもしれません。しかし、ChatGPTと本プロダクトでは明確な違いがあります。以下がchatGPTと本プロダクトの違いを表にしたものです。
| 比較項目 | ChatGPTだけの場合 | 本プロダクト(AIエージェント) |
|---|---|---|
| 入力の手間 | 毎回、画像と条件をChatGPTに手入力する必要がある | システム化された手順でスムーズに必要情報が入力可能 |
| 再現性と信頼性 | 回答の再現性がなく、質問方法などで回答が変わる可能性があり不安(計算間違いや条件の見落としがあり得る) | 同じ条件なら確実に同じ結果を返すように設定 している |
| 事前の知識 | 利用者がChatGPTに入力すべき必要な項目をあらかじめ自分で把握する必要がある | 入力項目が決められているため、迷わず正確に実行できる |
3. システムの全体像とアーキテクチャ
本プロダクトは、「AIの得意なこと」と「プログラム(計算機)の得意なこと」をきっちり役割分担させ、計算ミスが絶対に起きないように設計されたシステムです。
金銭(受給額など)を扱うシステムでは、AIにすべてを任せると「ときどき計算や数字を間違える(嘘をつく)」という弱点があります。これを防ぐために、次のように設計しました。
役割の分担
AI(LLM)の仕事:「書類の読み取り」
アップロードされた領収書や診断書を読み込み、「日付は〇月〇日、金額は〇〇円」といった整理されたデータに変換する作業だけをAIに担当させています。
プログラム(コード)の仕事:「法律やルールに従い判定・計算をする」
AIが読み取った数値や、ユーザーの年齢・所得などの条件をもとに、法令や自治体のルールに従って実際の金額を計算する処理は、すべて決まったプログラム(コード)で行います。
なぜこの仕組みが良いのか?
計算ミスや「嘘」が絶対に起きない
AIは文脈によって答えが変わることがありますが、プログラムの計算式はいつ実行しても同じ結果になります。これにより、「同じ条件なら、何回計算しても1円の狂いもなく全く同じ正確な金額が出る」という信頼性を実現しています。
複雑なルールにも確実に対応できる
日付やバージョンごとに変わる複雑な法律・制度のルールは、すべてプログラム側で管理・計算されるため、法改正などにも正確に対応できます。
正確な情報だけを引っ張ってくる
大量の制度データの中から、必要な情報を正確に検索して参照する仕組み(RAG)を取り入れているため、根拠のある確実な情報に基づいた処理が行われます。
つまり、、、
AIには書類を文字にして読み取り、肝心のお金の計算は『決まった計算式(プログラム)』を行うことで、正確で信頼できる仕組みとなっています。
4. 機能一覧
利用者側
| 機能 | 説明 |
|---|---|
| 領収書のアップロード | 病院の領収書や診療明細の画像を送信します |
| 読み取り | 画像に書かれた氏名、医療費、診療日などを文字データに変換します |
| 読み取り結果の確認・修正 | OCRが間違えた項目を、利用者が直せます |
| 不足情報の入力 | 年齢、所得区分、保険情報など、領収書だけでは分からない情報を追加します |
行政側
| 機能 | 説明 |
|---|---|
| 申請一覧 | 受付番号、氏名、医療機関、申請金額、状態、優先度などを一覧で確認できます |
Supabase(データベース)保存用のデータ構造
テーブル名 (table_name) |
主な役割・用途 | 主なカラム・データ型 |
|---|---|---|
calculation_logs |
プログラムによる厳密な計算根拠のログ記録 |
id (UUID, PK), case_id (UUID, FK), rule_version (Text), calculated_amount (Numeric), details (JSONB) |
主なコードディレクトリ構造と役割
medical-expense-agent-main/
├── app/ # FastAPI バックエンドコア
│ ├── main.py # エントリポイント (APIルーターの統合)
│ ├── models.py # 共通データモデル (Pydantic)
│ ├── staff_cases.py # スタッフ用案件管理ロジック
│ ├── benefits/ # 判定モジュール
│ │ ├── api.py # 給付判定エンドポイント
│ │ ├── service.py # 判定確定・調整サービス
│ │ └── rule_store.py # 給付ルールの読み込み
│ ├── rules/ # 法律・法定ルールのテーブル管理
│ │ ├── benefit_rules.json # 基本ルール定義
│ │ ├── until_2026_07.py # 2026年7月までの計算ロジック
│ │ └── from_2026_08.py # 2026年8月以降の新計算ロジック
│ ├── services/ # アプリケーションサービス
│ │ └── evaluator.py # 医療費計算・控除評価モジュール
│ └── workflow/ # 領収書処理・ワークフロー
│ ├── ocr.py # OCR処理ロジック (Azure Form Recognizer等)
│ ├── privacy.py # 個人情報のマスキング・プライバシー保護
│ ├── calculation.py # 医療費・自己負担額計算
│ ├── validation.py # 入力・抽出データの検証
│ └── handoff.py # 人手確認(手動審査)への引き継ぎ処理
│
├── frontend/ # フロントエンド (React + Vite + TypeScript)
│ ├── src/
│ │ ├── App.tsx # 一般申請者向けUI
│ │ ├── RootApp.tsx # 全体ルートコンポーネント
│ │ ├── staff/StaffApp.tsx # 審査スタッフ専用ダッシュボード
│ │ └── services/staffApi.ts # スタッフ用APIクライアント
│
├── current-demo/ # スタンドアロンAI給付判定エージェント (Node.js)
│ ├── benefit-agent/
│ │ ├── agent.mjs # AIエージェントメイン処理
│ │ ├── decision-agent.mjs # 支給可否の意志決定ロジック
│ │ ├── knowledge/ # 制度文書ナレッジベース (RAG用)
│ │ └── supabase.sql # データ保存用データベース定義
│
└── tests/ # テストコード群 (Pytest)
├── test_api.py # API動作テスト
├── test_evaluator.py # 医療費評価エンジンテスト
├── test_ocr_handoff.py # OCR・エスカレーション判定テスト
└── test_workflow.py # ワークフロー全体の結合テスト


