Android の Gemini API Starter テンプレートを使ってみる
この記事はmob Advent Calendar 17日目の記事です。
下記で AndroidアプリでGeminiを活用する
方法が紹介されていました。 その中で Android Studio のプロジェクトテンプレートとして 「Gemini API Starter」 が追加されていることも紹介されています。
ただ 「Gemini API Starter」 を選ぶとどうなるのかが、何が準備されているのかがわからなかったので実際に触ってみました。
Android プレビュー版をインストールする
現状は プレビュー版でのみリリースされているので、下記からプレビュー版をインストールする必要があります。
ちなみに自分が使ったプレビュー版は以下になります。
Android Studio Iguana | 2023.2.1 Canary 18
Build #AI-232.10227.8.2321.11203637, built on December 12, 2023
Runtime version: 17.0.9+0-17.0.9b1087.7-11185874 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 12.7.1
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 8
Metal Rendering is ON
Registry:
ide.experimental.ui=true
APIキーを作成する
こちらから APIキーを作成しておきます。
作成した API キーは手元にコピーしておいてください。
プロジェクトを立ち上げる
プレビュー版で New Project をするといつものテンプレート内に 「Gemini API Starter」が追加されているのでこちらを選択します。
必要情報を入力して Next を押します。
先ほどコピーした API Key を入力して Finish を押します。
立ち上げてみる
冒頭の記事の一部をコピペして 「Go」を押してみます。
hintを見る限りは URL も行けそうなので試してみます。
これはできないみたいですね( なんで hint 違うやん...)
コードを見てみる
libs.versions.toml
を除いてみます。 com.google.ai.client.generativeai:generativeai
が定義されています。これが新しいSDKのようです。
[versions]
...
generativeai = "0.1.0"
...
[libraries]
...
generativeai = { group = "com.google.ai.client.generativeai", name = "generativeai", version.ref = "generativeai" }
APIKey は local.properties にありました。
sdk.dir=/Users/kgmyshin/Library/Android/sdk
apiKey={{ここに先ほど指定したAPIキー}}
com.google.android.libraries.mapsplatform.secrets-gradle-plugin
が適用されているので、これによってコード上で BuildConfig.apiKey
としてアクセスできているようです。
プロンプト送信部分は次のようになっていました。
package com.example.androidaisample
...
import com.google.ai.client.generativeai.GenerativeModel
...
class SummarizeViewModel(
private val generativeModel: GenerativeModel
) : ViewModel() {
...
fun summarize(inputText: String) {
_uiState.value = SummarizeUiState.Loading
val prompt = "Summarize the following text for me: $inputText"
viewModelScope.launch {
try {
val response = generativeModel.generateContent(prompt)
response.text?.let { outputContent ->
_uiState.value = SummarizeUiState.Success(outputContent)
}
} catch (e: Exception) {
_uiState.value = SummarizeUiState.Error(e.localizedMessage ?: "")
}
}
}
}
ただ生成するだけならこれだけでよさそうです。かなり簡単です。
val prompt = "{なにか指示}"
val generativeModel = GenerativeModel(
modelName = "gemini-pro",
apiKey = BuildConfig.apiKey
)
val response = generativeModel.generateContent(prompt)
まとめ
- sdきょさそう
Discussion