Einführung in Funktionsaufrufe mit der Gemini API

Mit der Funktion „Funktionsaufruf“ der Gemini API können Sie dem Modell benutzerdefinierte Funktionsdefinitionen zur Verfügung stellen. Das Modell ruft diese Funktionen nicht direkt auf, sondern generiert eine strukturierte Ausgabe, in der der Funktionsname und die vorgeschlagenen Argumente angegeben sind. Sie können dann den Funktionsnamen und die Argumente verwenden, um eine externe API aufzurufen, und die resultierende API-Ausgabe in eine weitere Abfrage an das Modell einbinden. So kann das Modell eine umfassendere Antwort liefern und zusätzliche Aktionen ausführen.

Mit Funktionsaufrufen können Nutzer mit Echtzeitinformationen und Diensten wie Datenbanken, Customer-Relationship-Management-Systemen und Dokument-Repositories interagieren. Außerdem kann das Modell mit dieser Funktion relevantere und kontextbezogenere Antworten liefern. Funktionsaufrufe eignen sich am besten für die Interaktion mit externen Systemen. Wenn für Ihren Anwendungsfall Berechnungen mit dem Modell erforderlich sind, aber keine externen Systeme oder APIs verwendet werden, sollten Sie stattdessen die Codeausführung verwenden.

Ein funktionierendes Beispiel für Funktionsaufrufe finden Sie im Notebook „light bot“.

Funktionsweise von Funktionsaufrufen

Sie verwenden die Funktion „Funktionsaufruf“, indem Sie einem Modellprompt strukturierte Abfragedaten hinzufügen, die Programmierschnittstellen beschreiben, sogenannte Funktionsdeklarationen. Die Funktionsdeklarationen enthalten den Namen der API-Funktion, ihren Zweck, alle unterstützten Parameter und Beschreibungen dieser Parameter. Nachdem Sie eine Liste von Funktionsdeklarationen in einer Abfrage an das Modell übergeben haben, werden die Funktionsdeklarationen und der Rest der Abfrage analysiert, um zu ermitteln, wie die deklarierte API als Antwort auf die Anfrage verwendet werden soll.

Das Modell gibt dann ein Objekt in einem OpenAPI-kompatiblen Schema zurück, in dem angegeben ist, wie eine oder mehrere der deklarierten Funktionen aufgerufen werden, um auf die Frage des Nutzers zu antworten. Sie können dann die empfohlenen Parameter für den Funktionsaufruf verwenden, die eigentliche API aufrufen, eine Antwort abrufen und diese Antwort an den Nutzer weitergeben oder weitere Maßnahmen ergreifen. Beachten Sie, dass die deklarierten Funktionen vom Modell nicht aufgerufen werden. Stattdessen verwenden Sie die zurückgegebenen Schemaobjektparameter, um die Funktion aufzurufen. Die Gemini API unterstützt auch parallele Funktionsaufrufe, bei denen das Modell mehrere API-Funktionsaufrufe auf der Grundlage einer einzelnen Anfrage empfiehlt.

Funktionsdeklarationen

Wenn Sie einen Funktionsaufruf in einem Prompt implementieren, erstellen Sie ein tools-Objekt, das ein oder mehrere function declarations enthält. Sie definieren Funktionen mit JSON, genauer gesagt mit einem ausgewählten Teil des OpenAPI-Schemaformats. Eine einzelne Funktionsdeklaration kann die folgenden Parameter enthalten:

  • name (String): Die eindeutige Kennung für die Funktion im API-Aufruf.
  • description (String): Eine umfassende Erläuterung des Zwecks und der Funktionen der Funktion.
  • parameters (Objekt): Hier werden die von der Funktion benötigten Eingabedaten definiert.
    • type (String): Gibt den Gesamtdatentyp an, z. B. object.
    • properties (Objekt): Hier werden einzelne Parameter mit den folgenden Informationen aufgelistet:
      • type (String): Der Datentyp des Parameters, z. B. string, integer, boolean.
      • description (String): Eine klare Erläuterung des Zwecks und des erwarteten Formats des Parameters.
    • required (Array): Ein Array von Strings, das die Parameternamen enthält, die für die Funktion erforderlich sind.

Codebeispiele für eine Funktionsdeklaration mit cURL-Befehlen finden Sie unter Beispiele für Funktionsaufrufe. Beispiele für das Erstellen von Funktionsdeklarationen mit den Gemini API SDKs finden Sie in der Anleitung zu Funktionsaufrufen.

Best Practices für Funktionsdeklarationen

Eine genaue Definition Ihrer Funktionen ist bei der Einbindung in Ihre Anfragen unerlässlich. Jede Funktion basiert auf bestimmten Parametern, die ihr Verhalten und ihre Interaktion mit dem Modell steuern. Im folgenden Codebeispiel wird beschrieben, wie die Parameter einer einzelnen Funktion in einem functions_declarations-Array definiert werden.

  • name: Verwenden Sie eindeutige, beschreibende Namen ohne Leerzeichen, Punkt (.) oder Bindestrich (-). Verwenden Sie stattdessen Unterstriche (_) oder Camel Case.

  • description: Geben Sie detaillierte, klare und spezifische Funktionsbeschreibungen an und fügen Sie gegebenenfalls Beispiele hinzu. Verwenden Sie beispielsweise find theaters based on location and optionally movie title that is currently playing in theaters. anstelle von find theaters. Vermeiden Sie zu allgemeine oder mehrdeutige Beschreibungen.

  • properties > type: Verwenden Sie stark typisierte Parameter, um Modellhalluzinationen zu reduzieren. Wenn die Parameterwerte beispielsweise aus einem endlichen Set stammen, verwenden Sie ein enum-Feld, anstatt die Werte in der Beschreibung aufzulisten (z.B. "type": "enum", "values": ["now_playing", "upcoming"]). Wenn der Parameterwert immer eine Ganzzahl ist, setzen Sie den Typ auf integer statt auf number.

  • properties > description: Geben Sie konkrete Beispiele und Einschränkungen an. Verwenden Sie beispielsweise The city and state, e.g. San Francisco, CA or a zip code e.g. 95616 anstelle von the location to search.

Weitere Best Practices für die Verwendung von Funktionsaufrufen finden Sie im Abschnitt Best Practices.

Modus für Funktionsaufrufe

Mit dem Parameter mode für den Funktionsaufruf können Sie das Ausführungsverhalten des Features ändern. Es stehen drei Modi zur Verfügung:

  • AUTO: Das Standardverhalten des Modells. Das Modell entscheidet, ob ein Funktionsaufruf oder eine Antwort in natürlicher Sprache vorhergesagt werden soll.
  • ANY: Das Modell ist darauf beschränkt, immer einen Funktionsaufruf vorherzusagen. Wenn allowed_function_names nicht angegeben ist, wählt das Modell eine der verfügbaren Funktionsdeklarationen aus. Wenn allowed_function_names angegeben wird, wählt das Modell eine der zulässigen Funktionen aus.
  • NONE: Das Modell prognostiziert keinen Funktionsaufruf. In diesem Fall verhält sich das Modell so, als würden Sie keine Funktionsdeklarationen übergeben.

Die Verwendung des ANY-Modus („erzwungener Funktionsaufruf“) wird nur für Gemini 1.5 Pro- und Gemini 1.5 Flash-Modelle unterstützt.

Sie können auch eine Reihe von allowed_function_names übergeben, die die Funktionen einschränken, die vom Modell aufgerufen werden. Sie sollten allowed_function_names nur angeben, wenn der Modus ANY ist. Funktionsnamen müssen mit den Namen der Funktionsdeklarationen übereinstimmen. Wenn der Modus auf ANY und allowed_function_names festgelegt ist, prognostiziert das Modell einen Funktionsaufruf aus den angegebenen Funktionsnamen.

Das folgende Code-Snippet aus einer Beispielanfrage zeigt, wie Sie mode auf ANY festlegen und eine Liste der zulässigen Funktionen angeben:

"tool_config": {
  "function_calling_config": {
    "mode": "ANY",
    "allowed_function_names": ["find_theaters", "get_showtimes"]
  },
}

Beispiele für Funktionsaufrufe

Dieser Abschnitt enthält Beispielprompts für den Funktionsaufruf mit cURL-Befehlen. Die Beispiele umfassen Szenarien mit einer und mehreren Runden sowie verschiedene Modi für Funktionsaufrufe.

