概要
(日記) Google Gemini APIを試してみよう。
環境
- Ubuntu 24.04
- Kotlin 2.0.0
料金
Gemini準備
Google AI for Developer → Google AI Studio → Get API Key → プロジェクト選択しAPIキーを作成
※APIキーは非公開。GitHub等にコミットしないよう注意。
テスト
GOOGLE_API_KEY=<YOUR_API_KEY>
curl -H 'Content-Type: application/json' \
-d '{"contents":[{"parts":[{"text":"説明: AIはどのように動くのか?"}]}]}' \
-X POST \
'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key='"$GOOGLE_API_KEY"
使用可能model列挙
curl https://generativelanguage.googleapis.com/v1beta/models?key=$GOOGLE_API_KEY
URLを直に叩いてみる
カレントディレクトリ以下にあるコード(つまり自身)をレビューし改善するkotlinサンプルコード
src/main/kotlin/Main.kt
suspend fun main(args: Array<String>): Unit = with(FileSystem.SYSTEM) {
val key = System.getenv("GOOGLE_API_KEY") ?: throw IllegalArgumentException("Not Found: GOOGLE_API_KEY")
fun srcs() = listRecursively(".".toPath()).filter { it.name.endsWith(".kt") }.map { read(it) { readUtf8() } }
val client = HttpClient(CIO) { install(ContentNegotiation) { json(Json { ignoreUnknownKeys = true }) } }
client.post("https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=$key") {
contentType(ContentType.Application.Json)
setBody(ReqGemini(listOf(ReqContent(listOf(ReqPart("コードレビューして: ${srcs().joinToString()}"))))))
}.body<ResGemini>().also(::println)
}
@Serializable data class ReqGemini(val contents: List<ReqContent>)
@Serializable data class ReqContent(val parts: List<ReqPart>)
@Serializable data class ReqPart(val text: String)
@Serializable data class ResGemini(val candidates: List<ResCandidate>)
@Serializable data class ResCandidate(val content: ResContent)
@Serializable data class ResContent(val parts: List<ResPart>, val role: String)
@Serializable data class ResPart(val text: String)
Run
export GOOGLE_API_KEY=<YOUR_API_KEY>
sh ./gradlew run
ResGemini(candidates=[ResCandidate(content=ResContent(parts=[ResPart(text=コードレビューですね!コードの可読性と保守性を高めるため、いくつかの修正案を提案させていただきます。
**1. 定数の命名:**
{{...中略...}}
これらの変更点によって、コードの可読性と保守性が向上し、将来の変更や拡張が容易になります。)], role=model),
{{...中略...}}
usageMetadata=ResUsageMetadata(promptTokenCount=696, candidatesTokenCount=1235, totalTokenCount=1931))
参考
Geminiモデル別仕様表
Vertex AI API
Gemini APIも共通部分多いと期待
Java APIリファレンス- google-cloud-aiplatform
公式サンプルコード
だいたいPython用しかなくて残念