このページでは、Android プロジェクトをセットアップし、genai-agent ライブラリを構成して、最初のオンデバイス エージェントを作成する方法について説明します。
前提条件
Gemini Nano で Agentic Workflows を構築する前に、環境が次の要件を満たしていることを確認してください。
- Android バージョン: AICore デベロッパー プレビュー プログラムに登録されている Android 14(API レベル 34)以降。
- サポートされているデバイス: サポートされているデバイスと Gemini Nano モデルのバージョンの一覧については、カスタム生成とエージェント デバイスのサポートをご覧ください。
- 最小 SDK:
minSdk 26以降。 - Kotlin: Kotlin 2.3 以降。
プロジェクトを構成する
モジュールの build.gradle.kts ファイルに genai-agent 依存関係を追加します。
dependencies {
// Gemini Nano agentic workflows
implementation("com.google.mlkit:genai-agent:1.0.0-alpha1")
// Optional: Only required when defining tools using Android AppFunctions
implementation("androidx.appfunctions:appfunctions:1.0.0-alpha13")
ksp("androidx.appfunctions:appfunctions-compiler:1.0.0-alpha13")
}
最初のエージェントを構築する
エージェントには、次の 2 つの主要コンポーネントがあります。
- エージェント定義: エージェントの動作を構成する指示とガードレール。
- エージェント ランナー: AICore と通信して会話を管理する実行エンジン。
1. エージェントとランナーを構成する
次のコードサンプルは、システム指示を使用してエージェントを定義し、AgentRunner クラスを初期化する方法を示しています。
import com.google.mlkit.genai.agent.Agent
import com.google.mlkit.genai.agent.AgentRunner
// 1. Build the agent configuration
val agent = Agent.builder()
.setName("Assistant")
.setInstructions("You are a helpful on-device assistant.")
.build()
// 2. Initialize the runner
val runner = AgentRunner(agent)
2. 会話を実行する
マルチターン会話では、AgentSession インスタンスを使用して、ターン間で会話履歴を保持します。プロンプト テキストを Content オブジェクトでラップし、ストリーミングされたレスポンスを収集します。
import android.util.Log
import androidx.lifecycle.lifecycleScope
import com.google.mlkit.genai.agent.textTokens
import com.google.mlkit.genai.prompt.Content
import kotlinx.coroutines.launch
// Create or retrieve a conversation session
val session = runner.getOrCreateSession("chat_session")
val prompt = Content.builder()
.text("Hello! Can you help me organize my day?")
.build()
// Collect streamed tokens in a coroutine
lifecycleScope.launch {
session.runAsync(prompt)
.textTokens()
.collect { token ->
Log.d("Agent", token)
}
}
会話履歴を保持する必要がない 1 回限りのクエリの場合は、runner.runSingleTurnAsync(prompt) メソッドを直接呼び出すことができます。
lifecycleScope.launch {
runner.runSingleTurnAsync(prompt)
.textTokens()
.collect { token ->
Log.d("Agent", token)
}
}
3. リソースのクリーンアップ
AgentRunner クラスは AutoCloseable インターフェースを実装します。ViewModel または Activity コンポーネントが破棄されたら、ランナーを閉じてアクティビティ セッションを解放し、バックグラウンド コルーチンをキャンセルします。
runner.close()
次のステップ
- ツールを使用して機能を追加する: Android AppFunctions を使用して、エージェントにアクションを実行したり、アプリデータをクエリしたりする機能を提供します。ツールを定義するをご覧ください。
- 回転の前後でセッションを保持する: セッションとライフサイクルを管理するで、構成変更の前後で
ViewModelクラス内のAgentSessionインスタンスを保持する方法を学習します。 - Compose に接続する: ストリーム イベントと UI の統合で、イベントをストリーミングし、インタラクティブなチャットのふきだしをレンダリングします。