Firebase SDK의 Vertex AI 프리뷰 버전에서 Firebase AI 로직 SDK로 이전


Firebase AI Logic 및 클라이언트 SDK의 이전 명칭은 'Vertex AI in Firebase'였습니다. 확장된 서비스와 기능을 더 잘 반영하기 위해(예: 이제 Gemini Developer API를 지원함) 서비스의 이름을 바꾸고 Firebase AI Logic로 리패키징했습니다.

모바일 또는 웹 앱에서 Google의 생성형 AI 모델에 안전하게 직접 액세스하려면 이제 'Gemini API' 제공업체(오래된 Vertex AI Gemini API 또는 이제 Gemini Developer API)를 선택할 수 있습니다. 즉, 이제 합리적인 요금 한도와 할당량이 있는 무료 등급을 제공하는 Gemini Developer API를 사용할 수 있습니다.

Firebase AI Logic SDK로 이전하는 단계 개요

  • 1단계: 앱 및 사용 사례에 가장 적합한 'Gemini API' 제공업체를 선택합니다.

  • 2단계: 필수 API를 사용 설정합니다.

  • 3단계: 앱에서 사용되는 라이브러리를 업데이트합니다.

  • 4단계: 앱에서 초기화를 업데이트합니다.

  • 5단계: 사용하는 기능에 따라 코드를 업데이트합니다.

1단계: 앱에 가장 적합한 'Gemini API' 제공업체 선택

이 이전을 통해 'Gemini API' 제공업체를 선택할 수 있습니다.

  • 이전 'Vertex AI in Firebase' SDK는 Vertex AI Gemini API만 사용할 수 있었습니다.

  • Firebase AI Logic SDK를 사용하면 모바일 또는 웹 앱에서 직접 호출할 'Gemini API' 제공자(Gemini Developer API 또는 Vertex AI Gemini API)를 선택할 수 있습니다.

특히 지원되는 기능, 가격, 요금 한도 측면에서 Gemini API 제공업체를 사용하는 것의 차이를 검토하세요. 한 가지 예로 Gemini Developer APICloud Storage URL을 사용하여 파일을 제공하는 것을 지원하지 않지만 무료 등급과 합리적인 할당량을 활용하려는 경우 좋은 선택일 수 있습니다.

2단계: 필수 API 사용 설정

선택한 'Gemini API' 제공자를 사용하려면 Firebase 프로젝트에서 필요한 모든 API가 사용 설정되어 있는지 확인합니다.

프로젝트에서 두 API 제공업체를 동시에 사용 설정할 수 있습니다.

  1. Firebase 콘솔에 로그인한 후 Firebase 프로젝트를 선택합니다.

  2. Firebase 콘솔에서 Firebase AI Logic 페이지로 이동합니다.

  3. 시작하기를 클릭하여 프로젝트의 필요한 API 및 리소스를 설정하는 데 도움이 되는 안내 워크플로를 시작합니다.

  4. Firebase AI Logic SDK와 함께 사용할 'Gemini API' 제공업체를 선택합니다. 원하는 경우 나중에 언제든지 다른 API 제공업체를 설정하고 사용할 수 있습니다.

    • Gemini Developer API - 결제 선택사항(무료 Spark 요금제에서 사용 가능)
      콘솔의 워크플로를 통해 필요한 API가 사용 설정되고 프로젝트에 Gemini API 키가 생성됩니다.
      Gemini API 키를 앱의 코드베이스에 추가하지 마세요. 자세히 알아보기

    • Vertex AI Gemini API결제 필요(사용한 만큼만 지불하는 Blaze 요금제 필요)
      콘솔의 워크플로를 통해 프로젝트에서 필요한 API가 사용 설정됩니다.

  5. 이 이전 가이드를 계속하여 앱의 라이브러리와 초기화를 업데이트합니다.

3단계: 앱에서 사용되는 라이브러리 업데이트

Firebase AI Logic 라이브러리를 사용하도록 앱의 코드베이스를 업데이트합니다.

