איך מתחילים לעבוד עם Agentic Workflows

בדף הזה מוסבר איך להגדיר את פרויקט Android, להגדיר את ספריית genai-agent וליצור את הנציג הראשון במכשיר.

דרישות מוקדמות

לפני שיוצרים Agentic Workflows באמצעות Gemini Nano, צריך לוודא שהסביבה עומדת בדרישות הבאות:

הגדרת הפרויקט

מוסיפים את התלות ב-genai-agent לקובץ build.gradle.kts של המודול:

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")
}

יצירת הסוכן הראשון

לנציג יש שני רכיבים עיקריים:

  • הגדרת הסוכן: הוראות ומגבלות שקובעות את ההתנהגות של הסוכן.
  • מריץ הסוכנים: מנוע ההפעלה שמתקשר עם AICore ומנהל את השיחות.

1. הגדרת הסוכן וה-runner

דוגמת הקוד הבאה מראה איך להגדיר את הסוכן באמצעות הוראות מערכת ולהפעיל את המחלקה 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)
        }
}

לשאילתות חד-פעמיות שבהן לא צריך לשמור את היסטוריית השיחות, אפשר להפעיל את ה-method‏ runner.runSingleTurnAsync(prompt) ישירות:

lifecycleScope.launch {
    runner.runSingleTurnAsync(prompt)
        .textTokens()
        .collect { token ->
            Log.d("Agent", token)
        }
}

3. מחיקת משאבים

המחלקה AgentRunner מטמיעה את הממשק AutoCloseable. כשרכיב ViewModel או Activity נהרס, צריך לסגור את ה-runner כדי לשחרר סשנים פעילים ולבטל קורוטינות ברקע:

runner.close()

השלבים הבאים

  • הוספת יכולות באמצעות כלים: אתם יכולים לתת לסוכן את היכולת לבצע פעולות או לשלוח שאילתות לגבי נתוני האפליקציה באמצעות Android AppFunctions. איך מגדירים כלים
  • שמירה על סשנים במהלך סיבוב: במאמר ניהול סשנים ומחזור חיים מוסבר איך לשמור על המכונה של AgentSession בתוך מחלקה של ViewModel במהלך שינויים בהגדרות.
  • חיבור ל-Compose: העברת אירועים בסטרימינג ורינדור בועות צ'אט אינטראקטיביות באירועי סטרימינג ושילוב ממשק משתמש.