Google AI クライアント SDK を使用すると、Android アプリから Gemini API を呼び出して Gemini ファミリーのモデルを直接使用できます。
無料枠では、費用をかけずにテストできます。その他の料金の詳細については、料金ガイドをご覧ください。
はじめに
アプリから Gemini API を直接操作する前に、プロンプトの使用方法の確認、API キーの生成、SDK を使用するようにアプリの設定など、いくつかの準備を行う必要があります。
プロンプトで試す
まず、Google AI Studio でプロンプトのプロトタイプを作成します。
Google AI Studio は、プロンプトの設計とプロトタイピング用の IDE です。ファイルをアップロードしてテキストと画像を含むプロンプトをテストし、プロンプトを保存して後で再利用できます。
ユースケースに適したプロンプトを作成することは、科学というよりは芸術に近く、そのためテストが重要になります。プロンプトの詳細については、Google AI の公式ドキュメントをご覧ください。
Google AI Studio の高度な機能の詳細については、Google AI Studio のクイックスタートをご覧ください。
API キーを生成する
プロンプトに問題がなければ、[API キーを取得] をクリックして Gemini API キーを生成します。鍵はアプリケーションにバンドルされます。これはテストやプロトタイピングには問題ありませんが、本番環境での使用には推奨されません。
また、API キーがソースコード リポジトリに commit されないようにするには、Secrets Gradle プラグインを使用します。
Gradle 依存関係を追加する
Google AI クライアント SDK の依存関係をアプリに追加します。
Kotlin
dependencies { [...] implementation("com.google.ai.client.generativeai:generativeai:0.7.0") }
Java
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
- Google AI Studio で生成した API キー。
必要に応じて、モデル パラメータを定義し、温度、topK、topP、最大出力トークン数の値を指定できます。
次のトピックの安全機能を定義することもできます。
HARASSMENT
HATE_SPEECH
SEXUALLY_EXPLICIT
DANGEROUS_CONTENT
Kotlin
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), ) )
Java
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 );
アプリで Google AI クライアント SDK を使用する
API キーを取得し、SDK を使用するようにアプリをセットアップしたので、Gemini API を操作する準備が整いました。
テキストを生成
テキスト レスポンスを生成するには、プロンプトを使用して generateContent()
を呼び出します。
Kotlin
scope.launch { val response = model.generateContent("Write a story about a green robot.") }
Java
// 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()
は suspend
関数であり、既存の Kotlin コードと統合しやすいことに注意してください。
画像やその他のメディアからテキストを生成する
テキストと画像などのメディアを含むプロンプトからテキストを生成することもできます。generateContent()
を呼び出すときに、メディアをインライン データとして渡すことができます(次の例を参照)。
Kotlin
scope.launch { val response = model.generateContent( content { image(bitmap) text("What is the object in this picture?") } ) }
Java
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()
関数を呼び出してチャット メッセージを送信します。
Kotlin
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?") }
Java
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()
を使用してレスポンスをストリーミングします。
Kotlin
someScope.launch { var outputContent = "" generativeModel.generateContentStream(inputContent) .collect { response -> outputContent += response.text } }
Java
// 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 Studio
Android Studio には、作業を開始するための追加ツールが用意されています。
- Gemini API スターター テンプレート: このスターター テンプレートを使用すると、Android Studio から直接 API キーを作成できます。また、Gemini API の使用に必要な Android 依存関係を含むプロジェクトが生成されます。
- 生成 AI のサンプル: このサンプルでは、Android Studio で Google AI クライアント SDK for Android のサンプルアプリをインポートできます。
次のステップ
- GitHub で Google AI クライアント SDK for Android のサンプルアプリを確認する。