Funktionsaufruf

Mithilfe von Funktionsaufrufen können benutzerdefinierte Funktionen definiert und für ein Generative-AI-Modell bereitgestellt werden. Das Modell ruft diese Funktionen nicht direkt auf, sondern generiert eine Ausgabe strukturierter Daten, in der der Funktionsname und vorgeschlagene Argumente angegeben werden. Diese Ausgabe ermöglicht das Aufrufen externer APIs. Die resultierende API-Ausgabe kann dann wieder in das Modell integriert werden, was umfassendere Abfrageantworten ermöglicht. Durch Funktionsaufrufe können LLMs mit Echtzeitinformationen und verschiedenen Diensten wie Datenbanken, Customer-Relationship-Management-Systemen und Dokumenten-Repositories interagieren und so relevantere und kontextbezogene Antworten bereitstellen.

Funktionsweise von Funktionsaufrufen

Funktionen werden mithilfe von Funktionsdeklarationen beschrieben. Nachdem Sie eine Liste von Funktionsdeklarationen in einer Abfrage an ein Sprachmodell übergeben haben, gibt das Modell ein Objekt in einem OpenAPI-kompatiblen Schema zurück, das die Namen der Funktionen und deren Argumente enthält, und versucht, die Nutzerabfrage mit einer der zurückgegebenen Funktionen zu beantworten. Das Language Model versteht den Zweck einer Funktion, indem es ihre Funktionsdeklaration analysiert. Das Modell ruft die Funktion nicht tatsächlich auf. Stattdessen verwendet ein Entwickler in der Antwort das OpenAPI-kompatible Schemaobjekt, um die vom Modell zurückgegebene Funktion aufzurufen.

Wenn Sie Funktionsaufrufe implementieren, erstellen Sie eine oder mehrere Funktionsdeklarationen und fügen die Funktionsdeklarationen dann einem tools-Objekt hinzu, das an das Modell übergeben wird. Jede Funktionsdeklaration enthält Informationen zu einer Funktion, darunter:

  • Funktionsname
  • Funktionsparameter in einem OpenAPI-kompatiblen Schema. Eine ausgewählte Teilmenge wird unterstützt. Bei Verwendung von curl wird das Schema in JSON angegeben.
  • Funktionsbeschreibung (optional). Die besten Ergebnisse erzielen Sie, wenn Sie eine Beschreibung hinzufügen.

Dieses Dokument enthält curl-Beispiele, die REST-Aufrufe mit der Klasse GenerativeModel und ihren Methoden ausführen.

Unterstützte Modelle

Die folgenden Modelle unterstützen Funktionsaufrufe:

  • gemini-1.0-pro
  • gemini-1.0-pro-001
  • gemini-1.5-pro-latest

Modus für Funktionsaufruf

Mit der Funktion, die mode aufruft, können Sie das Ausführungsverhalten für Funktionsaufrufe definieren. Es gibt drei Modi:

  • AUTO: Das Standardverhalten des Modells. Das Modell entscheidet sich, entweder einen Funktionsaufruf oder eine Antwort in natürlicher Sprache vorherzusagen.
  • ANY: Das Modell ist darauf beschränkt, einen Funktionsaufruf immer vorherzusagen. Ist allowed_function_names nicht angegeben, wählt das Modell aus allen verfügbaren Funktionsdeklarationen aus. Wenn allowed_function_names dargestellt ist, wählt das Modell aus den zulässigen Funktionen aus.
  • NONE: Das Modell sagt keinen Funktionsaufruf vorher. In diesem Fall verhält sich das Modell genauso, als würden Sie keine Funktionsdeklarationen übergeben.

Sie können auch einen Satz von allowed_function_names übergeben, der die Funktionen einschränkt, die das Modell aufrufen wird. Sie sollten allowed_function_names nur dann einfügen, wenn der Modus ANY ist. Funktionsnamen sollten den Namen der Funktionsdeklarationen entsprechen. Wenn der Modus auf ANY und allowed_function_names festgelegt ist, sagt das Modell einen Funktionsaufruf aus den bereitgestellten Funktionsnamen vorher.

Hier sehen Sie einen Teil einer Beispielanfrage, in der der Modus auf ANY festgelegt und eine Liste der zulässigen Funktionen angegeben wird:

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

Funktion zum Aufrufen von cURL-Beispielen

Wenn Sie cURL verwenden, sind die Funktions- und Parameterinformationen im tools-Element enthalten. Jede Funktionsdeklaration im tools-Element enthält den Funktionsnamen, die mit dem OpenAPI-kompatiblen Schema angegebenen Parameter und eine Funktionsbeschreibung. Die folgenden Beispiele zeigen, wie curl-Befehle mit Funktionsaufrufen verwendet werden:

curl-Beispiel für eine einzelne Runde

