Чтобы получить доступ к API Gemini и семейству моделей Gemini непосредственно из вашего приложения, мы рекомендуем использовать Vertex AI в Firebase SDK для Android. Этот SDK является частью более крупной платформы Firebase , которая помогает создавать и запускать полнофункциональные приложения.
Переход с клиентского SDK Google AI
Vertex AI в Firebase SDK аналогичен клиентскому SDK Google AI , но Vertex AI в Firebase SDK предлагает важные параметры безопасности и другие функции для производственных сценариев использования . Например, при использовании Vertex AI в Firebase вы также можете использовать следующее:
Проверка приложений Firebase для защиты API Gemini от злоупотреблений со стороны неавторизованных клиентов.
Firebase Remote Config для динамической установки и изменения значений вашего приложения в облаке (например, названия моделей) без необходимости выпуска новой версии вашего приложения.
Облачное хранилище для Firebase для включения больших медиафайлов в ваш запрос к Gemini API.
Если вы уже интегрировали клиентский SDK Google AI в свое приложение, вы можете перейти на Vertex AI в Firebase .
Начиная
Прежде чем взаимодействовать с Gemini API непосредственно из вашего приложения, вам необходимо сначала сделать несколько вещей, в том числе ознакомиться с подсказками, а также настроить Firebase и ваше приложение для использования SDK.
Экспериментируйте с подсказками
Поэкспериментировать с подсказками можно в Vertex AI Studio . Vertex AI Studio — это IDE для быстрого проектирования и прототипирования. Он позволяет загружать файлы для тестирования подсказок с текстом и изображениями и сохранять подсказки, чтобы вернуться к ним позже.
Создание подсказки, подходящей для вашего случая использования, — это скорее искусство, чем наука, поэтому экспериментирование имеет решающее значение. Подробнее о подсказках можно узнать в документации Firebase .
Настройте проект Firebase и подключите свое приложение к Firebase.
Когда вы будете готовы вызвать Gemini API из своего приложения, следуйте инструкциям в руководстве по началу работы с Vertex AI в Firebase , чтобы настроить Firebase и SDK в своем приложении. Руководство по началу работы поможет вам выполнить все следующие задачи, описанные в этом руководстве.
Настройте новый или существующий проект Firebase, включая использование тарифного плана Blaze с оплатой по мере использования и включение необходимых API.
Подключите свое приложение к Firebase, включая регистрацию вашего приложения и добавление файла конфигурации Firebase (
google-services.json
) в ваше приложение.
Добавьте зависимость Gradle
Добавьте следующую зависимость Gradle в модуль вашего приложения:
Котлин
dependencies { ... implementation("com.google.firebase:firebase-vertexai:16.0.2") }
Ява
dependencies { [...] implementation("com.google.firebase:firebase-vertexai:16.0.2") // 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
и указания имени модели:
Котлин
val generativeModel = Firebase.vertexAI.generativeModel("gemini-1.5-flash")
Ява
GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel("gemini-1.5-flash");
В документации Firebase вы можете узнать больше о доступных моделях для использования с Vertex AI в Firebase. Вы также можете узнать о настройке параметров модели .
Взаимодействуйте с API Gemini из вашего приложения.
Теперь, когда вы настроили Firebase и свое приложение для использования SDK, вы готовы взаимодействовать с API Gemini из своего приложения.
Создать текст
Чтобы сгенерировать текстовый ответ, вызовите generateContent()
с приглашением.
Котлин
// 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()
, вы можете передавать медиафайлы как встроенные данные (как показано в примере ниже). Кроме того, вы можете включить в запрос большие медиафайлы , используя URL-адреса Cloud Storage for Firebase.
Котлин
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()
для отправки сообщений чата.
Котлин
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()
для потоковой передачи ответа.
Котлин
scope.launch { var outputContent = "" generativeModel.generateContentStream(inputContent) .collect { response -> outputContent += response.text } }
Ява
// 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); } });
Следующие шаги
- Ознакомьтесь с примером приложения Vertex AI в Firebase на GitHub.
- Начните думать о подготовке к работе , включая настройку Firebase App Check для защиты API Gemini от злоупотреблений со стороны неавторизованных клиентов.
- Узнайте больше о Vertex AI в Firebase в документации Firebase .