Swift

  1. 앱 프로젝트를 연 상태로 Xcode에서 다음 옵션 중 하나를 사용하여 Firebase 패키지를 v11.13.0 이상으로 업데이트합니다.

    • 옵션 1: 모든 패키지 업데이트: 파일 > 패키지 > 최신 패키지 버전으로 업데이트로 이동합니다.

    • 옵션 2: Firebase 개별 업데이트: 패키지 종속 항목 섹션에서 Firebase 패키지로 이동합니다. Firebase 패키지를 마우스 오른쪽 버튼으로 클릭한 다음 패키지 업데이트를 선택합니다.

  2. 이제 Firebase 패키지에 v11.13.0 이상이 표시되는지 확인합니다. 그렇지 않으면 지정된 패키지 요구사항이 v11.13.0 이상으로 업데이트할 수 있도록 허용하는지 확인합니다.

  3. Project Editor에서 앱의 타겟을 선택한 다음 프레임워크, 라이브러리, 삽입된 콘텐츠 섹션으로 이동합니다.

  4. 새 라이브러리 추가: + 버튼을 선택한 다음 Firebase 패키지에서 FirebaseAI를 추가합니다.

  5. 앱 이전을 완료한 후 (이 가이드의 나머지 섹션 참고) 이전 라이브러리를 삭제해야 합니다.
    FirebaseVertexAI-Preview를 선택한 다음 버튼을 누릅니다.

Kotlin

  1. 모듈 (앱 수준) Gradle 파일 (일반적으로 <project>/<app-module>/build.gradle.kts 또는 <project>/<app-module>/build.gradle)에서 이전 종속 항목(해당하는 경우)을 다음으로 바꿉니다.

    이전 종속 항목을 삭제하기 전에 앱의 코드베이스를 이전하는 것이 더 쉬울 수 있습니다 (이 가이드의 나머지 섹션 참고).

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:33.15.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. Android 프로젝트를 Gradle 파일과 동기화합니다.

Firebase Android BoM를 사용하지 않으려면 firebase-ai 라이브러리의 종속 항목을 추가하고 Android 스튜디오에서 제안하는 최신 버전을 수락하면 됩니다.

Java

  1. 모듈 (앱 수준) Gradle 파일 (일반적으로 <project>/<app-module>/build.gradle.kts 또는 <project>/<app-module>/build.gradle)에서 이전 종속 항목(해당하는 경우)을 다음으로 바꿉니다.

    이전 종속 항목을 삭제하기 전에 앱의 코드베이스를 이전하는 것이 더 쉬울 수 있습니다 (이 가이드의 나머지 섹션 참고).

    // BEFORE
    dependencies {
      implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")
    }
    
    
    // AFTER
    dependencies {
      // Import the BoM for the Firebase platform
      implementation(platform("com.google.firebase:firebase-bom:33.15.0"))
    
      // Add the dependency for the Firebase AI Logic library
      // When using the BoM, you don't specify versions in Firebase library dependencies
      implementation("com.google.firebase:firebase-ai")
    }
  2. Android 프로젝트를 Gradle 파일과 동기화합니다.

Firebase Android BoM를 사용하지 않으려면 firebase-ai 라이브러리의 종속 항목을 추가하고 Android 스튜디오에서 제안하는 최신 버전을 수락하면 됩니다.

Web

  1. npm을 사용하여 웹용 Firebase JS SDK의 최신 버전을 가져옵니다.

    npm i firebase@latest

    또는

    yarn add firebase@latest
  2. 라이브러리를 가져온 위치에서 가져오기 문을 업데이트하여 대신 firebase/ai를 사용합니다.

    이전 가져오기를 삭제하기 전에 앱의 코드베이스를 이전하는 것이 더 쉬울 수 있습니다 (이 가이드의 나머지 섹션 참고).

    // BEFORE
    import { initializeApp } from "firebase/app";
    import { getVertexAI, getGenerativeModel } from "firebase/vertexai-preview";
    
    
    // AFTER
    import { initializeApp } from "firebase/app";
    import { getAI, getGenerativeModel } from "firebase/ai";

Dart

  1. Flutter 프로젝트 디렉터리에서 다음 명령어를 실행하여 pubspec.yaml 파일에서 firebase_ai 패키지를 사용하도록 업데이트합니다.

    flutter pub add firebase_ai
  2. Flutter 프로젝트를 다시 빌드합니다.

    flutter run
  3. 앱 이전을 완료한 후 (이 가이드의 나머지 섹션 참고) 이전 패키지를 삭제해야 합니다.

    flutter pub remove firebase_vertexai

Unity

'Vertex AI in Firebase'에서 Unity 지원을 받을 수 없습니다.

Unity용 Firebase AI Logic SDK를 시작하는 방법을 알아보세요.

4단계: 앱에서 초기화 업데이트

Gemini API 제공업체를 클릭하여 이 페이지에서 제공업체별 콘텐츠와 코드를 확인합니다.

선택한 API 제공업체의 서비스를 초기화하는 방법을 업데이트하고 GenerativeModel 인스턴스를 만듭니다.

Swift


import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.0-flash")

Kotlin


// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-2.0-flash")

Java


// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-2.0-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

Web


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.0-flash" });

Dart


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-2.0-flash');

Unity

'Vertex AI in Firebase'에서 Unity 지원을 받을 수 없습니다.

Unity용 Firebase AI Logic SDK를 시작하는 방법을 알아보세요.

사용 중인 기능에 따라 GenerativeModel 인스턴스가 항상 생성되지 않을 수 있습니다.

5단계: 사용하는 기능에 따라 코드 업데이트

이 단계에서는 사용하는 기능에 따라 필요할 수 있는 변경사항을 설명합니다.

  • Cloud Storage URL을 사용하고 이번 이전에서 Gemini Developer API를 사용하도록 전환한 경우 파일을 인라인 데이터로 포함하도록(또는 동영상에 YouTube URL을 사용하도록) 멀티모달 요청을 업데이트해야 합니다.

  • 'Vertex AI in Firebase' SDK의 GA 버전에 몇 가지 변경사항이 도입되었습니다. Firebase AI Logic SDK를 사용하려면 동일한 변경사항이 필요합니다. Firebase AI Logic SDK를 사용하기 위해 코드에서 변경해야 할 사항이 있는지 다음 목록을 검토하세요.

모든 언어 및 플랫폼에 필요

  • 함수 호출
    GA 이전에 이 기능을 구현한 경우 스키마를 정의하는 방식을 업데이트해야 합니다. 함수 선언을 작성하는 방법을 알아보려면 업데이트된 함수 호출 가이드를 검토하는 것이 좋습니다.

  • responseSchema를 사용하여 구조화된 출력 (예: JSON) 생성
    GA 이전에 이 기능을 구현한 경우 스키마를 정의하는 방법을 업데이트해야 합니다. JSON 스키마를 작성하는 방법을 알아보려면 새 구조화된 출력 가이드를 검토하는 것이 좋습니다.

  • 제한 시간

    • 요청의 기본 제한 시간을 180초로 변경했습니다.

플랫폼 또는 언어에 따라 필요

Swift

  • 열거형

    • 대부분의 enum 유형을 정적 변수가 있는 struct로 바꿨습니다. 이 변경사항을 통해 이전 버전과 호환되는 방식으로 API를 더 유연하게 발전시킬 수 있습니다. 이제 switch 문을 사용할 때는 향후 SDK에 추가되는 새 값을 비롯하여 알 수 없거나 처리되지 않은 값을 처리하기 위해 default: 사례를 포함해야 합니다.

    • BlockThreshold 열거형의 이름을 HarmBlockThreshold로 변경했습니다. 이 유형은 이제 struct입니다.

    • 다음 열거형 (이제 struct)에서 HarmCategory, HarmBlockThreshold, HarmProbability, BlockReason, FinishReasonunknownunspecified 사례를 삭제했습니다.

    • 새 유형을 하위 호환 방식으로 추가할 수 있도록 열거형 ModelContent.PartPart라는 프로토콜로 대체했습니다. 이 변경사항은 콘텐츠 부분 섹션에 자세히 설명되어 있습니다.

  • 콘텐츠 부분

    • ThrowingPartsRepresentable 프로토콜을 삭제하고 ModelContent의 이니셜라이저를 단순화하여 가끔 발생하는 컴파일러 오류를 방지했습니다. 올바르게 인코딩되지 않은 이미지는 generateContent에서 사용될 때도 여전히 오류가 발생합니다.

    • ModelContent.Part 케이스를 Part 프로토콜을 준수하는 다음 struct 유형으로 대체했습니다.

      • .text~TextPart
      • .data~InlineDataPart
      • .fileData~FileDataPart
      • .functionCall~FunctionCallPart
      • .functionResponse~FunctionResponsePart
  • 유해 카테고리

    • HarmCategory가 더 이상 SafetySetting 유형에 중첩되지 않도록 변경했습니다. SafetySetting.HarmCategory라고 하는 경우 HarmCategory로 바꿀 수 있습니다.
  • 안전 관련 의견

    • 응답에 사용되지 않았으므로 SafetyFeedback 유형을 삭제했습니다.
  • 인용 메타데이터

    • CitationMetadata에서 citationSources 속성의 이름을 citations로 변경했습니다.
  • 총 청구 가능 문자 수

    • 문자가 전송되지 않는 상황을 반영하도록 CountTokensResponsetotalBillableCharacters 속성을 선택사항으로 변경했습니다.
  • 후보 응답

    • 다른 플랫폼과 일치하도록 CandidateResponse의 이름이 Candidate으로 변경되었습니다.
  • 세대 구성

    • GenerationConfig의 공개 속성을 internal로 변경했습니다. 모두 초기화 프로그램에서 구성할 수 있습니다.

Kotlin

  • 열거형

    • enum 클래스와 sealed 클래스를 일반 클래스로 대체했습니다. 이 변경사항을 통해 역호환 방식으로 API를 더 유연하게 발전시킬 수 있습니다.

    • BlockThreshold 열거형의 이름을 HarmBlockThreshold로 변경했습니다.

    • HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason, FinishReason 열거형에서 값을 삭제했습니다.

  • Blob 메서드

    • 이름에 Blob가 포함된 모든 메서드의 이름을 바꿔 InlineData를 대신 사용합니다.
  • 안전 설정

    • method 필드를 null 허용으로 변경했습니다.
  • 기간 클래스

    • Kotlin의 Duration 클래스 사용을 모두 삭제하고 long로 대체했습니다. 이 변경사항으로 인해 Java와의 상호 운용성이 향상됩니다.
  • 인용 메타데이터

    • 이전에 CitationMetadata에 선언된 모든 필드를 Citation라는 새 클래스로 래핑했습니다. 인용은 CitationMetadatacitations라는 목록에서 확인할 수 있습니다. 이 변경사항을 통해 플랫폼 전반에서 유형을 더 잘 조정할 수 있습니다.
  • 토큰 수 집계

    • totalBillableCharacters 필드를 null 허용으로 변경했습니다.
  • 총 청구 가능 문자 수

    • 문자가 전송되지 않는 상황을 반영하도록 CountTokensResponsetotalBillableCharacters 속성을 선택사항으로 변경했습니다.
  • 모델 인스턴스화

    • 다른 플랫폼과 일치하도록 requestOptions 매개변수를 매개변수 목록의 끝으로 이동했습니다.
  • Live API

    • enum 클래스 ResponseModalityUNSPECIFIED 값을 삭제했습니다. 대신 null를 사용하세요.

    • LiveGenerationConfig.setResponseModalities의 이름이 LiveGenerationConfig.setResponseModality로 변경되었습니다.

    • LiveContentResponse.Status 클래스를 삭제하고 대신 상태 필드를 LiveContentResponse의 속성으로 중첩했습니다.

    • LiveContentResponse 클래스를 삭제하고 대신 모델의 응답과 일치하는 LiveServerMessage의 서브클래스를 제공했습니다.

    • ListenableFuture<LiveSession> 대신 ListenableFuture<LiveSessionFutures>을 반환하도록 LiveModelFutures.connect를 변경했습니다.

Java

  • 열거형

    • enum 클래스와 sealed 클래스를 일반 클래스로 대체했습니다. 이 변경사항을 통해 역호환 방식으로 API를 더 유연하게 발전시킬 수 있습니다.

    • BlockThreshold 열거형의 이름을 HarmBlockThreshold로 변경했습니다.

    • HarmBlockThreshold, HarmProbability, HarmSeverity, BlockReason, FinishReason 열거형에서 값을 삭제했습니다.

  • Blob 메서드

    • 이름에 Blob가 포함된 모든 메서드의 이름을 바꿔 InlineData를 대신 사용합니다.
  • 안전 설정

    • method 필드를 null 허용으로 변경했습니다.
  • 기간 클래스

    • Kotlin의 Duration 클래스 사용을 모두 삭제하고 long로 대체했습니다. 이 변경사항으로 인해 Java와의 상호 운용성이 향상됩니다.
  • 인용 메타데이터

    • 이전에 CitationMetadata에 선언된 모든 필드를 Citation라는 새 클래스로 래핑했습니다. 인용은 CitationMetadatacitations라는 목록에서 확인할 수 있습니다. 이 변경사항을 통해 플랫폼 전반에서 유형을 더 잘 조정할 수 있습니다.
  • 토큰 수 집계

    • totalBillableCharacters 필드를 null 허용으로 변경했습니다.
  • 총 청구 가능 문자 수

    • 문자가 전송되지 않는 상황을 반영하도록 CountTokensResponsetotalBillableCharacters 속성을 선택사항으로 변경했습니다.
  • 모델 인스턴스화

    • 다른 플랫폼과 일치하도록 requestOptions 매개변수를 매개변수 목록의 끝으로 이동했습니다.
  • Live API

    • enum 클래스 ResponseModalityUNSPECIFIED 값을 삭제했습니다. 대신 null를 사용하세요.

    • LiveGenerationConfig.setResponseModalities의 이름이 LiveGenerationConfig.setResponseModality로 변경되었습니다.

    • LiveContentResponse.Status 클래스를 삭제하고 대신 상태 필드를 LiveContentResponse의 속성으로 중첩했습니다.

    • LiveContentResponse 클래스를 삭제하고 대신 모델의 응답과 일치하는 LiveServerMessage의 서브클래스를 제공했습니다.

    • ListenableFuture<LiveSession> 대신 ListenableFuture<LiveSessionFutures>을 반환하도록 LiveModelFutures.connect를 변경했습니다.

  • 이제 void 대신 클래스의 인스턴스를 올바르게 반환하도록 다양한 Java 빌더 메서드를 변경했습니다.

