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, generiert stattdessen eine strukturierte Ausgabe, in der ein Funktionsname angegeben und Vorschläge für Argumente. Sie können dann den Funktionsnamen und die Argumente verwenden, um eine externe API und können die resultierende API-Ausgabe in eine weitere Abfrage um eine umfassendere Antwort zu geben und zusätzliche Aktionen.

Funktionsaufrufe ermöglichen es Nutzenden, mit Informationen in Echtzeit zu interagieren Datenbanken, Customer-Relationship-Management-Systeme und Repositories. Die Funktion verbessert außerdem die Fähigkeit des Modells, relevante und kontextbezogene Antworten. 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. Nach bestandener Prüfung einer Liste von Funktionsdeklarationen in einer Abfrage an das Modell, und der restlichen Abfrage, um zu bestimmen, wie die deklarierten die API als Antwort auf die Anfrage verwendet.

Das Modell gibt dann ein Objekt OpenAPI-kompatibles Schema Gibt an, wie eine oder mehrere der deklarierten Funktionen aufgerufen werden, um eine Antwort zu erhalten auf die Frage der Nutzenden. Sie können dann den empfohlenen Funktionsaufruf Parameter verwenden, die eigentliche API aufrufen, eine Antwort erhalten und diese Antwort an oder weitere Maßnahmen ergreifen. Beachten Sie, dass das Modell die Methode deklarierten Funktionen. Stattdessen verwenden Sie die zurückgegebenen Schemaobjektparameter, die Funktion aufrufen. Die Gemini API unterstützt auch parallele Funktionsaufrufe, bei denen empfiehlt das Modell mehrere API-Funktionsaufrufe.

Funktionsdeklarationen

Wenn Sie Funktionsaufrufe in einer Eingabeaufforderung implementieren, erstellen Sie ein tools-Objekt. die 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 der Zweck und Fähigkeiten.
  • parameters (Objekt): Definiert die Eingabedaten, die für die Funktion erforderlich sind.
    • 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

Funktionen genau zu definieren, wenn Sie sie in Ihre -Anfragen. Jede Funktion stützt sich auf bestimmte Parameter, die ihr Verhalten steuern. und Interaktion mit dem Modell. Im folgenden Codebeispiel wird beschrieben, wie die Parameter einer einzelnen Funktion in einem functions_declarations-Array definiert werden.

  • name: Verwenden Sie eindeutige, aussagekräftige Namen ohne Leerzeichen, Punkte (.) oder Bindestriche (-). Verwenden Sie stattdessen Unterstriche (_) oder Camel Case.

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

  • properties > type: Verwenden Sie stark typisierte Parameter, um KI-Halluzinationen verwenden. Stammen die Parameterwerte z. B. aus einem endlichen festgelegt ist, 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 bei der Verwendung von Funktionsaufrufen finden Sie in der 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 aus allen verfügbaren Funktionsdeklarationen. Wenn allowed_function_names vorhanden ist, gilt Folgendes: das Modell aus der Gruppe zulässiger Funktionen auswählt.
  • NONE: Das Modell prognostiziert keinen Funktionsaufruf. In diesem Fall hat das Modell wie wenn keine Funktionsdeklarationen übergeben werden.

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 vom Modell aufgerufenen Funktionen einschränken. Sie sollten nur allowed_function_names, wenn der Modus ANY ist. Funktionsnamen müssen übereinstimmen Funktionsdeklarationen. 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 Funktionsaufrufe 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 in der Das tools-Element enthält den Funktionsnamen und Sie geben die Parameter mit ein OpenAPI-kompatibles Schema, und eine Funktionsbeschreibung.

Beispiel für eine einzelne Runde

Im Single-Turn rufst du das Sprachmodell einmal auf. 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 Funktion -Deklaration, die den Funktionsnamen, die Parameter und die Beschreibung enthält, sagen, welche Funktion aufgerufen und welche Argumente dafür verwendet werden sollen.

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. Mehrere In der Anfrage sind Funktionsdeklarationen enthalten, 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 mit einer einzigen Antwort, legt jedoch Folgendes fest: den mode auf ANY:

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

Einzelrunden-Funktionsaufruf mit beliebigem 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"]
  },
}

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 find_movies-Funktion nicht vorhersagen, da sie nicht in der Liste steht und sagt stattdessen eine andere Funktion voraus. 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 mit mehreren Schritten

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

  1. Rufen Sie eine Antwort auf einen Funktionsaufruf ab, indem Sie das Sprachmodell aufrufen. Das ist die erste Kurve.
  2. Rufen Sie das Sprachmodell mit der Antwort des Funktionsaufrufs aus der ersten Runde auf. und die Funktionsantwort, die Sie durch den Aufruf 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 curl-Beispiele mit mehreren Schritten:

Eine Antwort aus einer früheren Runde verwenden

Im folgenden curl-Beispiel werden die Funktion und die Argumente aufgerufen, die vom aus dem vorherigen Beispiel mit einer einzigen Antwort, 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-AI-Modell mehrmals aufgerufen, eine Funktion. 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

Befolgen Sie diese Best Practices, um die Genauigkeit und Zuverlässigkeit Ihrer Funktionsaufrufe.

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. Für 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. Damit weisen Sie um zuverlässigere Ergebnisse zu liefern und KI-Halluzinationen zu vermeiden.

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.