alco guardian: エージェントが協調し「飲み過ぎ」と向き合う新しい飲酒体験
はじめに:飲み過ぎは「個人の責任」だけで解決できるのか? 🤔
「また飲み過ぎてしまった...」
楽しいお酒の席でついペースを上げてしまい、翌朝後悔した経験は誰にでもあるのではないでしょうか。WHOは「アルコールに安全な量はない」と警告しており[1]、過度な飲酒は健康へのリスクと隣り合わせです。国内でも、2024年に厚生労働省が「健康に配慮した飲酒に関するガイドライン」[2]を公表し、純アルコール量に着目した健康管理の重要性が示されるなど、社会全体の意識が変化しつつあります。
しかし、従来の対策は個人の強い意志に頼るものがほとんどでした。私たちは、この問題の解決策は、テクノロジーが人に寄り添い、「飲んでいる最中のリアルタイムな介入」と「飲酒後のパーソナライズされた振り返り」を組み合わせることにあると考えました。
本稿で紹介する「AI Bartender Suite (Alco Guardian)」は、3体のAIエージェントが協調し、健康的で楽しい飲酒体験をサポートするモバイルアプリケーションです。Zennハッカソン「AI Agent、創造の極みへ」への、私たちの実装に基づいた誠実な回答です。
デモ動画 🎥
プロダクト概要:3体のAIエージェント 🤖
Alco Guardianは、それぞれ異なる役割を持つ3体のAIエージェントで構成されています。
- Bartender(バーテンダー): あなたの気分や好みに合わせて会話する、気さくなパートナー。音声での対話も可能です。
- Guardian(守護者): あなたの飲酒ペースをリアルタイムで分析。純アルコール量を計算し、飲み過ぎを検知するとBartenderに「Veto(拒否権)」を発動します。
- Drinking Coach(飲酒コーチ): 現在の飲酒セッションを分析し、パーソナライズされたアドバイスを提供するトレーナー。長期的な飲酒傾向の分析機能も開発中です。
実装したソリューション ✨
Alco Guardianの核心は、役割の異なるエージェントの協調です。
- リアルタイム介入 (Bartender & Guardian): ユーザーが飲んだお酒を記録すると、Guardianが純アルコール量を計算。ペースが速いと判断すると、BartenderにVetoを発動。Vetoを受け取ったBartenderは、お酒の提案を控え、お水を勧めるといったように応答を変化させます。
- セッション単位の振り返り (Drinking Coach): Drinking Coachは現在の飲酒セッションのデータを分析し、「素晴らしいペースですね!」といったポジティブなフィードバックや、改善のための具体的なアドバイスをリアルタイムで提供します。
システムアーキテクチャ 🏗️
本システムは、Flutter製モバイルアプリと、Google Cloud Functions上で動作するPythonバックエンドで構成されています。エージェント間の連携には、一部A2Aメッセージングの概念を取り入れています。
技術スタックと選定理由 🛠️
レイヤ | 技術 | 選定理由 |
---|---|---|
会話/分析LLM | Gemini API | 高速な応答性能と長いコンテキスト長により、Bartenderの自然な会話とDrinking Coachの詳細な分析の両方を実現できました。 |
音声合成 | Google Cloud TTS | 人間らしい自然な音声で、Bartenderとの対話体験を向上させるために採用しました。 |
バックエンド | Cloud Functions (gen2) | リアルタイム性が求められるBartender/Guardian機能と、Drinking Coachによるセッション分析機能を、Pythonで統一して開発できるサーバーレス環境として最適でした。 |
データベース | Firestore | 飲酒セッションのデータを柔軟なスキーマで記録し、Drinking Coachが容易に分析できるデータストアとして採用しました。 |
フロントエンド | Flutter | 表現力豊かなUIを迅速に構築できる点を評価しました。 |
開発で工夫した点 💡
1. エージェント間の連携(Veto機能)
GuardianがBartenderの提案を「拒否」するVeto機能は、本プロジェクトの核です。GuardianがVetoを発動すると、Bartenderは自身の振る舞いを変え、お酒の提案を控えるようになります。このエージェント間の協調動作を実現するため、A2A(Agent-to-Agent)メッセージングのコンセプトを導入しました。現在はエージェントが直接互いの状態を参照する形で実装していますが、将来的には独立したメッセージブローカーを介した連携を目指しています。
# functions/agents/bartender_agent.py
# GuardianからのVetoメッセージを処理し、自身のコンテキストを更新する
async def _handle_guardian_veto(self, message: Dict):
self.context["guardian_warnings"].append({
"timestamp": message["timestamp"],
"message": message["payload"]["reason"],
"severity": message["payload"]["severity"]
})
logging.info(f"Guardian veto received: {message['payload']['reason']}")
2. FlutterによるチャットUI 💬
ユーザーとの対話のインターフェースとして、基本的なチャットUIを実装しました。エージェントからの返信であることが視覚的にわかるように、アイコンを表示するなどの工夫を行いました。
// mobile/lib/screens/bartender_chat_screen.dart
// チャットバブルを生成するWidget
Widget _buildMessageBubble(ChatMessage message) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
child: Row(
mainAxisAlignment:
message.isUser ? MainAxisAlignment.end : MainAxisAlignment.start,
children: [
if (!message.isUser)
Padding(
padding: const EdgeInsets.only(right: 8.0),
child: CircleAvatar(child: Icon(Icons.local_bar)),
),
Flexible(
child: Container(
padding: const EdgeInsets.all(12.0),
decoration: BoxDecoration(
color: message.isUser
? Theme.of(context).primaryColor
: Colors.grey.shade200,
borderRadius: BorderRadius.circular(16.0),
),
child: Text(message.text, ...),
),
),
],
),
);
}
今後の展望 🚀
今回のハッカソンでは、エージェント協調のコアコンセプトを実装しました。今後は、今回の実装を土台に、以下のような機能拡張を目指しています。
- 週次レポート機能の実装: Drinking Coachが1週間の飲酒データを分析し、週末にレポートを届ける機能を実装する。
- リアルタイムUI更新: 現在のHTTPリクエストベースの通信から、Firestoreのリアルタイムリスナーを用いた方式に変更し、Guardianからの警告などを即座にUIに反映させる。
- BAC(血中アルコール濃度)の推定: より精度の高い健康アドバイスを提供するため、体重などの個人データを考慮したBACの推定機能を実装する。
- 高度な代替案提案: Bartenderが、ユーザーの過去の注文履歴やその時の気分を考慮し、「こんなノンアルコールカクテルはいかがですか?」といった、より具体的で魅力的な代替案を提案する機能。
- ゲーミフィケーション: 「休肝日ボーナス」や「適正ペースチャレンジ」など、ゲーム感覚で楽しく健康的な飲酒習慣が身につく機能を導入する。
おわりに 🙏
「AIの力で、人々をより健康に、より幸せにできないか?」という問いから始まったこのプロジェクト。限られた時間の中で、3体のエージェントが協調するシステムのプロトタイプを実装できたのは、Google Cloudの強力なサービス群、特にGemini APIのおかげです。
この記事が、私たちの挑戦の誠実な記録として、そしてAIエージェント開発の面白さの一端を示すものとなれば幸いです。
最後に、このような素晴らしい機会を提供してくださったZennとGoogle Cloudの運営チームに心から感謝申し上げます。
Discussion