İşlev çağrısı eğiticisi

İşlev çağrısı, üretken modeller. Ardından, diğer API'leri çağırmak ve ilgili yanıt verilerini modele döndürmek için bu çıkışları kullanabilirsiniz. Başka bir deyişle, işlev çağrısı üretken modelleri harici sistemlere bağlarsınız. Böylece, en güncel ve doğru bilgileri içerir.

Gemini modellerine işlev açıklamaları sağlayabilirsiniz. Bunlar: uygulamanızın dilinde yazdığınız işlevler (yani Google Cloud Functions). Model, sorgunuzu işlemeye yardımcı olması için bir işlevi çağırmanızı ve sonucu geri göndermenizi isteyebilir.

Henüz yapmadıysanız daha fazla bilgi edinmek için İşlev çağırmaya giriş başlıklı makaleyi inceleyin.

Aydınlatma kontrolü için örnek API

Bir uygulama programlaması ile temel bir ışıklandırma kontrol sisteminiz olduğunu düşünün API'sını kullanıyor ve kullanıcıların ışıkları basit bir şekilde kontrol etmesine izin vermek metin istekleri. Işıklandırmayı yorumlamak için İşlev Çağrısı özelliğini kullanabilirsiniz ışıklandırmayı ayarlamak için kullanıcılardan gelen istekleri değiştirme ve bunları API çağrılarına dönüştürme değerler. Bu varsayımsal aydınlatma kontrol sistemi, ışığın parlaklığını ve renk sıcaklığını iki ayrı parametre olarak kontrol etmenize olanak tanır:

Parametre Tür Zorunlu Açıklama
brightness sayı evet Işık seviyesi 0 ile 100 arasında. Sıfır kapalı, 100 tam parlaklık.
colorTemperature dize evet Işık armatürünün renk sıcaklığı (daylight, cool veya warm olabilir).

Basitlik açısından bu hayali aydınlatma sisteminde yalnızca bir ışık vardır. Bu nedenle kullanıcının oda veya konum belirtmesi gerekmez. Gün ışığı renk sıcaklığını kullanarak ışık seviyesini %50'ye değiştirmek için aydınlatma kontrolü API'sine gönderebileceğiniz örnek bir JSON isteği aşağıda verilmiştir:

{
  "brightness": "50",
  "colorTemperature": "daylight"
}

Bu eğiticide, Gemini API için İşlev Çağrısı'nın nasıl kontrol etmek için kullanıcıların ışıklandırma isteklerini yorumlamak ve API ayarlarıyla eşlemek ışığın parlaklık ve renk sıcaklığı değerlerini yansıtabilir.

Başlamadan önce: Projenizi ve API anahtarınızı oluşturun

Gemini API'yi çağırmadan önce projenizi ayarlamanız ve API anahtarınız.

API işlevi tanımlama

API isteğinde bulunan bir işlev oluşturun. Bu fonksiyon tanımlanmalıdır. olup olmadığını kontrol edebilir, ancak en iyi yoludur. Gemini API bu işlevi doğrudan çalmaz. Bu nedenle, uygulama kodunuz aracılığıyla bu işlevin nasıl ve ne zaman çalışacağını kontrol edebilirsiniz. Gösterim amacıyla bu eğiticide yalnızca istenen ışıklandırma değerlerini döndürür:

suspend fun setLightValues(
    brightness: Int,
    colorTemp: String
): JSONObject {
    // This mock API returns the requested lighting values
    return JSONObject().apply {
        put("brightness", brightness)
        put("colorTemperature", colorTemp)
    }
}

İşlev bildirimleri oluşturma

Üretken modele ileteceğiniz işlev bildirimini oluşturun. Model tarafından kullanılacak bir işlev tanımlarken işlev ve parametre açıklamalarına mümkün olduğunca fazla ayrıntı eklemeniz gerekir. Üretken model, hangi işlevin seçileceğini ve işlev çağrısındaki parametreler için değerlerin nasıl sağlanacağını belirlemek üzere bu bilgileri kullanır. Aşağıdaki kodda, aydınlatma kontrol işlevinin nasıl tanımlanacağı gösterilmektedir:

val lightControlTool = defineFunction(
  name = "setLightValues",
  description = "Set the brightness and color temperature of a room light.",
  Schema.int("brightness", "Light level from 0 to 100. Zero is off and 100" +
    " is full brightness."),
  Schema.str("colorTemperature", "Color temperature of the light fixture" +
    " which can be `daylight`, `cool` or `warm`.")
) { brightness, colorTemp ->
    // Call the function you declared above
    setLightValues(brightness.toInt(), colorTemp)
}

Modeli başlatırken işlevleri tanımlama

İşlev çağrısını bir modelle kullanmak istediğinizde işlev bildirimlerinin her biri için bir ekran görüntüsü sunar. İşlevleri açıkladınız modelin tools parametresini ayarlayarak:

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",

    // Access your API key as a Build Configuration variable
    apiKey = BuildConfig.apiKey,

    // Specify the function declaration.
    tools = listOf(Tool(listOf(lightControlTool)))
)

İşlev çağrısı oluşturma

İşlev bildirimlerinizle modeli başlattıktan sonra, tanımlanan işleve sahip modeli kullanır. İşlev çağrısını sohbet istemi (sendMessage()), çünkü işlev çağrısı genellikle önceki istemlerin ve yanıtların bağlamına bakın.

val chat = generativeModel.startChat()

val prompt = "Dim the lights so the room feels cozy and warm."

// Send the message to the generative model
var response = chat.sendMessage(prompt)

// Check if the model responded with a function call
response.functionCall?.let { functionCall ->
  // Try to retrieve the stored lambda from the model's tools and
  // throw an exception if the returned function was not declared
  val matchedFunction = generativeModel.tools?.flatMap { it.functionDeclarations }
      ?.first { it.name == functionCall.name }
      ?: throw InvalidStateException("Function not found: ${functionCall.name}")

  // Call the lambda retrieved above
  val apiResponse: JSONObject = matchedFunction.execute(functionCall)

  // Send the API response back to the generative model
  // so that it generates a text response that can be displayed to the user
  response = chat.sendMessage(
    content(role = "function") {
        part(FunctionResponsePart(functionCall.name, apiResponse))
    }
  )
}

// Whenever the model responds with text, show it in the UI
response.text?.let { modelResponse ->
    println(modelResponse)
}