見出し画像

センサデータを使ってAI Wellness Agentを作ってみた 【Bedrock / Strands Agents / AgentCore Gateway】

はじめに

こんにちは。
前回の記事では Raspberry Pi + AWS IoT Core + Grafana で室内環境データを可視化しました。

今回の記事では、以下のようなシステムに発展させていきます。

  • AWS 上に収集したデータを AI の判断材料として利用可能にする

  • 室内環境、天気、予定を統合して、AI に LINE で健康アドバイスをさせる




作ったもの

この記事で紹介する AI システムの機能は以下となります。

  • 定期的に室内環境をチェックして LINE 通知してくれる機能

  • LINE で天気・予定・室内環境について質問できる機能

  • 1日の CO2濃度の推移などをグラフ付きで報告してくれる機能

最終的に、LINE で 定期通知・応答をしてくれる AI Agent を作ることができました。


1. 健康アドバイス通知機能

室内環境(CO2 / 温度 / 湿度)を AI が評価して、
天気や予定に関連した 健康アドバイスを定期的に通知 してくれます。

室内環境ステータスが 良好 のときの通知例:

Agent定期通知-良好

室内環境ステータスが 注意 のときの通知例:

Agent定期通知-注意

室内環境ステータスが 要対応 のときの通知例:

Agent定期通知-要対応


2. 対話型 AI アシスタント機能

定期通知だけでなく、
AI に室内環境や天気、予定に関する質問をすることができます。

天気と予定についての質問 に対する応答例:

Agent質問応答_1

明日についての質問 に対する応答例:

Agent質問応答_2


3. 室内環境レポート生成機能

AI が指定した期間の室内環境レポートを作成してくれます。

1日の室内環境レポート の例:

Agent作成レポート

グラフは以下のように CO2濃度 / 温度 / 湿度 で構成されます。

室内環境グラフ


全体構成

Raspberry Pi / IoT Core / DynamoDB は前回構築済みのため、
今回は AI Agent レイヤツールレイヤ を追加しています。

システム全体のアーキテクチャは以下となります。

アーキテクチャ図を描くのは楽しい


AI Agent にやらせたいこと

ユーザの指示に対して、毎回同じ流れで処理させるのではなく、
「何をするか」、「どのツールを使うか」を AI Agent の判断に委ねている ことがポイントとなります。

AI Agent ができることは、主に以下となります

  • 最新の室内環境を確認する

  • 天気予報を確認する

  • Google Calendar の予定を確認する

  • 室内環境レポートを作る

  • ユーザの質問に対して、LINE に自然な文章で返答する


Strands Agents で AI Agent を作る

AI Agent の構築には Strands Agents を使用しています。
AI モデルやツール、システムプロンプトは以下のように定義しています(一部抜粋)。

  • モデルは Bedrock の FM(Claude Sonnet)を使用

  • AI Agent が利用可能なツールを定義(ローカルツール / MCP Server ツール)

  • AI Agent は状況に応じた ツール選択 / 実行 をすることができる

import os
from strands import Agent
from strands.models import BedrockModel

# Agent がローカルで使用するツール (Built-in Tools)
from tools import (
    get_environment_summary_tool,           # 室内環境データのサマリを取得するツール
    reply_line_message_tool,                # テキストを LINE に返信するツール
    reply_line_text_and_image_message_tool, # テキストと画像を LINE に返信するツール
)

from mcp.client.streamable_http import streamablehttp_client
from strands.tools.mcp import MCPClient

# AgentCore との通信プロトコルに MCP を使用
agentcore_gateway_client = MCPClient(
    lambda: streamablehttp_client(os.environ["AGENTCORE_GATEWAY_URL"]),
)

BEDROCK_REGION = "ap-northeast-1"
BEDROCK_MODEL_ID = "global.anthropic.claude-sonnet-4-20250514-v1:0"

model = BedrockModel(
    model_id=BEDROCK_MODEL_ID,
    region_name=BEDROCK_REGION,
    temperature=0.6, # 回答のバリエーションを出したい
)

SYSTEM_PROMPT = """
[役割]
あなたはテレワークで働く人々の健康を支援する Wellness Support Specialist です。

[目的]
ユーザからの質問内容に応じて、短く自然な日本語で回答をしてください。
現在の室内環境や予定、天気に関する情報が必要な場合は、各種ツールを用いて取得してください。

...(プロンプトの詳細は割愛)
"""

# Agent 定義 (モデル、ツール、システムプロンプト設定)
chat_agent = Agent(
    model=model,
    tools=[
        # Agent がローカルで使用するツール (Built-in Tools)
        get_environment_summary_tool,
        reply_line_message_tool,
        reply_line_text_and_image_message_tool,
        # AgentCore Gateway 経由の MCP Server Lambda で実行するツール群
        agentcore_gateway_client,
    ],
    system_prompt=SYSTEM_PROMPT,
)

ツール構成