Web

  • 열거형

    • HarmCategory, BlockThreshold, HarmProbability, HarmSeverity, BlockReason, FinishReason 열거형에서 값을 삭제했습니다.
  • 차단 이유

    • PromptFeedbackblockReason를 선택사항으로 변경했습니다.

Vertex AI Gemini API 대신 Gemini Developer API를 사용하기 시작하는 경우에만 변경이 필요합니다.

  • 안전 설정

    • 지원되지 않는 SafetySetting.method의 사용을 삭제했습니다.
  • 인라인 데이터

    • 지원되지 않는 InlineDataPart.videoMetadata의 사용을 삭제했습니다.

Dart

  • 열거형

    • HarmCategory, HarmProbability, BlockReason, FinishReason 열거형에서 값이 삭제되었습니다.
  • 데이터 부분

    • 다른 플랫폼과 일치하도록 DataPart의 이름을 InlineDataPart로, static data 함수의 이름을 inlineData로 바꿨습니다.
  • 요청 옵션

    • timeout가 작동하지 않으므로 RequestOptions를 삭제했습니다. 조만간 다시 추가될 예정이지만 다른 플랫폼과 일치하도록 GenerativeModel 유형으로 이동됩니다.
  • 중지 시퀀스

    • GenerationConfigstopSequences 매개변수를 선택사항으로 변경하고 기본값을 빈 배열 대신 null로 변경했습니다.
  • 인용

    • CitationMetadata에서 citationSources 속성의 이름을 citations로 변경했습니다. 다른 플랫폼과 일치하도록 CitationSource 유형의 이름을 Citation로 변경했습니다.
  • 불필요한 공개 유형, 메서드, 속성

    • 의도치 않게 노출된 다음 유형, 메서드, 속성(defaultTimeout, CountTokensResponseFields, parseCountTokensResponse, parseEmbedContentResponse, parseGenerateContentResponse, parseContent, BatchEmbedContentsResponse, ContentEmbedding, EmbedContentRequest, EmbedContentResponse)을 삭제했습니다.
  • 토큰 수 집계

    • 더 이상 필요하지 않은 추가 필드를 countTokens 함수에서 삭제했습니다. contents만 필요합니다.
  • 모델 인스턴스화

    • 다른 플랫폼과 일치하도록 systemInstruction 매개변수를 매개변수 목록의 끝으로 이동했습니다.
  • 기능 삽입

    • 모델에서 지원되지 않는 임베딩 기능 (embedContentbatchEmbedContents)을 삭제했습니다.

Unity

'Vertex AI in Firebase'에서 Unity 지원을 받을 수 없습니다.

Unity용 Firebase AI Logic SDK를 시작하는 방법을 알아보세요.

이전과 관련하여 발생할 수 있는 오류

Firebase AI Logic의 GA 버전을 사용하도록 이전할 때 이 이전 가이드에 설명된 대로 필요한 변경사항을 모두 완료하지 않으면 오류가 발생할 수 있습니다.

403 오류: Requests to this API firebasevertexai.googleapis.com ... are blocked.

Requests to this API firebasevertexai.googleapis.com ... are blocked. 오류가 표시되는 403 오류가 발생하면 일반적으로 Firebase 구성 파일 또는 객체의 Firebase API 키에 사용하려는 제품의 허용 목록에 필수 API가 없음을 의미합니다.

앱에서 사용하는 Firebase API 키에 키의 'API 제한사항' 허용 목록에 포함된 필수 API가 모두 있는지 확인합니다. Firebase AI Logic의 경우 Firebase API 키의 허용 목록에 Firebase AI Logic API가 최소한 하나 있어야 합니다. 이 API는 Firebase 콘솔에서 필요한 API를 사용 설정할 때 API 키의 허용 목록에 자동으로 추가되었습니다.

Google Cloud 콘솔의 API 및 서비스 > 사용자 인증 정보 패널에서 모든 API 키를 볼 수 있습니다.


Firebase AI Logic 사용 경험에 관한 의견 보내기