Wenn Sie cURL-Befehle mit dieser Funktion verwenden, sind die Informationen zu Funktion und Parameter im tools-Element enthalten. Jede Funktionsdeklaration im Element tools enthält den Funktionsnamen. Die Parameter werden in einem OpenAPI-kompatiblen Schema und einer Funktionsbeschreibung angegeben.

Beispiel für eine einzelne Wendung

Bei einer einzelnen Runde wird das Sprachmodell nur einmal aufgerufen. Beim Funktionsaufruf kann ein Einzelrunden-Anwendungsfall sein, wenn Sie dem Modell eine Natural Language-Abfrage und eine Liste von Funktionen zur Verfügung stellen. In diesem Fall verwendet das Modell die Funktionsdeklaration, die den Funktionsnamen, die Parameter und die Beschreibung enthält, um vorherzusagen, welche Funktion aufgerufen werden soll und mit welchen Argumenten.

Im folgenden curl-Beispiel wird ein Beispiel für die Übergabe einer Beschreibung einer Funktion, das Informationen darüber zurückgibt, wo ein Film abgespielt wird. Die Anfrage enthält mehrere Funktionsdeklarationen, z. B. find_movies und find_theaters.

Beispielanfrage für Funktionsaufruf in einer Runde

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "Which theaters in Mountain View show Barbie movie?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ]
}'
    

Die Antwort auf dieses Curl-Beispiel sieht in etwa so aus:

curl-Beispielantwort für Einzelrunden-Funktionsaufruf

[{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_theaters",
              "args": {
                "movie": "Barbie",
                "location": "Mountain View, CA"
              }
            }
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 9,
    "totalTokenCount": 9
  }
}]
    

Beispiel für eine einzelne Abbiegung mit dem Modus „JEDER“

Das folgende curl-Beispiel ähnelt dem Beispiel für eine einzelne Kurve, bei dem jedoch der Modus auf ANY festgelegt wird:

"tool_config": {
  "function_calling_config": {
    "mode": "ANY"
  },
}

Einzelrunden-Funktionsaufruf mit ANY-Modus (Anfrage)

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "What movies are showing in North Seattle tonight?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ],
  "tool_config": {
    "function_calling_config": {
      "mode": "ANY"
    },
  }
}'
    

Die Antwort sieht etwa so aus:

Einzelrunden-Funktionsaufruf mit ANY-Modus (Antwort)

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_movies",
              "args": {
                "description": "",
                "location": "North Seattle, WA"
              }
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
}
    

Beispiel für eine einzelne Wendung mit dem Modus „ANY“ und zulässigen Funktionen

Das folgende curl-Beispiel ähnelt dem Beispiel für eine einzelne Abbiegung, setzt aber den Modus auf ANY und enthält eine Liste der zulässigen Funktionen:

"tool_config": {
  "function_calling_config": {
    "mode": "ANY",
    "allowed_function_names": ["find_theaters", "get_showtimes"]
  },
}

Einzelrunden-Funktionsaufruf mit ANY-Modus und zulässigen Funktionen (Anfrage)

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "What movies are showing in North Seattle tonight?"
    }
  },
  "tools": [
    {
      "function_declarations": [
        {
          "name": "find_movies",
          "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "description": {
                "type": "string",
                "description": "Any kind of description including category or genre, title words, attributes, etc."
              }
            },
            "required": [
              "description"
            ]
          }
        },
        {
          "name": "find_theaters",
          "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              }
            },
            "required": [
              "location"
            ]
          }
        },
        {
          "name": "get_showtimes",
          "description": "Find the start times for movies playing in a specific theater",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
              },
              "movie": {
                "type": "string",
                "description": "Any movie title"
              },
              "theater": {
                "type": "string",
                "description": "Name of the theater"
              },
              "date": {
                "type": "string",
                "description": "Date for requested showtime"
              }
            },
            "required": [
              "location",
              "movie",
              "theater",
              "date"
            ]
          }
        }
      ]
    }
  ],
  "tool_config": {
    "function_calling_config": {
      "mode": "ANY",
      "allowed_function_names": ["find_theaters", "get_showtimes"]
    },
  }
}'
    

