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

İşlev çağrısı, üretken modellerden yapılandırılmış veri çıkışları almanızı kolaylaştırır. Daha sonra bu çıkışları kullanarak diğer API'leri çağırabilir ve ilgili yanıt verilerini modele döndürebilirsiniz. Başka bir deyişle, işlev çağrısı, üretken modelleri harici sistemlere bağlamanıza yardımcı olur. Böylece, oluşturulan içerik 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 (Google Cloud Functions değildirler). Model, bir işlevi çağırmanızı ve modelin sorgunuzu işlemesine yardımcı olmak için sonucu geri göndermenizi isteyebilir.

Henüz yapmadıysanız daha fazla bilgi için İşlev çağrısına giriş sayfasına göz atın.

Aydınlatma kontrolü için örnek API

Uygulama programlama arayüzüne (API) sahip temel bir ışıklandırma kontrol sisteminiz olduğunu ve kullanıcıların basit metin istekleriyle ışıkları kontrol etmesine izin vermek istediğinizi düşünün. Işıklandırma değerlerini ayarlamak amacıyla kullanıcılardan gelen ışık değişikliği isteklerini yorumlamak ve bunları API çağrılarına dönüştürmek için İşlev Çağrısı özelliğini kullanabilirsiniz. Bu varsayımsal ışıklandırma kontrol sistemi, ışığın parlaklığını ve renk sıcaklığını kontrol etmenizi sağlar. Bunlar, iki ayrı parametreyle tanımlanır:

Parametre Tür Gerekli Açıklama
brightness sayı evet Işık seviyesi 0 ile 100 arasında. 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 sahip olduğundan kullanıcının oda veya konum belirtmesi gerekmez. İşte gün ışığı renk sıcaklığını kullanarak ışık seviyesini %50 olarak değiştirmek için aydınlatma kontrolü API'sine gönderebileceğiniz örnek bir JSON isteği:

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

Bu eğitim, kullanıcıların ışık isteklerini yorumlamak ve ışığın parlaklığı ile renk sıcaklığı değerlerini kontrol etmek için bunları API ayarlarıyla eşlemek amacıyla Gemini API için İşlev Çağrısı'nın nasıl ayarlanacağını gösterir.

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ı yapılandırmanız gerekir.

API işlevleri tanımlayın

API isteğinde bulunan 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 çağrımaz. Böylece, bu işlevin nasıl ve ne zaman yürütüleceğini uygulama kodunuzla kontrol edebilirsiniz. Gösterim amacıyla bu eğiticide, istenen ışıklandırma değerlerini döndüren örnek bir API işlevi tanımlanmaktadı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 bildirimi oluşturma

Üretken modele ileteceğiniz işlev bildirimini oluşturun. Modelin kullanması için bir işlev bildirdiğinizde, işleve ve parametre açıklamalarına mümkün olduğunca fazla ayrıntı eklemeniz gerekir. Üretken model, bu bilgileri kullanarak hangi işlevin seçileceğini ve işlev çağrısındaki parametreler için değerlerin nasıl sağlanacağını belirler. Aşağıdaki kodda ışık 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{"currencyDate", "currencyFrom"},
        },
    }},
}

Model başlatma sırasında işlevleri bildirme

İşlev çağrısını bir modelle kullanmak istiyorsanız model nesnesini ilk kullanıma hazırlarken işlev bildirimlerinizi sağlamanız gerekir. Modelin Tools parametresini ayarlayarak işlevleri tanımlarsınız:

// ...

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 bildirimlerinizle başlattıktan sonra, tanımlı işlevle modele istem girebilirsiniz. İşlev çağrısı genellikle önceki istemlerin ve yanıtların bağlamının kullanılmasından fayda sağladığından, işlev çağrısı özelliğini sohbet istemi (SendMessage()) kullanarak kullanmalı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)
}