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 請求先アカウントには、クレジット カードなどの支払い方法が必要です。
- 特別なプロモーション期間中や、イベントの一環としてこの Codelab を実施している場合は、Google Cloud クレジットを利用できることがあります。
- Firebase と Google Cloud を初めて使用する場合は、$300 のクレジットと無料トライアル用 Cloud 請求先アカウントを利用できるかどうかご確認ください。
プロジェクトを Blaze プランにアップグレードする手順は次のとおりです。
- Firebase コンソールで、プランをアップグレードします。
- Blaze プランを選択します。画面上の手順に沿って、Cloud 請求先アカウントをプロジェクトにリンクします。
- この Codelab で Google Cloud クレジットを使用している場合、請求先アカウントの名前は
Google Cloud Platform Trial Billing AccountまたはMy Billing Accountになっている可能性があります。 - このアップグレードの一環として Cloud 請求先アカウントを作成する必要があった場合は、Firebase コンソールのアップグレード フローに戻ってアップグレードを完了する必要がある場合があります。
- この Codelab で Google Cloud クレジットを使用している場合、請求先アカウントの名前は
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; } } } - [公開] をクリックします。
- スターター コードから商品説明をアップロードします。
- ストレージ バケットの [ファイル] タブをクリックします。
- [ファイルをアップロード] をクリックし、スターター コードから
products.txtファイルをアップロードします。このファイルはsrc/data/products.txtにあります。
Firebase AI Logic を構成する
Firebase AI Logic は、この Codelab で使用するメインの Firebase サービスです。
- Firebase コンソールで、[AI サービス] > [AI ロジック] に移動します。
- [開始] をクリックします。
- [Agent Platform Gemini API] カードで、[この API を使ってみる] をクリックし、画面の指示に沿って操作します。このフローにより、Agent Platform 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 コンソールからコピーしたfirebaseConfigに置き換えます。
ファイルは以下のようになります。
import { getAI, getTemplateGenerativeModel, AgentPlatformBackend } 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 AgentPlatformBackend() });
5. サーバーサイドのプロンプト テンプレートを作成する
複雑な AI プロンプトをクライアント アプリにハードコードするのではなく、Dotprompt 構文を使用して、サーバーで指示を安全に管理します。
これにより、エンドユーザーに「Appeasement Budget」ルールの詳細が表示されなくなります。
- Firebase コンソールで、[AI サービス] > [AI ロジック] > [プロンプト テンプレート] タブに移動します。
- [テンプレートを作成] をクリックし、[空白のテンプレート] を選択します。
- テンプレート名を
Product Agentに、ID をproduct-agentに設定します。 - モデルを
gemini-3.1-flash-lite(または利用可能な最新バージョン)に設定します。 - この Codelab 用に提供されているスターター コードから、
product-agent.promptの内容をコピーします(このファイルはルート ディレクトリにあります)。次に、このコンテンツを Firebase コンソールのサーバー プロンプト テンプレートの [プロンプトと(省略可)システム指示] フィールドに貼り付けます。このコンテンツは、モデルに「Rugged Operator」として動作し、商品カタログを参照する方法を安全に指示します。 - [テスト入力] フィールドで、入力スキーマを次のように定義します。
{ "type": "object", "required": [ "query" ], "properties": { "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" } } } } } } - [テンプレートを保存] をクリックして、
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 を常に使用して、実際のウェブアプリのみが Gemini API にリクエストを送信できるようにし、ボットや不正なクライアントをブロックする必要があります。
- Google Cloud コンソールで、[セキュリティ] > [Fraud Defense] に移動します。
- [キーを作成] をクリックして、フィールドに入力します。
- Display name:
Codelab Key - アプリケーションの種類: ウェブ
- ドメインリスト: ローカルの Vite サーバーがリクエストを行えるように、
localhostと127.0.0.1を追加します。
- Display name:
- [キーを作成] をクリックして、キーを登録します。
- Fraud Defense キーの詳細ページの上部から、サイトキー ID をクリップボードにコピーします。
- Firebase コンソールで、[セキュリティ] > [App Check] に移動します。
- [アプリ] タブをクリックし、ウェブアプリ(
Rugged Web)を開いて、[reCAPTCHA Enterprise] プロバイダをクリックします。 - [reCAPTCHA Enterprise サイトキー] フィールドに、Fraud Defense の [キーの詳細] ページからサイトキー ID を貼り付け、[保存] をクリックします。
- コードエディタで、再度
src/firebase.tsを開きます。 - 次のインポートを先頭に追加します。
import { initializeAppCheck, ReCaptchaEnterpriseProvider } from "firebase/app-check"; initializeApp(firebaseConfig)呼び出しの直後に App Check の初期化を追加し、コピーしたサイトキー ID を貼り付けます。// Initialize App Check const appCheck = initializeAppCheck(app, { provider: new ReCaptchaEnterpriseProvider('YOUR_RECAPTCHA_ENTERPRISE_SITE_KEY'), isTokenAutoRefreshEnabled: true });- これらのトークンを使用するように
getAI()関数呼び出しを更新します。以下のように変更します。const ai = getAI(app, { backend: new AgentPlatformBackend(), useLimitedUseAppCheckTokens: true });useLimitedUseAppCheckTokensの値を true に設定すると、短期間のトークンが適用され、バックエンドが受ける可能性のある不正使用を制限できます。
8. アプリを実行する
Firebase 構成が完了し、サポート チャット ウィジェットが接続されたら、アプリを実行します。
- ターミナルで Vite 開発サーバーを実行します。
npm run dev - 指定されたローカル URL(通常は
http://localhost:5173/)を開きます。 - 右下にある [Tactical Support](戦術的サポート)フローティング アクション ボタン(FAB)をクリックします。
- プロダクトについて質問してみます。たとえば、次のように質問します。
- 「耐候性のシェルを探しています」
- 「サブゼロ ビーニーに欠陥があります。どうすればよいですか?」
- AI の「Appeasement Budget」ロジックをトリガーするまで、プッシュバックを続けます。
9. (省略可)Codelab のリソースをクリーンアップする
Google Cloud 請求先アカウントに課金されないようにするには、この Codelab で作成したリソースを削除します。
- Firebase コンソールで、[設定] > [全般] タブに移動します。
- 表示しているプロジェクトが、この Codelab で使用したプロジェクトであることを確認します。Codelab のプロジェクトでない場合は、左上のプロジェクト選択ツール プルダウンを使用してプロジェクトを変更できます。
- ページの一番下までスクロールし、[プロジェクトを削除] をクリックします。
- 画面上の手順に沿って削除を確定します。
10. 完了
🎊 ミッション完了!堅牢なテンプレート駆動型 AI カスタマー サポート エージェントを統合しました。
達成した内容:
- クライアント アプリで Firebase と Agent Platform バックエンドを初期化します。
- Handlebars と厳密な入力スキーマを使用して、エージェントの複雑な動作を定義する安全なサーバーサイドのプロンプト テンプレートを構成しました。
- LLM を動的に呼び出し、内部プロンプト ロジックをクライアントに公開することなく、チャット履歴とコンテキストの商品 ID を安全に渡します。
次のステップ
- Firebase App Check: 不正使用から AI エンドポイントを保護します。