Android 向け Agent Development Kit(ADK)ライブラリを使用すると、高度な AI エージェントを構築して Android アプリに直接統合できます。ADK は、ローカル、ホスト型サービス、Android モバイル デバイスで実行される AI 搭載エージェントを構築するためのオープンソースのデベロッパー フレームワークです。このフレームワークは Kotlin と Java のプログラミング言語をサポートしているため、エージェントを迅速に構築し、複雑なマルチエージェント アプリケーションにスケールアップできます。
Android 向け ADK ライブラリは、モバイル環境に特化した依存関係とランタイム サポートを提供します。ML Kit GenAI API を使用して Gemini Nano でオンデバイス AI モデルを実行するエージェントを構築できます。これにより、ネットワーク アクセスなしで機能する、プライバシー重視で低レイテンシの AI エクスペリエンスを作成できます。
Android プロジェクトで ADK Kotlin を使用する
ADK Kotlin Agent API を使用すると、Android アプリ内で実行される AI エージェントを構築できます。記述するエージェント コードは、ADK Kotlin のスタートガイドと同じです。違いは、Gradle の依存関係、プロジェクト構成、実行時にエージェントを呼び出す方法です。
前提条件
ADK for Android ライブラリには、次の開発要件があります。
- Android Studio
- Android SDK(compileSdk 34 以降、minSdk 24 以降)
Android プロジェクトを構成する
Android プロジェクトの build.gradle.kts に、ADK Android の依存関係と KSP アノテーション プロセッサを追加します。
plugins {
id("com.android.application")
kotlin("android")
id("com.google.devtools.ksp") version "2.1.20-2.0.1"
}
android {
namespace = "com.example.agent"
compileSdk = 34
defaultConfig {
applicationId = "com.example.agent"
minSdk = 24
targetSdk = 34
}
packaging {
resources {
excludes += "/META-INF/{INDEX.LIST,DEPENDENCIES}"
}
}
}
dependencies {
implementation("com.google.adk:google-adk-kotlin-core-android:0.1.0")
ksp("com.google.adk:google-adk-kotlin-processor:0.1.0")
}
kotlin {
jvmToolchain(17)
}
エージェントを定義する
エージェント コードは、ADK の Kotlin クイックスタートと同じです。@Tool、@Param、.generatedTools() 構文を使用した HelloTimeAgent コード例は、Android で変更なしで動作します。
// package com.example.agent // import com.google.adk.kt.agents.Instruction // import com.google.adk.kt.agents.LlmAgent // import com.google.adk.kt.annotations.Param // import com.google.adk.kt.annotations.Tool // import com.google.adk.kt.models.Gemini class TimeService { /** Mock tool implementation */ @Tool fun getCurrentTime( @Param("Name of the city to get the time for") city: String ): Map<String, String> { return mapOf("city" to city, "time" to "The time is 10:30am.") } } object HelloTimeAgent { @JvmField val rootAgent = LlmAgent( name = "hello_time_agent", description = "Tells the current time in a specified city.", model = Gemini( name = "gemini-flash-latest", apiKey = System.getenv("GOOGLE_API_KEY") ?: error("GOOGLE_API_KEY environment variable not set."), ), instruction = Instruction( "You are a helpful assistant that tells the current time in a city. " + "Use the 'getCurrentTime' tool for this purpose." ), tools = TimeService().generatedTools(), ) }
Android アプリからエージェントを実行する
Android 搭載デバイスでは、次のコード例に示すように、InMemoryRunner を使用してエージェントを呼び出し、コルーチンからレスポンスを収集します。
// import com.google.adk.kt.runners.InMemoryRunner // import com.google.adk.kt.sessions.InMemorySessionService // import com.google.adk.kt.types.Content // import com.google.adk.kt.types.Part // import com.google.adk.kt.types.Role // import kotlinx.coroutines.CoroutineScope // import kotlinx.coroutines.launch // Create a runner and session service val sessionService = InMemorySessionService() val runner = InMemoryRunner( agent = HelloTimeAgent.rootAgent, sessionService = sessionService, ) // Call the agent from a coroutine (e.g. in a ViewModel or Activity) scope.launch { runner.runAsync( userId = "user-123", sessionId = "session-123", newMessage = Content( role = Role.USER, parts = listOf(Part(text = "What time is it in New York?")), ), ).collect { event -> val text = event.content?.parts?.firstOrNull()?.text if (!text.isNullOrBlank()) { // Update your UI with the agent's response } } }
エージェントを使用して UI を生成する
エージェントが書式なしテキストではなく、カード、フォーム、リストなどの構造化されたインタラクティブなユーザー インターフェースを返す必要がある場合は、Agent to UI(A2UI)プロトコルを使用します。
Jetpack Compose A2UI レンダラを使用すると、アプリの UI 階層で A2UI レスポンスをネイティブの Jetpack Compose コンポーネントとマテリアル 3 コンポーネントとして自動的にレンダリングできます。開始するには、Jetpack Compose A2UI ガイドをご覧ください。
Gemini Nano を使用したオンデバイス モデル
ADK for Android アーティファクトには、ML Kit GenAI API を介した Gemini Nano を使用したオンデバイス推論のサポートが含まれています。このアプローチにより、エージェントはネットワーク アクセスなしで実行でき、データはデバイスに保持されます。
オンデバイス モデルを使用するには、次のコード例に示すように、Gemini ではなく GenaiPrompt モデルを作成します。
// import com.google.adk.kt.models.mlkit.GenaiPrompt // import com.google.mlkit.genai.prompt.Generation // import com.google.mlkit.genai.prompt.GenerativeModel // Create an ML Kit GenerativeModel for on-device inference val generativeModel: GenerativeModel = Generation.getClient() val onDeviceModel = GenaiPrompt.create( generativeModel = generativeModel, name = "gemini-nano", ) val agent = LlmAgent( name = "on_device_agent", model = onDeviceModel, instruction = Instruction("You are a helpful assistant."), )
マルチエージェント システムでクラウドモデルとオンデバイス モデルを組み合わせることもできます。ルート オーケストレーターにはクラウドベースの Gemini を使用し、プライバシーに配慮したタスクを処理するサブエージェントにはオンデバイスの GenaiPrompt モデルを使用します。このパターンの詳細については、Kotlin と Android 向け ADK のブログ投稿をご覧ください。
完全に動作するアクティビティとその他の例については、GitHub の ADK Kotlin の例をご覧ください。