앱에서 Gemini API 및 Gemini 모델군에 직접 액세스하려면 Android용 Firebase SDK에서 Vertex AI를 사용하는 것이 좋습니다. 이 SDK는 풀 스택 앱을 빌드하고 실행하는 데 도움이 되는 더 큰 Firebase 플랫폼의 일부입니다.
Google AI 클라이언트 SDK에서 이전
Firebase SDK의 Vertex AI는 Google AI 클라이언트 SDK와 유사하지만 Firebase SDK의 Vertex AI는 프로덕션 사용 사례를 위한 중요한 보안 옵션 및 기타 기능을 제공합니다. 예를 들어 Firebase에서 Vertex AI를 사용할 때 다음을 사용할 수도 있습니다.
- Firebase 앱 체크: 승인되지 않은 클라이언트의 악용으로부터 Gemini API를 보호합니다.
- Firebase 원격 구성: 새 버전의 앱을 출시하지 않고도 클라우드에서 앱의 값 (예: 모델 이름)을 동적으로 설정하고 변경할 수 있습니다.
- Firebase용 Cloud Storage: Gemini API 요청에 대용량 미디어 파일을 포함합니다.
Google AI 클라이언트 SDK를 이미 앱에 통합한 경우 Firebase에서 Vertex AI로 이전할 수 있습니다.
시작하기
앱에서 Gemini API와 직접 상호작용하기 전에 메시지 표시를 숙지하고 Firebase와 앱을 설정하여 SDK를 사용하도록 설정하는 등 몇 가지 작업을 먼저 해야 합니다.
프롬프트 실험
Vertex AI Studio에서 프롬프트를 실험할 수 있습니다. Vertex AI Studio는 프롬프트 설계 및 프로토타입 제작을 위한 IDE입니다. 파일을 업로드하여 텍스트와 이미지로 프롬프트를 테스트하고 나중에 다시 살펴볼 수 있도록 프롬프트를 저장할 수 있습니다.
사용 사례에 적합한 프롬프트를 만드는 것은 과학보다는 기술에 가깝기 때문에 실험이 중요합니다. 프롬프트에 관한 자세한 내용은 Firebase 문서를 참고하세요.
Firebase 프로젝트 설정 및 앱을 Firebase에 연결
앱에서 Gemini API를 호출할 준비가 되면 Firebase용 Vertex AI 시작 가이드의 안내에 따라 앱에서 Firebase와 SDK를 설정하세요. 시작 가이드를 통해 이 가이드의 다음 작업을 모두 수행할 수 있습니다.
- 사용한 만큼만 지불하는 Blaze 요금제 사용 및 필요한 API 사용 설정을 포함하여 새 Firebase 프로젝트 또는 기존 Firebase 프로젝트를 설정합니다.
- 앱을 등록하고 Firebase 구성 파일 (
google-services.json
)을 앱에 추가하는 등 앱을 Firebase에 연결합니다.
Gradle 종속 항목 추가
앱 모듈에 다음 Gradle 종속 항목을 추가합니다.
Kotlin
dependencies {
...
// Import the BoM for the Firebase platform
implementation(platform("com.google.firebase:firebase-bom:33.9.0"))
// Add the dependency for the Vertex AI in Firebase library
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-vertexai")
}
자바
dependencies {
[...]
implementation("com.google.firebase:firebase-vertexai:16.1.0")
// Required to use `ListenableFuture` from Guava Android for one-shot generation
implementation("com.google.guava:guava:31.0.1-android")
// Required to use `Publisher` from Reactive Streams for streaming operations
implementation("org.reactivestreams:reactive-streams:1.0.4")
}
Vertex AI 서비스 및 생성형 모델 초기화
먼저 GenerativeModel
를 인스턴스화하고 모델 이름을 지정합니다.
Kotlin
val generativeModel = Firebase.vertexAI.generativeModel("gemini-2.0-flash")
자바
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel("gemini-2.0-flash");
Firebase 문서에서 Firebase용 Vertex AI와 함께 사용할 수 있는 모델에 관해 자세히 알아보세요. 모델 매개변수 구성에 대해서도 알아볼 수 있습니다.
앱에서 Gemini API와 상호작용
이제 SDK를 사용하도록 Firebase와 앱을 설정했으므로 앱에서 Gemini API와 상호작용할 수 있습니다.
텍스트 생성
텍스트 응답을 생성하려면 프롬프트와 함께 generateContent()
를 호출합니다.
Kotlin
// Note: `generateContent()` is a `suspend` function, which integrates well
// with existing Kotlin code.
scope.launch {
val response = model.generateContent("Write a story about the green robot")
}
자바
// In Java, create a `GenerativeModelFutures` from the `GenerativeModel`.
// Note that `generateContent()` returns a `ListenableFuture`. Learn more:
// https://developer.android.com/develop/background-work/background-tasks/asynchronous/listenablefuture
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Content prompt = new Content.Builder()
.addText("Write a story about a green robot.")
.build();
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
이미지 및 기타 미디어에서 텍스트 생성
텍스트와 이미지 또는 기타 미디어가 포함된 프롬프트에서 텍스트를 생성할 수도 있습니다. generateContent()
를 호출할 때 미디어를 인라인 데이터로 전달할 수 있습니다(아래 예 참고). 또는 Firebase URL용 Cloud Storage를 사용하여 요청에 대용량 미디어 파일을 포함할 수 있습니다.
Kotlin
scope.launch {
val response = model.generateContent(
content {
image(bitmap)
text("what is the object in the picture?")
}
)
}
자바
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);
Content prompt = new Content.Builder()
.addImage(bitmap)
.addText("What developer tool is this mascot from?")
.build();
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
멀티턴 채팅
멀티턴 대화를 지원할 수도 있습니다. startChat()
함수로 채팅을 초기화합니다. 원하는 경우 메시지 기록을 제공할 수 있습니다. 그런 다음 sendMessage()
함수를 호출하여 채팅 메시지를 보냅니다.
Kotlin
val chat = generativeModel.startChat(
history = listOf(
content(role = "user") { text("Hello, I have 2 dogs in my house.") },
content(role = "model") { text("Great to meet you. What would you like to know?") }
)
)
scope.launch {
val response = chat.sendMessage("How many paws are in my house?")
}
자바
// (Optional) create message history
Content.Builder userContentBuilder = new Content.Builder();
userContentBuilder.setRole("user");
userContentBuilder.addText("Hello, I have 2 dogs in my house.");
Content userContent = userContentBuilder.build();
Content.Builder modelContentBuilder = new Content.Builder();
modelContentBuilder.setRole("model");
modelContentBuilder.addText("Great to meet you. What would you like to know?");
Content modelContent = userContentBuilder.build();
List<Content> history = Arrays.asList(userContent, modelContent);
// Initialize the chat
ChatFutures chat = model.startChat(history);
// Create a new user message
Content.Builder messageBuilder = new Content.Builder();
messageBuilder.setRole("user");
messageBuilder.addText("How many paws are in my house?");
Content message = messageBuilder.build();
Publisher<GenerateContentResponse> streamingResponse =
chat.sendMessageStream(message);
StringBuilder outputContent = new StringBuilder();
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
@Override
public void onNext(GenerateContentResponse generateContentResponse) {
String chunk = generateContentResponse.getText();
outputContent.append(chunk);
}
@Override
public void onComplete() {
// ...
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
});
대답 스트리밍
모델 생성의 전체 결과를 기다리지 않고 대신 스트리밍을 사용하여 부분 결과를 처리하면 더 빠른 상호작용을 얻을 수 있습니다. generateContentStream()
를 사용하여 응답을 스트리밍합니다.
Kotlin
scope.launch {
var outputContent = ""
generativeModel.generateContentStream(inputContent)
.collect { response ->
outputContent += response.text
}
}
Java
// Note that in Java the method `generateContentStream()` returns a
// Publisher from the Reactive Streams library.
// https://www.reactive-streams.org/
GenerativeModelFutures model = GenerativeModelFutures.from(gm);
// Provide a prompt that contains text
Content prompt = new Content.Builder()
.addText("Write a story about a green robot.")
.build();
Publisher<GenerateContentResponse> streamingResponse =
model.generateContentStream(prompt);
StringBuilder outputContent = new StringBuilder();
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
@Override
public void onNext(GenerateContentResponse generateContentResponse) {
String chunk = generateContentResponse.getText();
outputContent.append(chunk);
}
@Override
public void onComplete() {
// ...
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
}
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
});
다음 단계
- GitHub의 Firebase 샘플 앱에서 Vertex AI를 검토합니다.
- Gemini API를 무단 클라이언트의 악용으로부터 보호하기 위해 Firebase 앱 체크를 설정하는 등 프로덕션 준비를 시작합니다.
- Firebase 문서에서 Firebase 용 Vertex AI에 관해 자세히 알아보세요.