Agentic Workflows を使ってみる

このページでは、Android プロジェクトをセットアップし、genai-agent ライブラリを構成して、最初のオンデバイス エージェントを作成する方法について説明します。

前提条件

Gemini Nano で Agentic Workflows を構築する前に、環境が次の要件を満たしていることを確認してください。

プロジェクトを構成する

モジュールの 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 の統合で、イベントをストリーミングし、インタラクティブなチャットのふきだしをレンダリングします。