1. 소개
이 Codelab에서는 Rugged Terrain Guide 라는 아웃도어 장비 전자상거래 쇼핑몰에 스마트 고객 지원 채팅 위젯을 추가합니다. Firebase AI Logic을 사용하여 이 에이전트를 빌드하고 AI의 페르소나, 엄격한 보상 예산 규칙을 처리하고 제품 카탈로그를 컨텍스트로 동적으로 사용하는 서버 측 프롬프트 템플릿 (product-agent)을 구성하는 방법을 알아봅니다.
수행할 작업:
- 이 Codelab의 웹 앱용 시작 코드를 가져옵니다.
- Firebase 프로젝트를 설정합니다.
- 웹 앱에서 Firebase 서비스 (예: Firebase AI Logic)를 설정하고 초기화합니다.
- Firebase Console에서 서버 측 프롬프트 템플릿을 구성합니다.
- 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 Console에 로그인합니다.
- 버튼을 클릭하여 새 프로젝트를 만든 다음 프로젝트 이름 (예:
rugged-terrain-ai)을 입력합니다.
- 계속 을 클릭합니다.
- 메시지가 표시되면 Firebase 약관을 검토하고 이에 동의한 다음 계속을 클릭합니다.
- (선택사항) Firebase Console에서 AI 지원('Firebase의 Gemini'라고 함)을 사용 설정합니다.
- 이 Codelab에서는 Google 애널리틱스가 필요하지 않으므로 Google 애널리틱스 옵션을 사용 중지 합니다.
- 프로젝트 만들기 를 클릭하고 프로젝트가 프로비저닝될 때까지 기다린 후 계속 을 클릭합니다.
Firebase 요금제 업그레이드
이 Codelab에서 Firebase 서비스를 사용하려면 Firebase 프로젝트가 사용한 만큼만 지불하는 (Blaze) 요금제를 사용하고 있어야 합니다. 즉, 프로젝트가 Cloud Billing 계정에 연결되어 있어야 합니다.
- Cloud Billing 계정에는 신용카드와 같은 결제 수단이 필요합니다.
- Firebase와 Google Cloud를 처음 사용하는 경우 $300 크레딧과 무료 체험판 Cloud Billing 계정을 받을 자격이 되는지 확인하세요.
- 이벤트의 일환으로 이 Codelab을 진행하는 경우 주최자에게 사용 가능한 클라우드 크레딧이 있는지 문의하세요.
프로젝트를 Blaze 요금제로 업그레이드하려면 다음 단계를 따르세요.
- Firebase Console에서 요금제를 업그레이드할 를 선택합니다.
- Blaze 요금제를 선택합니다. 화면에 표시된 안내에 따라 Cloud Billing 계정을 프로젝트에 연결합니다.
이 업그레이드의 일환으로 Cloud Billing 계정을 만들어야 하는 경우 업그레이드를 완료하기 위해 Firebase Console의 업그레이드 흐름으로 돌아가야 할 수 있습니다.
4. Firebase 서비스 설정 및 앱 연결
이 Codelab에서는 Firebase 프로젝트에서 Firebase용 Cloud Storage와 Firebase AI Logic을 설정해야 합니다. 또한 앱의 소스 코드를 Firebase 프로젝트에 연결해야 합니다.
Firebase용 Cloud Storage 설정
이 Codelab에서는 Firebase용 Cloud Storage를 사용하여 제품 설명을 저장합니다.
- Firebase Console에서 데이터베이스 및 스토리지 > 스토리지로 이동합니다.
- 시작하기 를 클릭합니다.
- 기본 스토리지 버킷의 위치를 선택합니다.
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 Console에서 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 Console에서 복사한 것으로 바꿉니다.
파일은 다음과 같이 표시됩니다.
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 Console에서 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 Console에서
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 앱 체크로 에이전트 보호
AI 모델은 강력하지만 공개 엔드포인트가 보호되지 않은 상태로 남아 있으면 악용될 수도 있습니다. Firebase 앱 체크를 항상 사용하여 실제 웹 앱만 Vertex AI 생성형 모델을 호출하고 봇과 승인되지 않은 클라이언트를 차단할 수 있도록 해야 합니다.
- Firebase Console에서 빌드 > 앱 체크 로 이동합니다.
- 앱 탭을 클릭하고 웹 앱 (
Rugged Web)을 펼친 다음 reCAPTCHA Enterprise 제공자를 클릭합니다. - 새 reCAPTCHA Enterprise 키 만들기 를 선택하고 프롬프트를 작성합니다.
- 이름:
Codelab Key - 도메인: 로컬 Vite 서버에서 요청을 할 수 있도록
localhost및127.0.0.1을 추가합니다.
- 이름:
- 저장 을 클릭하여 앱을 등록합니다.
- 등록되면 Firebase Console에 사이트 키 가 표시됩니다. 이 문자열을 복사합니다.
- 코드 편집기에서
src/firebase.ts를 다시 엽니다. - 상단에 다음 가져오기를 추가합니다.
import { initializeAppCheck, ReCaptchaEnterpriseProvider } from "firebase/app-check"; initializeApp(firebaseConfig)호출 바로 뒤에 앱 체크 초기화를 추가하고 복사한 사이트 키를 붙여넣습니다.// 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/)을 엽니다. - 오른쪽 하단에 있는 전술 지원 플로팅 작업 버튼 (FAB)을 클릭합니다.
- 제품에 관한 질문을 해 보세요(예:)
- '방수 쉘을 찾고 있습니다.'
- '영하의 비니에 결함이 있습니다. 어떻게 해야 하나요?'
- AI의 '보상 예산' 로직을 트리거하기 위해 계속 밀어붙이세요.
9. (선택사항) Codelab에서 리소스 정리
Google Cloud Billing 계정에 요금이 청구되지 않도록 하려면 이 Codelab 중에 만든 리소스를 삭제하면 됩니다.
- Firebase Console로 이동합니다.
rugged-terrain-ai프로젝트를 선택합니다.- 프로젝트 설정 (톱니바퀴 아이콘)으로 이동합니다.
- 하단으로 스크롤하여 프로젝트 삭제 를 클릭합니다.
- 화면에 표시된 안내에 따라 삭제를 확인합니다.
10. 수고하셨습니다
🎊 미션 완료! 템플릿 기반의 강력한 AI 고객 지원 에이전트를 통합했습니다.
완료한 작업:
- 클라이언트 앱에서 Firebase 및 Vertex AI 백엔드를 초기화했습니다.
- Handlebars 및 엄격한 입력 스키마를 사용하여 보안 서버 측 프롬프트 템플릿을 구성 하여 에이전트의 복잡한 동작을 정의했습니다.
- 내부 프롬프트 로직을 클라이언트에 노출하지 않고 채팅 기록과 컨텍스트 제품 ID를 안전하게 전달하여 LLM을 동적으로 호출 했습니다.
다음 단계
- Firebase 앱 체크: 악용으로부터 AI 엔드포인트를 보호합니다.