Клиентский SDK Google AI позволяет вызывать API Gemini и использовать семейство моделей Gemini непосредственно из приложения Android.
Бесплатный уровень позволяет вам бесплатно экспериментировать. Дополнительную информацию о ценах можно найти в руководстве по ценам .
Начиная
Прежде чем взаимодействовать с API Gemini непосредственно из вашего приложения, вам необходимо сначала сделать несколько вещей, в том числе ознакомиться с подсказками, а также сгенерировать ключ API и настроить приложение для использования SDK.
Экспериментируйте с подсказками
Начните с прототипирования приглашения в Google AI Studio .
Google AI Studio — это IDE для быстрого проектирования и прототипирования. Он позволяет загружать файлы для тестирования подсказок с текстом и изображениями и сохранять подсказки, чтобы вернуться к ним позже.
Создание подсказки, подходящей для вашего случая использования, — это скорее искусство, чем наука, поэтому экспериментирование имеет решающее значение. Подробнее о подсказках можно узнать в официальной документации Google AI .
Чтобы узнать больше о расширенных возможностях Google AI Studio, ознакомьтесь с кратким руководством по Google AI Studio .
Создайте свой ключ API
Убедившись в ответе, нажмите «Получить ключ API», чтобы сгенерировать ключ API Gemini. Ключ будет включен в ваше приложение, что подходит для экспериментов и создания прототипов, но не рекомендуется для производственных сценариев .
Кроме того, чтобы предотвратить фиксацию вашего ключа API в репозитории исходного кода, используйте плагин Secrets gradle .
Добавьте зависимость Gradle
Добавьте в свое приложение зависимость для клиентского SDK Google AI:
Котлин
dependencies { [...] implementation("com.google.ai.client.generativeai:generativeai:0.7.0") }
Ява
dependencies { [...] implementation("com.google.ai.client.generativeai:generativeai:0.7.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") }
Создайте GenerativeModel
Начните с создания экземпляра GenerativeModel
, предоставив следующее:
- Название модели :
gemini-1.5-flash
,gemini-1.5-pro
илиgemini-1.0-pro
- Ваш ключ API , сгенерированный с помощью Google AI Studio.
При желании вы можете определить параметры модели и указать значения температуры , topK , topP и максимальных выходных токенов .
Вы также можете определить функции безопасности для следующих тем:
-
HARASSMENT
-
HATE_SPEECH
-
SEXUALLY_EXPLICIT
-
DANGEROUS_CONTENT
Котлин
val model = GenerativeModel( model = "gemini-1.5-flash-001", apiKey = BuildConfig.apikey, generationConfig = generationConfig { temperature = 0.15f topK = 32 topP = 1f maxOutputTokens = 4096 }, safetySettings = listOf( SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE), SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE), SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE), SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE), ) )
Ява
GenerationConfig.Builder configBuilder = new GenerationConfig.Builder(); configBuilder.temperature = 0.15f; configBuilder.topK = 32; configBuilder.topP = 1f; configBuilder.maxOutputTokens = 4096; ArrayList<SafetySetting> safetySettings = new ArrayList(); safetySettings.add(new SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE)); safetySettings.add(new SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE)); safetySettings.add(new SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE)); safetySettings.add(new SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE)); GenerativeModel gm = new GenerativeModel( "gemini-1.5-flash-001", BuildConfig.apiKey, configBuilder.build(), safetySettings );
Используйте SDK клиента Google AI в своем приложении.
Теперь, когда у вас есть ключ API и вы настроили свое приложение для использования SDK, вы готовы взаимодействовать с API Gemini.
Создать текст
Чтобы сгенерировать текстовый ответ, вызовите generateContent()
с приглашением.
Котлин
scope.launch { val response = model.generateContent("Write a story about a green robot.") }
Ява
// In Java, create a GenerativeModelFutures from the GenerativeModel. // generateContent() returns a ListenableFuture. // Learn more: // https://developer.android.com/develop/background-work/background-tasks/asynchronous/listenablefuture GenerativeModelFutures model = GenerativeModelFutures.from(gm); Content content = new Content.Builder() .addText("Write a story about a green robot.") .build(); Executor executor = // ... ListenableFuture<GenerateContentResponse> response = model.generateContent(content); 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 generateContent()
— это функция suspend
, которая хорошо интегрируется с существующим кодом Kotlin.
Генерация текста из изображений и других медиафайлов
Вы также можете генерировать текст из приглашения, включающего текст, изображения или другие медиафайлы. Когда вы вызываетеgenerateContent generateContent()
, вы можете передавать медиафайлы как встроенные данные (как показано в примере ниже).
Котлин
scope.launch { val response = model.generateContent( content { image(bitmap) text("What is the object in this picture?") } ) }
Ява
Content content = new Content.Builder() .addImage(bitmap) .addText("What is the object in this picture?") .build(); Executor executor = // ... ListenableFuture<GenerateContentResponse> response = model.generateContent(content); 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 = model.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?") }
Ява
Content.Builder userContentBuilder = new Content.Builder(); userContentBuilder.setRole("user"); userContentBuilder.addText("Hello, I have 2 dogs in my house."); Content userContent = userContentBuilder.build(); // (Optional) create message history 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); Content.Builder userMessageBuilder = new Content.Builder(); userMessageBuilder.setRole("user"); userMessageBuilder.addText("How many paws are in my house?"); Content userMessage = userMessageBuilder.build(); Executor executor = // ... ListenableFuture<GenerateContentResponse> response = chat.sendMessage(userMessage); 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);
Трансляция ответа
Вы можете добиться более быстрого взаимодействия, не дожидаясь получения всего результата от создания модели, а вместо этого используйте потоковую передачу для обработки частичных результатов. Используйте generateContentStream()
для потоковой передачи ответа.
Котлин
someScope.launch { var outputContent = "" generativeModel.generateContentStream(inputContent) .collect { response -> outputContent += response.text } }
Ява
// In Java, the method generateContentStream() returns a Publisher // from the Reactive Streams library. // https://www.reactive-streams.org/ Publisher<GenerateContentResponse> streamingResponse = model.generateContentStream(content); 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); // Request all messages } });
Android-студия
Android Studio предоставляет дополнительные инструменты, которые помогут вам начать работу.
- Стартовый шаблон Gemini API . Этот стартовый шаблон поможет вам создать ключ API непосредственно из Android Studio и создать проект, включающий необходимые зависимости Android для использования API Gemini.
- Пример генеративного ИИ . Этот пример позволяет импортировать пример приложения Google AI Client SDK для Android в Android Studio.
Следующие шаги
- Ознакомьтесь с примером приложения Google AI client SDK для Android на GitHub.