Google Cloud AIエージェントハッカソン参加:Chat Reflection Loop
はじめに
初のハッカソン参加、初のZenn記事投稿です。何とか参加基準には到達したと思うので、投稿します。
ハッカソンの内容はこちら
本記事では、開発した「Chat Reflection Loop」のコンセプトから実装の詳細までを説明します。
コンセプト概要
Chat Reflection Loopは、日々のLLM(ChatGPT、Geminiなど)との対話履歴を振り返ることで、ユーザーの思考パターンや気づきを明確化し、自己成長を促すツールです。
🎯 対象ユーザーと課題
ターゲットユーザー
-
日常的にLLMチャットアプリを活用しているユーザー
すでにChatGPTやGeminiなどのLLMを業務やプライベートで使っており、日常の対話の中から自然にインサイトや気づきを得たいと考えるユーザー -
従来の単発チャットでは物足りなさを感じているユーザー
対話履歴から自分自身の思考パターンや変化を確認したいと考え、無理なく継続的な学びや気づきを得られる仕組みを求めるユーザー
解決したい課題
-
会話の文脈の断絶
- 単発のLLMチャットでは、過去の対話からの学びが得られにくい
- 自身の思考パターンや変化が把握しづらい
-
フィードバックループの欠如
- 同じ質問や課題に対する繰り返しの対話が多く、成長の振り返りが不足
- 実践的なフィードバックが得られにくい
-
インサイトの見落とし
- 有益な気づきやパターンが散逸し、記録・分析が行われない
- 長期的な自己成長を実感しにくい
💡 実装済みの機能
1. スマートチャットインターフェース
- ユーザーごとのチャットセッション管理
- 会話履歴の保存と表示
- 直感的なUI/UXデザイン
2. 振り返り支援システム
- チャットセッションごとの振り返りノートを自動生成
- 重要な気づきの自動抽出
- ノートの閲覧・管理機能
3. 行動パターン分析
- ユーザーの行動傾向をラベル化し、パターンを可視化
- コミュニケーションスタイルの分析結果を表示
🔧 システムアーキテクチャ
アーキテクチャ概要
本システムでは、フロントエンドからのユーザー操作を受け取り、Firebase Authenticationで認証を行ったうえで、Cloud Run上のバックエンド(LLMエージェント)が処理を行う構成です。バックエンドは、Vertex AI(Gemini 2.0)をはじめとするLLM APIやTavily Search APIによる検索機能を活用し、各種LLM処理や検索結果の取得を行います。履歴データなどはFilestoreに保存し、Secret Managerで機密情報を一元管理します。インフラ構築とデプロイにはTerraformを使用し、継続的なスケーラビリティとセキュリティを担保しています。
ユーザーフローの全体像
-
ユーザーがブラウザやスマホアプリ(Flutter)でアクセス
- フロントエンド(Web/Android)アプリはFirebase Hostingでホスティング
- 同じFlutterコードベースからWeb/ネイティブアプリの双方を展開可能
-
Firebase Authenticationによる認証・認可
- ユーザーのログイン・ログアウト処理を担当
- フロントエンドから得られたトークンをもとにバックエンド側で権限を検証
-
Cloud Run上のバックエンド(LLMエージェント)
- FastAPIベースでAPIエンドポイントを提供
- PydanticAI + TavilyAIや独自LLMエージェントのロジックを組み込み
- ユーザーのチャットリクエストや履歴、認証トークンを受け取り、ビジネスロジックを実行
-
LLM処理・外部検索の呼び出し
- Vertex AI (Gemini 2.0) などのLLM APIを呼び出し、チャット応答や振り返りメモ生成などを実行
- Tavily Search API等の検索ツールにクエリを投げ、外部リソースや関連情報を取得
-
履歴データの保存・検索
- チャット履歴や振り返りメモをFilestoreに保存
- 新たに実装予定の検索機能により、過去の振り返りノートや関連メモを参照可能に
-
Secret Managerでの機密管理
- LLM APIキーやDB接続情報などの機密情報を一元管理
- Cloud IAMとの組み合わせでアクセスを厳密に制限
-
Terraformによるインフラ管理
- IaC(Infrastructure as Code)を採用し、Cloud RunやFirebaseなどのリソースを自動構成
- スケールアップ/スケールダウンや新規環境の構築を迅速かつ安全に実施
技術スタックの特徴
-
フロントエンド
- Flutterによるマルチプラットフォーム対応(Web/Android)
- 直感的なチャットUIと過去履歴の閲覧UIを提供
- Firebase Hostingでの公開
-
バックエンド (FastAPI + PydanticAI)
- FastAPIによりAPIを実装し、Firebase Authトークンなど認証情報を検証
- PydanticAI + TavilyAIによるメインチャット検索・LLMエージェントロジック
- チャット履歴から振り返りメモを生成するLLM処理
- 振り返りメモを元にユーザーの傾向を分析
-
インフラストラクチャ
- Cloud Runコンテナ上でスケーラブルにバックエンドを稼働
- Firebase Authenticationでユーザー認証・認可を実施
- Filestoreでチャット履歴を管理
- Secret ManagerでAPIキーや認証情報を安全に保管
- TerraformによるIaCで自動デプロイ・管理
時間切れで取り組めなかった内容
-
チャット応答の改善機構の実装
- ユーザーの傾向によるLLMの応答改善(FewShotプロンプトへの動的な組み込み)
- ラベルのクラスタリングと詳細な傾向分析
-
検索・参照機能の追加
- 過去の振り返りノートの検索機能
- 関連する振り返りの自動推薦システム
-
コラボレーション機能
- 振り返りメモの共有機能
- ユーザー間のチャット連携
-
その他
- Androidアプリ対応
- Web検索のGoogle Custom Search API化
完成したもの
アプリのデモ動画
ソースコード
おわりに
最近、RooCodeというAIコーディングツールを使いはじめて、一人でもできることが増えた錯覚をしたというのもあり、経験のないものをどれだけ組み込めるかなという力試しをしてみたくて、参加してみました。以下を実際に利用して開発できたので、そこそこ達成感があります。
- クラウド: Google Cloud(普段はAWSを主に利用)
- フロントエンド: Flutter(普段はPython中心の環境)
- IaC: Terraform(AWS CDKやServerlessの利用経験はあり)
- バックエンド(エージェントフレームワーク): PydanticAI(Langchain、LangGraphの経験はあり)
- LLM: Vertex AI系を利用(Azure Open AI Service/ AWS Bedrockの経験はあり)
一方で、アイディアを練る前にクラウド側の構成を先に完成させた結果、最初に作成できたのはただのチャットアプリでそこから悩んでしまいました。(ある意味力試しはここで終わって満足しかけてしまった) 本来は、アイディアを実現するのはアプリケーションレイヤ―だけでなく、クラウドアーキテクチャから設計できるとより良いものがあるような気がします。せっかくIaCで作ったので、ユーザーとの対話から必要な機能を実装しサーバレスで自動でデプロイされて、新規ツールが追加されるチャットアプリが勝手に進化するとかできたら面白いのになぁと。どなたかそんな感じの構成を実現できてる方いないかしら?他の人の内容も楽しみにすることにします。
Discussion
うまくいってなかったAndroidアプリ対応が1日遅れでできてしまった…少し悔しい