Puedes proporcionar funciones personalizadas a un modelo generativo de IA con la API de llamada a función. El modelo no invoca estas funciones directamente, sino que genera un resultado de datos estructurados que especifica el nombre de la función y los argumentos sugeridos. Este resultado permite llamar a API externas o sistemas de información como bases de datos, sistemas de administración de relaciones con clientes y repositorios de documentos. El LLM puede usar el resultado de la API para mejorar la calidad de la respuesta.
Modelos compatibles:
- Gemini 1.0 Pro
- gemini-1.0-pro
- gemini-1.0-pro-001
- gemini-1.0-pro-002
- Gemini 1.5 Pro
- gemini-1.5-pro-preview-0409
Limitaciones:
- La cantidad máxima de funciones que se pueden proporcionar es 64.
FunctionCallingConfig
está en vista previa y solo está disponible para "gemini-1.5-pro-preview-0409".
Sintaxis
- PROJECT_ID =
PROJECT_ID
- REGION =
REGION
- MODEL_ID =
MODEL_ID
curl
https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/publishers/google/models/${MODEL_ID}:generateContent \ -d '{ "contents": [{ ... }], "tools": [{ "function_declarations": [ { ... } ] }] }'
Python
gemini_model = GenerativeModel( MODEL_ID, generation_config=generation_config, tools=[ Tool( function_declarations=[ FunctionDeclaration( ... ) ] ) ], )
Lista de parámetros
FunctionDeclaration
Una representación estructurada de una declaración de función según lo definido por la especificación de OpenAPI 3.0 que representa una función para la que el modelo puede generar entradas JSON.
Parámetros | |
---|---|
|
El nombre de la función a la que se llamará. |
|
Opcional: Descripción y propósito de la función |
|
Opcional: Describe los parámetros para esta función en el formato de objeto de esquema JSON de OpenAPI: especificación de OpenAPI 3.0 |
|
Opcional: Describe el resultado de esta función en formato de esquema JSON. |
FunctionCallingConfig [Vista previa]
Esta es una configuración adicional para usar la función de llamada a función que solo está disponible para “gemini-1.5-pro-preview-0409”.
Parámetros | |
---|---|
|
Opcional:
Cuando se configura |
|
Opcional: Nombres de las funciones a llamar. Solo se establece cuando |
Esquema
El esquema se usa para definir el formato de los datos de entrada y salida en una llamada a función. Una representación estructurada de una declaración de función según lo definido en la especificación del esquema de OpenAPI 3.0.
Parámetros | |
---|---|
Tipo |
Enum. El tipo de datos. Debe ser uno de los siguientes:
|
description |
Opcional: Descripción de los datos. |
enum |
Opcional: Valores posibles del elemento de |
items |
Opcional: Esquema de los elementos de |
properties |
Opcional: Esquema de las propiedades de |
required |
Opcional: Propiedades obligatorias de |
nullable |
Opcional: Indica si el valor puede ser |
Ejemplos
- PROJECT_ID =
PROJECT_ID
- REGION =
REGION
- MODEL_ID =
MODEL_ID
Caso de uso básico
A continuación, se muestra un ejemplo de cómo puedes enviar una consulta y declaraciones de funciones al modelo.
curl
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/publishers/google/models/${MODEL_ID}:generateContent \ -d '{ "contents": [{ "role": "user", "parts": [{ "text": "What is the weather in Boston?" }] }], "tools": [{ "function_declarations": [ { "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616" } }, "required": [ "location" ] } } ] }] }'
Python
import vertexai from vertexai.generative_models import ( FunctionDeclaration, GenerativeModel, GenerationConfig, Part, Tool, ) vertexai.init(project=PROJECT_ID, location=REGION) # Specify a function declaration and parameters for an API request get_current_weather_func = FunctionDeclaration( name="get_current_weather", description="Get the current weather in a given location", # Function parameters are specified in OpenAPI JSON schema format parameters={ "type": "object", "properties": {"location": {"type": "string", "description": "The city and state, e.g. San Francisco, CA or a zip code e.g. 95616"}}, }, ) # Define a tool that includes the above get_current_weather_func weather_tool = Tool( function_declarations=[get_current_weather_func], ) gemini_model = GenerativeModel( MODEL_ID, generation_config={"temperature": 0}, tools=[weather_tool] ) model_response = gemini_model.generate_content("What is the weather in Boston?") print(model_response)
Caso de uso avanzado
En el siguiente ejemplo, se muestra cómo pasar la configuración de generación y la configuración de la herramienta al modelo. La configuración de llamadas a función se puede usar para garantizar que el resultado del modelo sea siempre una llamada a función específica. Para lograrlo, configura el modo de llamada a función en ANY
y especifica los nombres de funciones permitidas en el parámetro allowed_function_names
. Cuando allowed_function_names
está vacío, se puede mostrar cualquiera de las funciones proporcionadas.
- MODEL_ID =
gemini-1.5-pro-preview-0409
curl
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${REGION}/publishers/google/models/${MODEL_ID}:generateContent \ -d '{ "contents": [{ "role": "user", "parts": [{ "text": "Do you have the White Pixel 8 Pro 128GB in stock in the US?" }] }], "tools": [{ "function_declarations": [ { "name": "get_product_sku", "description": "Get the available inventory for a Google products, e.g: Pixel phones, Pixel Watches, Google Home etc", "parameters": { "type": "object", "properties": { "product_name": {"type": "string", "description": "Product name"} } } }, { "name": "get_store_location", "description": "Get the location of the closest store", "parameters": { "type": "object", "properties": {"location": {"type": "string", "description": "Location"}}, } } ] }], "tool_config": { "function_calling_config": { "mode":"ANY", "allowed_function_names": ["get_product_sku"] } }, "generationConfig": { "temperature": 0.95, "topP": 1.0, "maxOutputTokens": 8192 } }'
Python
import vertexai from vertexai.generative_models import ( FunctionDeclaration, GenerativeModel, GenerationConfig, Part, Tool, ToolConfig, ) vertexai.init(project=PROJECT_ID, location=REGION) # Specify a function declaration and parameters for an API request get_product_info_func = FunctionDeclaration( name="get_product_sku", description="Get the available inventory for a Google products, e.g: Pixel phones, Pixel Watches, Google Home etc", # Function parameters are specified in OpenAPI JSON schema format parameters={ "type": "object", "properties": { "product_name": {"type": "string", "description": "Product name"} }, }, ) # Specify another function declaration and parameters for an API request get_store_location_func = FunctionDeclaration( name="get_store_location", description="Get the location of the closest store", # Function parameters are specified in OpenAPI JSON schema format parameters={ "type": "object", "properties": {"location": {"type": "string", "description": "Location"}}, }, ) # Define a tool that includes the above functions retail_tool = Tool( function_declarations=[ get_product_info_func, get_store_location_func, ], ) # Define a tool config for the above functions retail_tool_config = ToolConfig( function_calling_config=ToolConfig.FunctionCallingConfig( # ANY mode forces the model to predict a function call mode=ToolConfig.FunctionCallingConfig.Mode.ANY, # List of functions that can be returned when the mode is ANY. # If the list is empty, any declared function can be returned. allowed_function_names=["get_product_sku"], ) ) generation_config = GenerationConfig( temperature=0.95, top_p=1.0, max_output_tokens=8192 ) gemini_model = GenerativeModel( MODEL_ID, generation_config=generation_config, tools=[retail_tool], tool_config=retail_tool_config, ) model_response = gemini_model.generate_content( "Do you have the White Pixel 8 Pro 128GB in stock in the US?" ) print(model_response)
Explora más
Para obtener documentación detallada, consulta lo siguiente: