Google CloudとGeminiで作るパーソナルコンシュルジュ
はじめに
みなさん睡眠は管理できていますか?
もちろんAppleWatchやAndroid、睡眠管理用時計など様々なガジェットがありますが、正直どれも自分の用途には合いませんでした。そんな日常の課題感の中で毎年一つアプリケーションなりを作る活動でこの課題をなんとかしてみようということで簡単なアプリケーションを作ってみました。
携帯型の睡眠計測が合わないのはなぜか
・時計は付けて寝るのは無理
・携帯はベッド付近においているとそもそも睡眠の邪魔、途中でバッテリー切れなど
パーソナル用途でヘルスケアはWithingsということで、探してみるとありました。
昔はNokiaの製品だったようですWithingsはAPIがしっかり整備されているので遊ぶのにもってこいです
デバイスの見た目はキャンプの際に使う薄いインフレータブルマットのようで付属のUSB電源アダプター経由での電源を入れて初期設定が始まるといきなり膨らみます
あとはこれをベッドの下に置いておくだけ(置きっぱなし)
デバイス仕様
項目 | 内容 |
---|---|
外部素材 | プレミアムファブリック |
寸法と重量 | 長さ:637mm(25") 幅:190mm 厚さ:5mm(0.2インチ) 重量:350グラム(1.13オンス) |
センサー | 空気圧センサー:呼吸数、バリストカーディオグラフィーによる心拍数、マットレス上の身体の動きを測定します。 |
サウンドセンサー:いびきや呼吸の障害に特有の音声信号を識別します。 | |
データストレージと同期 | Withings アカウントを使用して、無料で無制限のオンラインデータストレージを提供します。 同期の間にデータをローカルに保存します。 |
電源 | 電源 5V 1A USB電源アダプターが含まれています |
通常WithingsのデバイスはiOSもしくはAndroidのアプリ経由で管理し利用します。
とても便利です。基本的にはそこで完結するのですが
こちらのサイトでAPIが公開されています。
かなりリッチなAPIリファレンスがあるため安心ですね。なんとなく作れそうな気がしてきます。
全体構想
サーバー側はFastAPIを利用したコンテナアプリケーションでもちろんGoogle Cloud上で動かします
クライアント側はGeminiのやり取りをするので簡単にLINE Bot APIを採用
アーキテクチャ概要図
開発環境はCloud Workstationsといいたいところなのですが、ここでは使い慣れたVM環境からdockerコンテナ作成しArtifact Registry経由でCloud Runをデプロイします。CI/CD化はまた別途記事予定。
oAuth2について
WithingsAPIではSleepやBodyAnalyzeなどのヘルスケアデータを扱うこともあり、oAuth2認証が必要となります。oAuth2実装を参考に実装してみました。
oAuthといえばこの記事です。
WithingsでのoAuthについてフロー図
実装の参考は、下記ページを参考にさせていただきました
LINEBot APIについて
LINEについては以前参加したこちらのハンズオンを参考にアカウント作成等進めます
FastAPIについて
Pythonのかなり軽快なWebフレームワークです。
FastAPIの特徴は
- Swagger UIが自動生成される
- 方安全
- 高速
参考にした入門書はこちら
Cloud Runについて
みんな大好きCloud Run
Withing SleepへアクセスするコンテナアプリケーションをDockerにてコンテナ化
してArtifact Registryに登録
$docker tag line-bot-app-01:latest us-central1-docker.pkg.dev/xxxx/repo/line-bot-app-01:latest
$docker push us-central1-docker.pkg.dev/xxxx/repo/line-bot-app-01:latest
コンテナイメージをArtifact Registoryにpushして
$ gcloud run deploy line-bot-app-01 \
--image us-central1-docker.pkg.dev/xxxx/repo/line-bot-app-01:latest \
--set-env-vars "CHANNEL_ACCESS_TOKEN=$CHANNEL_ACCESS_TOKEN" \
--set-env-vars "CHANNEL_SECRET=$CHANNEL_SECRET" \
--platform managed \
--region asia-northeast1 \
--allow-unauthenticated \
--max-instances=1
gcloudコマンドでcloud runにデプロイ
概要を押さえるならこちらもオススメです
Google生成AI Geminiについて
ここではVertex AI SDKを使ってPython上でGeminiを利用します
pipでVertex AI SDKをインストール
pip install --upgrade google-cloud-aiplatform
ライブラリのインポート、Vertex AIの初期化
import vertexai
PROJECT_ID = "[project-id]" # @param {type:"string"}
REGION = "region" # @param {type:"string"}
vertexai.init(project=PROJECT_ID, location=REGION)
from vertexai.generative_models import (
GenerationConfig,
GenerativeModel,
)
生成AIモデルGemini 1.5 Proを読み込みます。
model = GenerativeModel("gemini-1.5-pro-001")
モデルの構成パラメータの設定、呼び出し
generation_config = GenerationConfig(
temperature=1.0,
top_k=20,
top_p=0.9,
candidate_count=1,
max_output_tokens=8192,
)
response = model.generate_content(
"睡眠のアドバイスを提示ください",
generation_config=generation_config,
)
print(response.text)
プロンプトの指示と出力フォーマット
prompt = """与えられた睡眠情報から親身になってアドバイスしてください
JSON:
"""
response = model.generate_content(prompt)
print(response.text)
プロンプトギャラリー
LINEアプリ
初期作成段階では睡眠関連のキーワードを入力すると、WithingAPIにてSleepの睡眠情報を取得し、結果をGeminiに整形させるものでした。
Geminiに渡すプロンプト次第ですが結果から睡眠に関するアドバイスももらえるようにしています。
ハルシネーションを発生させてないよう、数字計算させないように工夫する必要があります。
このあたりはLangChainなどでエージェント機能でツールを使うなど工夫が必要そうです。
Vertex AI Agent Builderへ
Google Cloud Next '24 in Las Vegasの初日キーノートで発表された、Vertex AI Agent Builderがまさしく欲しかったサービスです。
こちらを使って更に便利にしていく予定です。こちらは続編をご期待ください。
まとめ
Google CloudとGeminiを使って簡単なアプリケーションを作ってみました。
また、LINE Bot API,FastAPI,oAuth2を実装で触ってみることができました。
LINE Bot APIはとても簡単にLINEのBotを作ることができるため、生活動線の中に様々なアプリケーションを組み込むことができるため便利ですね。
FastAPIはとても軽快でSwagger UIがありAPIのテストも簡単、構造も理解しやすいフレームワークだと思いました。
LINEからお手軽にGeminiと会話できるのは思った以上に便利です。
無理なく睡眠を測定できる目標は達成できました。
眠りが安定していると体の調子もよいので、Cloud Runという低コストなサービスを使って生活のお供にしていきたいと思います。
Discussion