1. はじめに
この Codelab では、Rugged Terrain Guide というアウトドア用品の e コマースショップに、スマートなカスタマー
サポート チャット ウィジェットを追加します。Firebase AI Logic を使用してこのエージェントを構築し、AI のペルソナ、厳格な緩和対応予算ルールを処理し、商品カタログをコンテキストとして動的に使用するサーバーサイドのプロンプト テンプレート(product-agent)を構成する方法を学びます。
手順:
- この Codelab のウェブアプリのスターター コードを取得します。
- Firebase プロジェクトを設定します。
- ウェブアプリで Firebase サービス(Firebase AI Logic など)を設定して初期化します。
- Firebase コンソールでサーバーサイドのプロンプト テンプレートを構成します。
- React のような TypeScript フロントエンドから生成 AI サービスを呼び出してテンプレートにアクセスします。
必要なもの:
- ウェブブラウザ(Chrome など)。
- TypeScript と Node.js の基本的な知識。
- 任意の IDE またはテキスト エディタ。Antigravity をおすすめします。
2. スターター コードを取得する
- ターミナルで、スターター リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git - コード ディレクトリに移動し、依存関係をインストールします。
cd devrel-demos/codelabs/firebase-server-prompt-templates-codelab npm install
3. Firebase プロジェクトを設定する
Firebase プロジェクトを作成する
- Google アカウントを使用して Firebase コンソール にログインします。
- ボタンをクリックして新しいプロジェクトを作成し、プロジェクト名(
rugged-terrain-aiなど)を入力します。
- [続行] をクリックします。
- Firebase の利用規約が表示されたら、内容を読み、同意して [続行] をクリックします。
- (省略可)Firebase コンソールで AI アシスタンス(「Gemini in Firebase」)を有効にします。
- この Codelab では Google アナリティクスは不要 なので、Google アナリティクスのオプションをオフに切り替えます 。
- [プロジェクトを作成] をクリックし、プロジェクトのプロビジョニングが完了するまで待ってから、[続行] をクリックします。
Firebase のお支払いプランをアップグレードする
この Codelab で Firebase サービスを使用するには、Firebase プロジェクトが従量課金制(Blaze)の料金プランに登録されている必要があります。つまり、Cloud 請求先アカウントにリンクされている必要があります。
- Cloud 請求先アカウントには、クレジット カードなどのお支払い方法を設定する必要があります。
- Firebase と Google Cloud を初めて使用する場合は、$300 のクレジットと無料トライアル用 Cloud 請求先アカウントを利用してサービスを試せるかどうか確認してください。
- イベントの一環としてこの Codelab を行う場合は、Cloud クレジットが利用可能かどうかを主催者にお問い合わせください。
プロジェクトを Blaze プランにアップグレードする手順は次のとおりです。
- Firebase コンソールで、プランをアップグレードするために を選択します。
- Blaze プランを選択します。画面上の手順に沿って、Cloud 請求先アカウントをプロジェクトにリンクします。
このアップグレードの一環として Cloud 請求先アカウントを作成する必要があった場合は、Firebase コンソールのアップグレード フローに戻ってアップグレードを完了する必要があるかもしれません。
4. Firebase サービスを設定してアプリを接続する
この Codelab では、Firebase プロジェクトで Cloud Storage for Firebase と Firebase AI Logic を設定する必要があります。また、アプリのソースコードを Firebase プロジェクトに接続する必要があります。
Cloud Storage for Firebase を設定する
この Codelab では、Cloud Storage for Firebase を使用して商品説明を保存します。
- Firebase コンソールで、[データベースとストレージ] > [ストレージ] に移動します。
- [開始] をクリックします。
- デフォルトの Storage バケットのロケーションを選択します。
US-WEST1、US-CENTRAL1、US-EAST1のバケットでは、Google Cloud Storage の「常時無料」階層を利用できます。他のすべてのロケーションのバケットは、Google Cloud Storage の料金と使用量に従います。 - [本番環境モード] をクリックします。すぐ下のステップで、これらのセキュリティ ルールをこの Codelab に固有のものに更新します。
- [作成] をクリックします。
- セキュリティ ルールを更新します。
- バケットがプロビジョニングされたら、[ルール] タブに移動します。
- 次のルールをコピーして貼り付けます。
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /products.txt { allow read; } } } - [公開] をクリックします。
- スターター コードから商品説明をアップロードします。
- Storage バケットの [ファイル] タブをクリックします。
- [ファイルをアップロード] をクリックし、スターター コードから
products.txtファイルをアップロードします。このファイルはsrc/data/products.txtにあります。
Firebase AI Logic を構成する
Firebase AI Logic は、この Codelab で使用するメインの Firebase サービスです。
- Firebase コンソールで、[AI サービス] > [AI Logic] に移動します。
- [開始] をクリックします。
- [Vertex AI Gemini API] カードで、[この API を使ってみる] をクリックし、画面上の手順に沿って操作します。このフローにより、Vertex AI Gemini API で Firebase AI Logic を使用するために必要な API が有効になります。
- (省略可)[AI モニタリングを有効にする] を選択すると、さまざまなアプリレベルの指標と使用状況を観察して、Firebase AI Logic を介したリクエストを包括的に把握できます。
コードを Firebase プロジェクトに接続する
Firebase AI Logic の設定の一環として、Firebase ウェブアプリを作成し、構成をソースコードに追加するよう求められます。
- Firebase AI Logic の設定フローでプロンプトが表示されたら、[ウェブ] (
) アイコンをクリックして新しいウェブアプリを登録します。 - アプリに名前を付けます(例:
Rugged Web)。 - 設定手順から
firebaseConfigオブジェクトをコピーします。
次に、スターター コードを更新します。
- コードエディタで
src/firebase.tsを開きます。 - 既存の
firebaseConfigを、Firebase コンソールからコピーしたオブジェクトに置き換えます。
ファイルは以下のようになります。
import { getAI, getTemplateGenerativeModel, VertexAIBackend } from "firebase/ai";
import { initializeApp } from "firebase/app";
// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_PROJECT_ID.firebasestorage.app",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID"
};
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
const ai = getAI(app, { backend: new VertexAIBackend() });
5. サーバーサイドのプロンプト テンプレートを作成する
クライアント アプリに複雑な AI プロンプトをハードコードするのではなく、Dotprompt 構文 を使用してサーバーで手順を安全に管理します。
これにより、エンドユーザーは秘密の「緩和対応予算」ルールを確認できなくなります。
- Firebase コンソールで、[Vertex AI] または [プロンプト管理] セクションに移動します。
- 新しいプロンプト テンプレートを作成し、
product-agentという名前を付けます。 - モデルを
gemini-2.5-flashに設定します。 - 入力スキーマを次のように定義します。
input: schema: query: type: string description: the customers ask of the robot productId?: type: string description: the product the customer is looking at right now history?: type: array description: list of previous history between the user and system items: type: object required: [role, contents] properties: role: type: string contents: type: string - ルート ディレクトリから
agent-product.promptの内容をコピーして、[プロンプトとオプションのシステム指示] フィールドに貼り付けます。これにより、モデルは「Rugged Operator」として動作し、商品カタログを挿入する方法を安全に指示できます。 - Firebase コンソールで、
product-agentテンプレートを保存して公開します。
6. AI モデルを呼び出す
テンプレートがサーバーで安全に定義されたので、アプリのフロントエンドから呼び出すだけです。
- コードエディタで、
src/firebase.tsに戻ります。 - 初期化の下で、
getTemplateGenerativeModelを使用してテンプレートに接続します。const model = getTemplateGenerativeModel(ai); export const callCustomerSupportModel = async (query: string, productId?: string, history?: { role: string, contents: string }[]) => { // Generate content using the published 'product-agent' template const result = await model.generateContent('product-agent', { query, productId, history, }); return result.response.text(); }
7. Firebase App Check でエージェントを保護する
AI モデルは強力ですが、公開エンドポイントが保護されていない場合、悪用される可能性があります。Firebase App Check を使用して、実際のウェブアプリのみが Vertex AI 生成モデルを呼び出すことができるようにし、ボットと不正なクライアントをブロックする必要があります。
- Firebase コンソールで、[ビルド > App Check] に移動します。
- [アプリ] タブをクリックし、ウェブアプリ(
Rugged Web)を展開して、[reCAPTCHA Enterprise] プロバイダをクリックします。 - [新しい reCAPTCHA Enterprise キーを作成] を選択し、プロンプトを入力します。
- 名前:
Codelab Key - ドメイン: ローカル Vite サーバーがリクエストを行えるように、
localhostと127.0.0.1を追加します。
- 名前:
- [保存] をクリックしてアプリを登録します。
- 登録すると、Firebase コンソールにサイトキー が表示されます。この文字列をコピーします。
- コードエディタで、
src/firebase.tsをもう一度開きます。 - 先頭に次のインポートを追加します。
import { initializeAppCheck, ReCaptchaEnterpriseProvider } from "firebase/app-check"; initializeApp(firebaseConfig)呼び出しの直後に App Check の初期化を追加し、コピーしたサイトキーを貼り付けます。// Initialize App Check const appCheck = initializeAppCheck(app, { provider: new ReCaptchaEnterpriseProvider('YOUR_RECAPTCHA_ENTERPRISE_SITE_KEY'), useLimitedUseAppCheckTokens: true });- これらのトークンを使用するように
getAI()関数呼び出しを更新します。次の変更を行います。const ai = getAI(app, { backend: new VertexAIBackend(), useLimitedUseAppCheckTokens: true });useLimitedUseAppCheckTokensの値を true に設定すると、有効期間の短いトークンが適用され、バックエンドが受け取る可能性のある不正使用を制限できます。
8. アプリを実行する
Firebase の構成が完了し、サポート チャット ウィジェットが接続されたので、アプリを実行します。
- ターミナルで、Vite 開発サーバーを実行します。
npm run dev - 指定されたローカル URL(通常は
http://localhost:5173/)を開きます。 - 右下の Tactical Support フローティング アクション ボタン(FAB)をクリックします。
- 次のように、商品について質問してみてください。
- 「耐候性シェルを探しています」
- 「サブゼロ ビーニーに欠陥があります。どうすればよいですか?」
- AI の「緩和対応予算」ロジックをトリガーするために、プッシュバックを続けます。
9. (省略可)Codelab のリソースをクリーンアップする
Google Cloud 請求先アカウントに課金されないようにするには、この Codelab で作成したリソースを削除します。
- Firebase コンソールに移動します。
rugged-terrain-aiプロジェクトを選択します。- [プロジェクト設定](歯車アイコン)に移動します。
- 下部までスクロールして [プロジェクトを削除] をクリックします。
- 画面上の手順に沿って削除を確認します。
10. 完了
🎊 ミッション完了!テンプレート駆動型の堅牢な AI カスタマー サポート エージェントを統合できました。
達成したこと:
- クライアント アプリで Firebase と Vertex AI バックエンドを初期化 した。
- Handlebars と厳格な入力スキーマを使用して安全なサーバーサイドのプロンプト テンプレートを構成 し、エージェントの複雑な動作を定義した。
- チャット履歴とコンテキスト プロダクト ID を安全に渡してLLM を動的に呼び出し 、内部プロンプト ロジックをクライアントに公開しないようにした。
次のステップ
- Firebase App Check: AI エンドポイントを不正使用から保護する。