0
0

Gemini API - 導入編

Last updated at Posted at 2024-09-23

概要

(日記) Google Gemini APIを試してみよう。

環境

  • Ubuntu 24.04
  • Kotlin 2.0.0

料金

Gemini準備

Google AI for Developer → Google AI Studio → Get API Key → プロジェクト選択しAPIキーを作成

→APIキー参照

テスト
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用しかなくて残念

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0