Das Modell kann die Funktion find_movies nicht vorhersagen, da sie nicht in der Liste der zulässigen Funktionen enthalten ist. Stattdessen wird eine andere Funktion vorhergesagt. Die Antwort könnte so aussehen:

Einzelrunden-Funktionsaufruf mit dem Modus „ANY“ und zulässigen Funktionen (Antwort)

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_theaters",
              "args": {
                "location": "North Seattle, WA",
                "movie": null
              }
            }
          }
        ],
        "role": "model"
      },
      "finishReason": "STOP",
      "index": 0,
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "promptFeedback": {
    "safetyRatings": [
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "probability": "NEGLIGIBLE"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "probability": "NEGLIGIBLE"
      }
    ]
  }
}
    

Beispiele für Unterhaltungen über mehrere Themen

So implementieren Sie ein Szenario für den Funktionsaufruf in mehreren Runden:

  1. Rufen Sie das Sprachmodell auf, um eine Antwort auf einen Funktionsaufruf zu erhalten. Dies ist die erste Kurve.
  2. Rufen Sie das Sprachmodell mit der Funktionsaufrufantwort aus dem ersten Zug und der Funktionsantwort auf, die Sie durch Aufrufen dieser Funktion erhalten. Dies ist die zweite Kurve.

Die Antwort in der zweiten Runde fasst entweder die Ergebnisse zusammen, um Ihre Abfrage in der ersten Runde zu beantworten, oder enthält einen zweiten Funktionsaufruf, mit dem Sie weitere Informationen zu Ihrer Abfrage abrufen können.

Dieses Thema enthält zwei Beispiele für Curl-Aufrufe mit mehreren Zeilen:

Antwort aus einer vorherigen Runde verwenden

Im folgenden curl-Beispiel werden die Funktion und die Argumente aufgerufen, die vom vorherigen Beispiel für eine einzelne Runde zurückgegeben wurden, um eine Antwort zu erhalten. Die Methode und die Parameter, die vom Beispiel für eine einzelne Wendung zurückgegeben werden, sind in diesem JSON-Objekt enthalten.

"functionCall": {
  "name": "find_theaters",
  "args": {
    "movie": "Barbie",
    "location": "Mountain View, CA"
  }
}

curl-Beispielanfrage für Funktionsaufruf in mehreren Runden

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Which theaters in Mountain View show Barbie movie?"
    }]
  }, {
    "role": "model",
    "parts": [{
      "functionCall": {
        "name": "find_theaters",
        "args": {
          "location": "Mountain View, CA",
          "movie": "Barbie"
        }
      }
    }]
  }, {
    "role": "user",
    "parts": [{
      "functionResponse": {
        "name": "find_theaters",
        "response": {
          "name": "find_theaters",
          "content": {
            "movie": "Barbie",
            "theaters": [{
              "name": "AMC Mountain View 16",
              "address": "2000 W El Camino Real, Mountain View, CA 94040"
            }, {
              "name": "Regal Edwards 14",
              "address": "245 Castro St, Mountain View, CA 94040"
            }]
          }
        }
      }
    }]
  }],
  "tools": [{
    "functionDeclarations": [{
      "name": "find_movies",
      "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "description": {
            "type": "STRING",
            "description": "Any kind of description including category or genre, title words, attributes, etc."
          }
        },
        "required": ["description"]
      }
    }, {
      "name": "find_theaters",
      "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          }
        },
        "required": ["location"]
      }
    }, {
      "name": "get_showtimes",
      "description": "Find the start times for movies playing in a specific theater",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          },
          "theater": {
            "type": "STRING",
            "description": "Name of the theater"
          },
          "date": {
            "type": "STRING",
            "description": "Date for requested showtime"
          }
        },
        "required": ["location", "movie", "theater", "date"]
      }
    }]
  }]
}'
    

Die Antwort auf dieses curl-Beispiel enthält das Ergebnis des Aufrufs der Methode find_theaters. Die Antwort sieht etwa so aus:

curl-Beispielantwort für Funktionsaufruf in mehreren Runden

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": " OK. Barbie is showing in two theaters in Mountain View, CA: AMC Mountain View 16 and Regal Edwards 14."
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 9,
    "candidatesTokenCount": 27,
    "totalTokenCount": 36
  }
}
    

Modell mehrmals aufrufen

