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

İşlev çağrısı, üretken modeller. 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şlevler (yani Google Cloud Functions). 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 edinebilirsiniz.

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 ışıklandırma kontrol sistemi, ışıklarınızı ışığın parlaklığı ve renk sıcaklığı, 2 ayrı parametre:

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 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ğitimde, aşağıdaki işlemler için Gemini API'ye İş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ğinde bulunan bir işlev oluşturun. Bu fonksiyon tanımlanmalıdır. olup olmadığını kontrol edebilir, ancak en iyi yoludur. Gemini API doğrudan bu işlevi çağrımaz. Bu nedenle, bu işlevin uygulamanız üzerinden nasıl ve ne zaman yürütüleceğini kontrol edebilir girin. Gösterim amacıyla bu eğiticide yalnızca istenen ışıklandırma değerlerini döndürü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. Zaman modelin kullanması için bir fonksiyon tanımlarsanız, modelin ne kadar bunları işlev ve parametre açıklamalarında mümkün olduğunca yerleştirin. Ü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, ışık kontrolü işlevini tanımlayın:

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 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:

// ...

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

İş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.

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