Las llamadas a función facilitan la obtención de resultados de datos estructurados desde generativos. Luego, puedes usar estos resultados para llamar a otras APIs y mostrar los datos de respuesta relevantes para el modelo. En otras palabras, las llamadas a función te ayudan a conectar modelos generativos a sistemas externos para que el contenido generado incluya la información más actualizada y precisa.
Puedes proporcionarles descripciones de funciones a los modelos de Gemini. Son funciones que escribes en el lenguaje de tu app (es decir, Google Cloud Functions). Es posible que el modelo te solicite que llames a una función y le envíes el resultado para ayudarlo a controlar tu consulta.
Si aún no lo has hecho, consulta la Introducción a la llamada a función para aprender más.
Ejemplo de API para el control de iluminación
Imagina que tienes un sistema de control de iluminación básico con una aplicación (API), y quieres permitir que los usuarios controlen las luces mediante solicitudes de texto. Puedes usar la función Llamadas a función para interpretar la iluminación de los usuarios y convertirlas en llamadas a la API para establecer la iluminación de salida. Este hipotético sistema de control de iluminación te permite controlar la el brillo de la luz y su temperatura de color, que se definen como dos parámetros:
Parámetro | Tipo | Obligatorio | Descripción |
---|---|---|---|
brightness |
número | sí | Nivel de luz de 0 a 100. Cero es la opción de apagado y 100 es el brillo máximo. |
colorTemperature |
string | sí | Temperatura de color de la lámpara, que puede ser daylight , cool o warm . |
Para simplificar, este sistema de iluminación imaginario solo tiene una luz, por lo que el usuario no necesita especificar una sala o ubicación. Este es un ejemplo de una solicitud JSON podrías enviar a la API de control de iluminación para cambiar el nivel de luz al 50% usando la temperatura de color de la luz diurna:
{
"brightness": "50",
"colorTemperature": "daylight"
}
En este instructivo, se muestra cómo configurar una llamada a función para que la API de Gemini haga lo siguiente: interpretar las solicitudes de iluminación de los usuarios y asignarlas a la configuración de la API para controlar un el brillo de la luz y los valores de temperatura de color.
Antes de comenzar: Configura tu proyecto y clave de API
Antes de llamar a la API de Gemini, debes configurar tu proyecto y tu clave de API.
Define una función de API
Crea una función que realice una solicitud a la API. Esta función debe definirse en el código de tu aplicación, pero podrían llamar a servicios o APIs fuera de tu aplicación. La API de Gemini no llama a esta función directamente, por lo que puedes controlar cómo y cuándo se ejecuta esta función a través de tu aplicación código. A modo de demostración, este instructivo define una función de API simulada que solo muestra los valores de iluminación solicitados:
suspend fun setLightValues(
brightness: Int,
colorTemp: String
): JSONObject {
// This mock API returns the requested lighting values
return JSONObject().apply {
put("brightness", brightness)
put("colorTemperature", colorTemp)
}
}
Crea declaraciones de función
Crea la declaración de función que pasarás al modelo generativo. Cuándo declaras una función para que la use el modelo, debes incluir tantos detalles como sea posible en las descripciones de las funciones y los parámetros. El modelo generativo usa esta información para determinar qué función seleccionar y cómo proporcionar de salida para los parámetros en la llamada a función. El siguiente código muestra cómo Declara la función de control de la iluminación:
val lightControlTool = defineFunction(
name = "setLightValues",
description = "Set the brightness and color temperature of a room light.",
Schema.int("brightness", "Light level from 0 to 100. Zero is off and 100" +
" is full brightness."),
Schema.str("colorTemperature", "Color temperature of the light fixture" +
" which can be `daylight`, `cool` or `warm`.")
) { brightness, colorTemp ->
// Call the function you declared above
setLightValues(brightness.toInt(), colorTemp)
}
Declara funciones durante la inicialización del modelo
Cuando quieras usar llamadas a función con un modelo, debes proporcionar tus
declaraciones de función cuando inicialices el objeto del modelo. Declaras funciones
estableciendo el parámetro tools
del modelo:
val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
// Access your API key as a Build Configuration variable
apiKey = BuildConfig.apiKey,
// Specify the function declaration.
tools = listOf(Tool(listOf(lightControlTool)))
)
Genera una llamada a función
Una vez que hayas inicializado el modelo con las declaraciones de tu función, puedes indicar
al modelo con la función definida. Debes usar las llamadas a función con instrucciones de chat (sendMessage()
), ya que las llamadas a función suelen beneficiarse de tener el contexto de las instrucciones y respuestas anteriores.
val chat = generativeModel.startChat()
val prompt = "Dim the lights so the room feels cozy and warm."
// Send the message to the generative model
var response = chat.sendMessage(prompt)
// Check if the model responded with a function call
response.functionCall?.let { functionCall ->
// Try to retrieve the stored lambda from the model's tools and
// throw an exception if the returned function was not declared
val matchedFunction = generativeModel.tools?.flatMap { it.functionDeclarations }
?.first { it.name == functionCall.name }
?: throw InvalidStateException("Function not found: ${functionCall.name}")
// Call the lambda retrieved above
val apiResponse: JSONObject = matchedFunction.execute(functionCall)
// Send the API response back to the generative model
// so that it generates a text response that can be displayed to the user
response = chat.sendMessage(
content(role = "function") {
part(FunctionResponsePart(functionCall.name, apiResponse))
}
)
}
// Whenever the model responds with text, show it in the UI
response.text?.let { modelResponse ->
println(modelResponse)
}