0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIアシスタントと一緒に1日でAIエージェントを作った話(AI Agent①)

0
Last updated at Posted at 2026-01-06

はじめに

こんにちは、株式会社ラフールで開発を担当している李です。

今回は、社内のハッカソンイベントでAIアシスタントを活用しながら、セルフヘルスケアAIエージェント(Health Agent)を0→1で開発した取り組みをご紹介します。

本プロジェクトでは、健康診断書の画像をアップロードするだけで、AIが自動解析・データベース保存・トレンド分析まで行うシステムをたった1日で構築しました。

使用技術:

  • Mastra - AIエージェントフレームワーク
  • Claude Sonnet 4.5 - マルチモーダルLLM(AWS Bedrock経由)
  • PostgreSQL - 健康データの永続化
  • Next.js + Chart.js - トレンド可視化ダッシュボード

スクリーンショット 2026-01-05 13.58.53.png

1. システムアーキテクチャ

┌─────────────────────────────────────────────────────────────┐
│                      Health Agent                           
│  ┌─────────────────────────────────────────────────────┐    │
│  │           Claude Sonnet 4.5 (マルチモーダルLLM)        │    │
│  │         画像認識 + 自然言語理解 + 推論能力               │    │
│  └─────────────────────────────────────────────────────┘     │
│                           │                                  │
│              ┌────────────┴────────────┐                     │
│              ▼                         ▼                     │
│  ┌─────────────────────┐   ┌─────────────────────────┐       │
│  │  save-health-check  │   │ generate-health-trend   │       │
│  │     (保存ツール)      │   │     (分析ツール)         │       │
│  └─────────────────────┘   └─────────────────────────┘       │
│              │                         │                     │
│              └────────────┬────────────┘                     │
│                           ▼                                  │
│              ┌─────────────────────────┐                     │
│              │       PostgreSQL        │                     │
│              │    (健康データ永続化)     │                      │
│              └─────────────────────────┘                     │
└─────────────────────────────────────────────────────────────┘

2. 実装

2.1 エージェント定義

Mastraフレームワークを使用してHealth Agentを定義します。

import { Agent } from '@mastra/core/agent';
import { Memory } from '@mastra/memory';
import { LibSQLStore } from '@mastra/libsql';
import { healthCheckTool } from '../tools/health-check-tool';
import { healthTrendChartTool } from '../tools/health-trend-chart-tool';
import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock';

export const healthAgent = new Agent({
  name: 'Health Agent',
  instructions: `あなたは健康診断結果を包括的に解析する専門アシスタントです...`,
  model: createAmazonBedrock({...})('us.anthropic.claude-sonnet-4-5-20250929-v1:0'),
  tools: { healthCheckTool, healthTrendChartTool },
  memory: new Memory({ storage: new LibSQLStore({ url: 'file:../mastra.db' }) }),
});

ポイント:

  • instructions でエージェントの役割を簡潔に定義
  • tools で保存・分析ツールを登録
  • memory で会話履歴を永続化

instructionsの書き方

項目 説明
役割定義 エージェントの専門性 健康診断結果を解析する専門アシスタント
主な機能 できることのリスト 画像解析、DB保存、トレンド分析
ツール どのツールをいつ使うか 画像が来たらsave-health-checkを呼ぶ
対応データ 扱える項目・形式 34項目の検査項目に対応
出力形式 回答のフォーマット Markdownテーブルで表示

2.2 ツール定義

ツール名 機能 主な特徴
save-health-check 健康診断結果をDBに保存 Zodスキーマ検証、トランザクション管理、重複データ上書き
generate-health-trend 時系列トレンド分析 統計計算、改善/悪化判定(HDL・eGFR↑=改善、LDL・中性脂肪↓=改善)、Markdownテーブル出力

3. データベース設計

3.1 スキーマ構造

-- 検査記録マスター
CREATE TABLE health_checkups (
  id SERIAL PRIMARY KEY,
  checkup_id VARCHAR(255) UNIQUE NOT NULL,
  checkup_date DATE NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 検査項目詳細(4カラムパターン)
CREATE TABLE health_items (
  checkup_id VARCHAR(255) REFERENCES health_checkups(checkup_id) ON DELETE CASCADE,

  -- 各項目に対して4カラム(例: LDLコレステロール)
  ldl_cholesterol DECIMAL(10, 2),           -- 数値
  ldl_cholesterol_unit VARCHAR(50),         -- 単位
  ldl_cholesterol_reference VARCHAR(100),   -- 基準値
  ldl_cholesterol_status VARCHAR(20),       -- 判定(正常/要注意/異常)

  -- 他34項目も同様のパターン...
);

3.2 検査項目マッピング

医療現場での用語揺れに対応するため、同義語をマッピングしています。

入力例 DBカラム名
GOT, AST, GOT/AST got_ast
GPT, ALT, GPT/ALT gpt_alt
LDLコレステロール, LDL ldl_cholesterol
中性脂肪, TG triglycerides

4. 活用

4.1 健康診断画像のアップロード

  1. 健康診断結果の画像をアップロード
  2. Claude Sonnet 4.5が画像を「見て」理解
  3. 検査項目、数値、基準値、判定を自動抽出
  4. 構造化データとしてデータベースに保存
  5. 過去のトレンドを確認し、改善提案を受ける

screencapture-localhost-3000-chat-2026-01-05-13_56_14.png

4.2 トレンド分析の例

screencapture-localhost-3000-chat-2026-01-05-12_52_39.png

5. フロントエンド(ダッシュボード)

Next.js + Chart.jsで構築したトレンド可視化ダッシュボードです。

主な機能:

  • カテゴリ別検査項目選択: 血液一般/肝機能/腎機能/脂質/糖代謝など9カテゴリ
  • 基準値範囲の可視化: 緑色の帯で正常範囲を表示
  • 上限・下限ライン: 破線で基準値の境界を明示
  • インタラクティブなチャート: ホバーで詳細値を表示

screencapture-localhost-3000-2026-01-05-13_07_24.png

まとめ

本記事では、Mastraフレームワークを使ってAIエージェントを構築し、健康診断書の自動解析システムを実装しました。

主な特徴:

  • 画像解析: 健康診断書を撮影するだけでデータ化
  • AI対話: 自然な会話でデータ分析・質問応答
  • トレンド分析: 長期的な健康状態の変化を可視化
  • 永続保存: PostgreSQLによる信頼性の高いデータ管理
  • ダッシュボード: 基準値範囲付きのトレンドグラフを可視化

株式会社ラフールでは、AIを活用した「ラフールマネジメント」サービスを提供しております。
お客様のデータを基に、AIが客観的な分析を行い、改善に向けたアドバイスを提供しております。

ご興味がございましたら、お気軽にご連絡ください。
https://corp.lafool.co.jp/service/#management

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?