İşlev çağrısı, üretken modellerden yapılandırılmış veri çıkışları almanızı kolaylaştırır. Ardından bu çıkışları kullanarak diğer API'leri çağırabilir ve yanıt verilerini modele uygun hale getirmemize yardımcı olur. 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şlevlerin açıklamalarını sağlayabilirsiniz. Bunlar, uygulamanızın dilinde yazdığınız işlevlerdir (yani Google Cloud Functions değildir). Model, sizden bir işlevi çağırmanızı ve sonuç; modelin sorgunuzu ele almasına yardımcı olur.
Henüz yapmadıysanız Öğrenmek için işlev çağrısına giriş daha fazla bilgi verebilir.
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 | 0 ile 100 arasında değişen ışık seviyesi. Sıfır kapalı, 100 tam parlaklık. |
colorTemperature |
dize | evet | Aydınlatma armatürünün renk sıcaklığı (daylight , cool veya warm ). |
Basitlik sağlaması açısından, bu hayali aydınlatma sisteminde yalnızca tek bir ışığa sahiptir, böylece kullanıcı bir oda veya yer belirtmesi gerekmiyor. Aşağıda örnek bir JSON isteği verilmiştir ışık seviyesini %50 olarak değiştirmek için ışık kontrolü API'sine gönderebilirsin gün ışığı renk sıcaklığını kullanarak:
{
"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şlevleri tanımlayın
API isteği gönderen bir işlev oluşturun. Bu işlev, uygulamanızın kodunda tanımlanmalıdır ancak uygulamanızın dışındaki hizmetleri veya API'leri çağırabilir. 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. Bu eğitimde, yalnızca istenen aydınlatma değerlerini döndüren bir örnek API işlevi tanımlanmıştı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 tanımını 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 bu bilgiyi, hangi işlevin seçileceğini ve işlevin nasıl sağlanacağını belirlemek için parametre değerlerini içerir. 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)
}
Model başlatma sırasında işlevleri bildirme
İş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
Modeli işlev beyanlarınızla başlattıktan sonra, modele tanımlanmış işlevi isteyebilirsiniz. İş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)
}