今回 AI Agent のために作成したツールは以下となります。
ツールは以下のように、
Agent と同一プロセスで実行 / MCP Server 上で実行 の 2つに分類できます。


ローカルツール

軽量 / LINE送信 系のツールです。
負荷が低く、通信レイテンシを短縮するため、Agent と同一プロセスで実行します。

ローカルツール一覧

AgentCore Gateway 経由のツール

高負荷 / 外部API通信 系のツールです。
負荷が高く、外部API依存のため、AgentCore Gateway を経由した MCP Server で実行します。

AgentCore Gatewayツール一覧

なぜ AgentCore Gateway を使ったか

以下のシーケンス図の通り、AgentCore Gateway を使用することで、
AI Agent とツールの 実装 / 実行 を分離できる点がポイントとなります。

  • AI Agent とツール実装を分離したい

  • ツールの実行環境を統一的に扱いたい

  • ツール schema でツールを動的に認識させたい

  • 将来的に AgentCore の Runtime / Memory / Observability に広げたい

AgentCoreシーケンス図

実際に AgentCore Gateway を使ってツールを実装してみると、
Agent にとっても、ツール開発者にとってもメリットがあることを実感しました。
(ツール schema によって Agent が安全にツールを使用できる設計になっています)


実際の動作

以上の AI Agent とツールを組み合わせることで、
AI Agent が 状況に応じて必要なツールを選択し、ユーザに応答する ことができます。

定期通知

  • 室内環境(CO2 / 温度 / 湿度)の評価

  • Agent が必要なツールを選択(天気 / 予定)

  • 室内環境や天気、予定を踏まえた健康アドバイスを生成

LINE チャット応答

  • ユーザからの質問、指示の理解

  • Agent が必要なツールを選択(天気 / 予定)

  • 回答を生成して返信

室内環境レポート生成

  • ユーザからの質問、指示の理解

  • Agent が必要なツールを選択(グラフ作成 / データ要約)

  • グラフ付きレポートを生成して返信


AI Agent の推論ログの確認

実際に AI Agent を動作させた後、
CloudWatch Logs から、AI Agent が推論時に動的にツールを選択 していることを確認できます。

ログ ①: ユーザに「明日の朝の天気と予定」について質問された場合

Agent が カレンダー取得ツール天気取得ツール の使用を判断し、
ツールの実行結果を統合して、最終的な回答を生成していることが確認できます。

CloudWatchログ1

ログ ②: ユーザに「1日のCO2濃度の推移」について質問された場合

Agent が センサデータのグラフ作成ツール の使用を判断し、
ツールの実行結果を統合して、室内環境レポートを生成していることが確認できます。

CloudWatchログ2

以上で AI Agent システムの構築から実行、動作確認 までをすることができました!


作ってみて感じたこと

  • AI Agent に分析させるデータは「最新値」だけではなく、データとしての文脈 が重要

  • Agent に 天気・予定・時間帯 などの関連性のある情報を与えるほど、
    事実に基づいた、多種多様な回答を得ることができる

  • MCP / AgentCore Gateway でツールを分離すると、ツールの拡張・運用 がしやすい

  • UI として初めて LINE を使用したが、AI チャットシステムとの親和性 を感じた


今後やりたいこと

現時点でも AI Agent システムとして動作していますが、
より本格的なシステムへと改善するために、以下の方針を検討しています。

AgentCore Runtime への移行

ツール管理だけでなく Agent 実行までを AgentCore に統合することで、
より AgentCore ネイティブな構成にする。

AgentCore Memory によるコンテキスト保持

Agent に短期記憶を持たせることで、
ユーザとの過去会話や行動履歴を踏まえた応答を実現する。

AgentCore Observability 強化

Agent の挙動や性能を継続的に監視・分析するため、
セッション数、レイテンシ、実行時間、トークン使用量、エラー率などを可視化する。

長期行動分析

LINE チャットをする中で、Agent がユーザの行動特性や嗜好を判断し、
よりユーザに最適化された回答ができるようにする。

データ・ツールの追加

例えば、心拍数や歩数、体重・体脂肪 データなども Cloud 上に収集し、
Agent に 運動・体重管理 機能を持たせると、
より深い、パーソナライズされた健康アドバイスを生成できそうです。


まとめ

この記事では、
AWS 上に収集したデータを AI が使用できる ようにして、
室内環境、天気、予定を統合した、健康アドバイスを LINE で通知 させるシステムを作成しました。

できたことは以下となります。

  • センサーデータ基盤を AI Agent に接続した

  • Strands Agents でツール利用型 Agent を作成した

  • AgentCore Gateway でツール管理を疎結合化した

  • 現実世界のデータを使って行動提案するAIシステムを構築した

AI Agent システムのベースを作成することができたので、
プロンプトやツールを変更すれば、色々な分野や用途で AI を活用できそうですね!

ここまで読んでいただき、ありがとうございます。

引き続き、AWS や AI に関する学習過程や気づきをブログで共有していきますので、興味があればぜひお付き合いください!

いいなと思ったら応援しよう!