Im folgenden cURL-Beispiel wird das generative KI-Modell mehrmals aufgerufen, um eine Funktion aufzurufen. Jedes Mal, wenn das Modell die Funktion aufruft, kann es eine andere Funktion verwenden, um eine andere Nutzerabfrage in der Anfrage zu beantworten.

curl-Beispielanfrage für Funktionsaufruf in mehreren Runden

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=$API_KEY \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Which theaters in Mountain View show Barbie movie?"
    }]
  }, {
    "role": "model",
    "parts": [{
      "functionCall": {
        "name": "find_theaters",
        "args": {
          "location": "Mountain View, CA",
          "movie": "Barbie"
        }
      }
    }]
  }, {
    "role": "user",
    "parts": [{
      "functionResponse": {
        "name": "find_theaters",
        "response": {
          "name": "find_theaters",
          "content": {
            "movie": "Barbie",
            "theaters": [{
              "name": "AMC Mountain View 16",
              "address": "2000 W El Camino Real, Mountain View, CA 94040"
            }, {
              "name": "Regal Edwards 14",
              "address": "245 Castro St, Mountain View, CA 94040"
            }]
          }
        }
      }
    }]
  },
  {
    "role": "model",
    "parts": [{
      "text": " OK. Barbie is showing in two theaters in Mountain View, CA: AMC Mountain View 16 and Regal Edwards 14."
    }]
  },{
    "role": "user",
    "parts": [{
      "text": "Can we recommend some comedy movies on show in Mountain View?"
    }]
  }],
  "tools": [{
    "functionDeclarations": [{
      "name": "find_movies",
      "description": "find movie titles currently playing in theaters based on any description, genre, title words, etc.",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "description": {
            "type": "STRING",
            "description": "Any kind of description including category or genre, title words, attributes, etc."
          }
        },
        "required": ["description"]
      }
    }, {
      "name": "find_theaters",
      "description": "find theaters based on location and optionally movie title which is currently playing in theaters",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          }
        },
        "required": ["location"]
      }
    }, {
      "name": "get_showtimes",
      "description": "Find the start times for movies playing in a specific theater",
      "parameters": {
        "type": "OBJECT",
        "properties": {
          "location": {
            "type": "STRING",
            "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"
          },
          "movie": {
            "type": "STRING",
            "description": "Any movie title"
          },
          "theater": {
            "type": "STRING",
            "description": "Name of the theater"
          },
          "date": {
            "type": "STRING",
            "description": "Date for requested showtime"
          }
        },
        "required": ["location", "movie", "theater", "date"]
      }
    }]
  }]
}'
    

curl-Beispielantwort für Funktionsaufruf in mehreren Runden

[{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "functionCall": {
              "name": "find_movies",
              "args": {
                "description": "comedy",
                "location": "Mountain View, CA"
              }
            }
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE"
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "NEGLIGIBLE"
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 48,
    "totalTokenCount": 48
  }
}
]
    

Best Practices

Mit den folgenden Best Practices können Sie die Genauigkeit und Zuverlässigkeit Ihrer Funktionsaufrufe verbessern.

Nutzer-Prompt

Für optimale Ergebnisse fügen Sie der Nutzerabfrage die folgenden Details hinzu:

  • Zusätzlicher Kontext für das Modell. Beispiel: You are a movie API assistant to help users find movies and showtimes based on their preferences.
  • Details oder Anleitungen zur Verwendung der Funktionen. Beispiel: Don't make assumptions on showtimes. Always use a future date for showtimes..
  • Eine Anleitung, um klärende Fragen zu stellen, wenn Nutzerabfragen mehrdeutig sind. Beispiel: Ask clarifying questions if not enough information is available to complete the request.

Stichprobenparameter

Verwenden Sie für den Temperaturparameter 0 oder einen anderen niedrigen Wert. Dadurch wird das Modell angewiesen, zuverlässigere Ergebnisse zu generieren, und Halluzinationen werden reduziert.

API-Aufruf

Wenn das Modell den Aufruf einer Funktion vorschlägt, die eine Bestellung senden, eine Datenbank aktualisieren oder anderweitig erhebliche Konsequenzen haben würde, validieren Sie den Funktionsaufruf vor der Ausführung mit dem Nutzer.