Eğitim: Gemini API ile işlev çağrısı


İşlev çağrısı, üretici 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ı olarak oluşturulan içeriğin en güncel ve doğru bilgileri içermesini sağlar.

Gemini modellerine işlevlerin açıklamalarını sağlayabilirsiniz. Bunlar, uygulamanızın dilinde yazdığınız işlevlerdir (Google Cloud Functions değildir). Model, bir işlev ç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 edinmek için İşlev çağrısına giriş bölümüne göz atın.

Projenizi oluşturun

Gemini API'yi çağırmadan önce projenizi ayarlamanız gerekir. Bu adımlar API anahtarınızı oluşturma, SDK paketini yükleme ve modeli başlatma işlemlerini içerir.

İşlev çağrısı ayarlama

Bu eğiticide modelin, aşağıdaki parametreleri destekleyen varsayımsal bir para birimi değişim API'si ile etkileşim kurmasını göreceksiniz:

Parametre Tür Gerekli Açıklama
currencyDate dize evet
için döviz kurunun alınacağı tarih (Dönem belirtilmemişse her zaman YYYY-AA-GG biçiminde olmalıdır veya latest değeri olmalıdır)
currencyFrom dize evet Dönüştürülecek para birimi
currencyTo dize no Dönüştürülecek para birimi

Örnek API isteği

{
  "currencyDate": "2024-04-17",
  "currencyFrom": "USD",
  "currencyTo": "SEK"
}

Örnek API yanıtı

{
  "base": "USD",
  "date": "2024-04-17",
  "rates": {"SEK": 0.091}
}

1. Adım: API isteğinde bulunan işlevi oluşturun

Henüz yapmadıysanız önce API isteği yapan işlevi oluşturun.

Bu eğiticide örnek amaçlı olarak gerçek bir API isteği göndermek yerine, sabit kodlu değerleri gerçek bir API'nin döndüreceği biçimde döndüreceksiniz.

func exchangeRate(currencyDate string,
    currencyFrom string, currencyTo string) map[string]any {
    // This hypothetical API returns a JSON such as:
    // {"base":"USD","date":"2024-04-17","rates":{"SEK": 0.091}}
    return map[string]any{
        "base":  currencyFrom,
        "date":  currencyDate,
        "rates": map[string]any{currencyTo: 0.091}}
}

2. Adım: Bir işlev bildirimi oluşturun

Üretken modele ileteceğiniz işlev bildirimini oluşturun (bu eğiticinin bir sonraki adımı).

İşlev ve parametre açıklamalarına mümkün olduğunca fazla ayrıntı ekleyin. Üretken model, hangi işlevin seçileceğini ve işlev çağrısındaki parametrelere nasıl değer sağlanacağını belirlemek için bu bilgileri kullanır.

currencyExchangeTool := &genai.Tool{
    FunctionDeclarations: []*genai.FunctionDeclaration{{
        Name:        "exchangeRate",
        Description: "Lookup currency exchange rates by date",
        Parameters: &genai.Schema{
            Type: genai.TypeObject,
            Properties: map[string]*genai.Schema{
                "currencyDate": {
                    Type:        genai.TypeString,
                    Description: "A date that must always be in YYYY-MM-DD format" +
                        " or the value 'latest' if a time period is not specified",
                },
                "currencyFrom": {
                    Type:        genai.TypeString,
                    Description: "Currency to convert from",
                },
                "currencyTo": {
                    Type:        genai.TypeString,
                    Description: "Currency to convert to",
                },
            },
            Required: []string{"currencyDate", "currencyFrom"},
        },
    }},
}

3. Adım: Model başlatma sırasında işlev bildirimini belirtin

Üretken modeli başlatırken modelin Tools parametresine ileterek işlev bildirimini belirtin:

// ...

currencyExchangeTool := &genai.Tool{
  // ...
}

// Use a model that supports function calling, like Gemini 1.0 Pro.
// See "Supported models" in the "Introduction to function calling" page.
model := client.GenerativeModel("gemini-1.0-pro")

// Specify the function declaration.
model.Tools = []*genai.Tool{currencyExchangeTool}

4. Adım: Bir işlev çağrısı oluşturun

Şimdi modele tanımlı işlevle istem gönderebilirsiniz.

İşlev çağrıları, sohbetin çok dönüşlü yapısıyla uyumlu olduğundan, işlev çağrısının kullanılması önerilen yol sohbet arayüzüdür.

// Start new chat session.
session := model.StartChat()

prompt := "How much is 50 US dollars worth in Swedish krona?"

// 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, currencyExchangeTool.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{
    "base":  "USD",
    "date":  "2024-04-17",
    "rates": map[string]any{"SEK": 0.091}}

// 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:     currencyExchangeTool.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)
}