Dabei wird das Sprachmodell 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 und mit welchen Argumenten sie aufgerufen werden soll.

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.

curl-Beispielanfrage für Einzelrunden-Funktionsaufruf

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 könnte der folgenden ähneln.

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 mit einer einzelnen Antwort im ANY-Modus

Das folgende curl-Beispiel ähnelt dem Beispiel mit einer einzelnen Antwort, legt jedoch den Modus auf ANY fest:

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

Aufruffunktion mit einer einzigen Antwort im 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:

Aufruffunktion in einer einzigen Antwort 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 mit einer einzelnen Antwort unter Verwendung des ANY-Modus und zulässigen Funktionen

Das folgende curl-Beispiel ähnelt dem Beispiel mit einer einzelnen Antwort, legt jedoch den mode auf ANY fest und enthält eine Liste der zulässigen Funktionen:

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

Aufruf von Funktion in einer einzelnen Antwort mit dem 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. Daher wird stattdessen eine andere Funktion vorhergesagt. Die Antwort könnte in etwa so aussehen:

Aufruf von Funktion in einer einzigen Antwort unter Verwendung des ANY-Modus und erlaubten 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 curl (mit mehreren Umdrehungen)

Sie können ein Szenario zum Aufrufen einer Funktion mit mehreren Schritten implementieren, indem Sie Folgendes tun:

  1. Rufen Sie durch Aufrufen des Language Model eine Antwort auf einen Funktionsaufruf ab. Das ist der erste Schritt.
  2. Rufen Sie das Language Model mit der Funktionsaufrufantwort aus der ersten Runde und der Funktionsantwort auf, die Sie durch den Aufruf dieser Funktion erhalten. Das ist der zweite Schritt.

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 für mehrere Schritte:

Curl-Beispiel, das eine Antwort aus einer vorherigen Runde verwendet

Im folgenden curl-Beispiel werden die Funktion und die Argumente aufgerufen, die im vorherigen Beispiel mit einer einzigen Antwort zurückgegeben wurden, um eine Antwort zu erhalten. Die Methode und die Parameter, die vom Beispiel mit einer einzigen Antwort zurückgegeben werden, befinden sich in dieser JSON-Datei.

"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": "function",
    "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
  }
}
    

Curl-Beispiel, bei dem ein Sprachmodell mehrmals aufgerufen wird

Im folgenden curl-Beispiel wird das Sprachmodell 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": "function",
    "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 zu verbessern.

Funktionsschlüsselfelder

Es ist wichtig, dass Sie Funktionen korrekt definieren, wenn Sie sie in Ihre Anfragen einbinden. Jede Funktion stützt sich auf bestimmte Parameter, die ihr Verhalten und ihre Interaktion mit dem Modell steuern. Hier sehen Sie eine Übersicht der wichtigsten Parameter, die im functions_declarations-Array verwendet werden.

function_declarations (Array):

  • Enthält ein oder mehrere Objekte, die jeweils eine eigene Funktion darstellen.

In jedem function_declarations-Objekt gilt Folgendes:

  • name (String): Die eindeutige Kennung für die Funktion im API-Aufruf.
    • Best Practice: Verwenden Sie eindeutige, beschreibende Namen ohne Leerzeichen, Punkte (.) oder Bindestriche (-). Verwenden Sie stattdessen Unterstriche (_) oder die Camel-Case-Schreibweise.
  • description (String): Eine umfassende Erklärung des Zwecks und der Funktionen der Funktion.
    • Best Practice: Formulieren Sie die Funktionsbeschreibungen detailliert, klar und spezifisch und geben Sie bei Bedarf Beispiele an. 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.
  • parameters (Objekt): Definiert die von der Funktion erforderlichen Eingabedaten.
    • type (String): Gibt den gesamten Datentyp an (z.B. object).
    • properties (Objekt):
      • Listet einzelne Parameter mit jeweils folgenden Werten auf:
        • type (String): Der Datentyp des Parameters (z.B. string, integer, boolean).
          • Best Practice: Verwenden Sie stark typisierte Parameter, um Modell-Halluzinationen zu reduzieren. Wenn die Parameterwerte beispielsweise aus einem endlichen Satz 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, legen Sie den Typ auf integer statt auf number fest.
        • description (String): Eine klare Erklärung des Zwecks des Parameters und des erwarteten Formats.
          • Best Practice: 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.
    • required (Array):
      • Ein Array von Strings mit den Parameternamen, die für die Ausführung der Funktion erforderlich sind.

Nutzer-Prompt

Um optimale Ergebnisse zu erzielen, stellen Sie der Nutzerabfrage die folgenden Informationen voran:

  • 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.
  • Anleitungen zum Stellen klärender Fragen, wenn Nutzeranfragen 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. Dies weist das Modell an, zuverlässigere Ergebnisse zu generieren, und reduziert Halluzinationen.

API-Aufruf

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