İşlev çağrısı, üretken modellerden yapılandırılmış veri çıkışları almanızı kolaylaştırır. Ardından, diğer API'leri çağırmak ve ilgili yanıt verilerini modele döndürmek için bu çıkışları kullanabilirsiniz. Diğer bir deyişle, işlev çağrısı, oluşturulan içeriğin en güncel ve doğru bilgileri içermesi için üretken modelleri harici sistemlere bağlamanıza yardımcı olur.
Gemini modellerine işlev açıklamaları sağlayabilirsiniz. Bunlar, uygulamanızın dilinde yazdığınız işlevlerdir (yani Google Cloud Functions değildir). 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
Uygulama programlama arayüzü (API) olan temel bir aydınlatma kontrol sisteminiz olduğunu ve kullanıcıların basit metin istekleri aracılığıyla ışıkları kontrol etmesine izin vermek istediğinizi varsayalım. Kullanıcılardan gelen ışıklandırma değişikliği isteklerini yorumlamak ve ışıklandırma değerlerini ayarlamak için işlev çağırma özelliğini kullanabilirsiniz. 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 ise tam parlaklık anlamına gelir. |
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ğitimde, kullanıcıların ışıklandırma isteklerini yorumlamak ve ışığın parlaklığı ile renk sıcaklığı değerlerini kontrol etmek için Gemini API için bir işlev çağrısının nasıl ayarlanacağı gösterilmektedir.
Başlamadan önce: Projenizi ve API anahtarınızı oluşturun
Gemini API'yi çağırmadan önce projenizi oluşturmanız ve API anahtarınızı yapılandırmanız gerekir.
API işlevi tanımlama
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:
func setLightValues(brightness int, colorTemp string) map[string]any {
// This mock API returns the requested lighting values
return map[string]any{
"brightness": brightness,
"colorTemperature": colorTemp}
}
İşlev beyanı 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, 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:
lightControlTool := &genai.Tool{
FunctionDeclarations: []*genai.FunctionDeclaration{{
Name: "controlLight",
Description: "Set the brightness and color temperature of a room light.",
Parameters: &genai.Schema{
Type: genai.TypeObject,
Properties: map[string]*genai.Schema{
"brightness": {
Type: genai.TypeString,
Description: "Light level from 0 to 100. Zero is off and"+
" 100 is full brightness.",
},
"colorTemperature": {
Type: genai.TypeString,
Description: "Color temperature of the light fixture which" +
" can be `daylight`, `cool` or `warm`.",
},
},
Required: []string{"brightness", "colorTemperature"},
},
}},
}
Modeli başlatırken işlevleri tanımlama
Bir modelde işlev çağrısını kullanmak istediğinizde model nesnesini başlatırken işlev beyanlarınızı sağlamanız gerekir. Modelin Tools
parametresini ayarlayarak işlevleri bildirirsiniz:
// ...
lightControlTool := &genai.Tool{
// ...
}
// Use a model that supports function calling, like a Gemini 1.5 model
model := client.GenerativeModel("gemini-1.5-flash")
// Specify the function declaration.
model.Tools = []*genai.Tool{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ı genellikle önceki istemlerin ve yanıtların bağlamından yararlandığından, sohbet istemi (SendMessage()
) kullanarak işlev çağrısı yapmalısınız.
// Start new chat session.
session := model.StartChat()
prompt := "Dim the lights so the room feels cozy and warm."
// Send the message to the generative model.
resp, err := session.SendMessage(ctx, genai.Text(prompt))
if err != nil {
log.Fatalf("Error sending message: %v\n", err)
}
// Check that you got the expected function call back.
part := resp.Candidates[0].Content.Parts[0]
funcall, ok := part.(genai.FunctionCall)
if !ok {
log.Fatalf("Expected type FunctionCall, got %T", part)
}
if g, e := funcall.Name, lightControlTool.FunctionDeclarations[0].Name; g != e {
log.Fatalf("Expected FunctionCall.Name %q, got %q", e, g)
}
fmt.Printf("Received function call response:\n%q\n\n", part)
apiResult := map[string]any{
"brightness": "30",
"colorTemperature": "warm" }
// Send the hypothetical API result back to the generative model.
fmt.Printf("Sending API result:\n%q\n\n", apiResult)
resp, err = session.SendMessage(ctx, genai.FunctionResponse{
Name: lightControlTool.FunctionDeclarations[0].Name,
Response: apiResult,
})
if err != nil {
log.Fatalf("Error sending message: %v\n", err)
}
// Show the model's response, which is expected to be text.
for _, part := range resp.Candidates[0].Content.Parts {
fmt.Printf("%v\n", part)
}