Llamada a funciones en Azure Databricks
Importante
Esta característica se encuentra en versión preliminar pública y se admite en las API de Foundation Model de pago por token o puntos de conexión de rendimiento aprovisionados.
En este artículo se describe la llamada a funciones y cómo usarla como parte de los flujos de trabajo de una aplicación de IA generativa. La llamada a funciones de Databricks es compatible con OpenAI y solo está disponible durante el servicio de modelos como parte de las API de Foundation Model.
Qué es la llamada a funciones
La llamada a funciones proporciona una manera de controlar la salida de los modelos grandes de lenguaje (LLM), de forma que generen respuestas estructuradas de forma más confiable. Al usar una llamada a funciones, se describen las funciones en la llamada a la API especificando los argumentos de la función mediante un esquema JSON. El propio LLM no llama a estas funciones, sino que crea un objeto JSON que los usuarios pueden usar para llamar a las funciones en su código.
En el caso de las llamadas a funciones en Databricks, la secuencia básica de pasos es la siguiente:
- Llamada al modelo mediante la consulta enviada y un conjunto de funciones definidas en el parámetro
tools
. - El modelo decide si se debe llamar a las funciones definidas o no. Cuando se llama a la función, el contenido es un objeto JSON de cadenas que se adhiere al esquema personalizado.
- Análisis de las cadenas en JSON en el código y llamada a la función con los argumentos proporcionados, si existen.
- Nueva llamada al modelo anexando la respuesta estructurada como un nuevo mensaje. La estructura de la respuesta se define mediante las funciones proporcionadas anteriormente en
tools
. Desde aquí, el modelo resume los resultados y envía el resumen al usuario.
Cuándo se debe usar la llamada a funciones
A continuación se muestran casos de uso de ejemplo de la llamada a funciones:
- Creación de asistentes que puedan responder a preguntas mediante llamadas a otras API. Por ejemplo, puede definir funciones como las siguientes:
send_email(to: string, body: string)
ocurrent_weather(location: string, unit: 'celsius' | 'fahrenheit')
. - Definición y uso de llamadas API basadas en lenguaje natural. Por ejemplo, tomar la instrucción: "¿Quiénes son mis principales clientes?", convertirla en una llamada API denominada
get_customers(min_revenue: int, created_before: string, limit: int)
y llamar a esa API.
Para las tareas de inferencia por lotes o procesamiento de datos, como convertir datos no estructurados en datos estructurados. Databricks recomienda usar salidas estructuradas.
Modelos admitidos
En la tabla siguiente se enumeran los modelos admitidos y qué característica de servicio de modelos hace que cada modelo esté disponible.
- Para ver los modelos disponibles por las API de Foundation Model, consulte Límites de las API de Foundation Model para la disponibilidad de regiones.
- Para ver los modelos disponibles por modelos externos, consulte Disponibilidad de regiones para la disponibilidad de la región.
Importante
Meta Llama 3.1 tiene licencia bajo la licencia LLAMA 3.1 Community License, Copyright © Meta Platforms, Inc. All Rights Reserved. Los clientes son responsables de garantizar el cumplimiento de las licencias de modelo aplicables.
Modelo | Disponible mediante la característica de servicio de modelos | Notas |
---|---|---|
Meta-Llama-3.1-405B-Instruct | API de Foundation Model | Se admite en cargas de trabajo de rendimiento de pago por token y rendimiento aprovisionado. |
Meta-Llama-3.1-70B-Instruct | API de Foundation Model | Se admite en cargas de trabajo de rendimiento de pago por token y rendimiento aprovisionado. |
Meta-Llama-3.1-8B-Instruct | API de Foundation Model | Solo se admite en cargas de trabajo de rendimiento aprovisionadas. |
gpt-4o | Modelos externos | |
gpt-4o-2024-08-06 | Modelos externos | |
gpt-4o-2024-05-13 | Modelos externos | |
gpt-4o-mini | Modelos externos |
Uso de la llamada a funciones
Para usar la llamada a funciones con una aplicación de IA generativa, debe proporcionar parameters
de la función y una description
.
El comportamiento predeterminado de tool_choice
es "auto"
. Esto permite al modelo decidir a qué funciones llamar y si debe llamarlas.
Puede personalizar el comportamiento predeterminado en función de su caso de uso. A continuación se muestran las opciones:
- Establezca
tool_choice: "required"
. En este escenario, el modelo siempre llama a una o varias funciones. El modelo selecciona a qué función o funciones llamar. - Establezca
tool_choice: {"type": "function", "function": {"name": "my_function"}}
. En este escenario, el modelo llama solamente a una función específica. - Establezca
tool_choice: "none"
para deshabilitar la llamada a funciones y que el modelo solo genere un mensaje orientado al usuario.
A continuación se muestra un ejemplo de un solo turno con el SDK de OpenAI y su parámetro tools
. Consulte Tarea de chat para obtener más información sobre la sintaxis.
Importante
En la versión preliminar pública, la llamada a funciones en Databricks está optimizada para llamadas a funciones de un solo turno.
import os
import json
from openai import OpenAI
DATABRICKS_TOKEN = os.environ.get('YOUR_DATABRICKS_TOKEN')
DATABRICKS_BASE_URL = os.environ.get('YOUR_DATABRICKS_BASE_URL')
client = OpenAI(
api_key=DATABRICKS_TOKEN,
base_url=DATABRICKS_BASE_URL
)
tools = [
{
"type": "function",
"function": {
"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"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
]
}
}
}
}
}
]
messages = [{"role": "user", "content": "What is the current temperature of Chicago?"}]
response = client.chat.completions.create(
model="databricks-meta-llama-3-1-70b-instruct",
messages=messages,
tools=tools,
tool_choice="auto",
)
print(json.dumps(response.choices[0].message.model_dump()['tool_calls'], indent=2))
Esquema JSON
Las API de Foundation Model admiten ampliamente las definiciones de función aceptadas por OpenAI. Sin embargo, si se usa un esquema JSON más sencillo para las definiciones de llamadas a funciones, la generación JSON de llamadas a funciones es de mayor calidad. Para favorecer una generación de mayor calidad, las API de Foundation Model solo admiten un subconjunto de especificaciones de esquema JSON.
No se admiten las siguientes claves de definición de llamada a funciones:
- Expresiones regulares mediante
pattern
. - Composición y validación de esquemas o anidados complejos mediante
anyOf
,oneOf
,allOf
,prefixItems
o$ref
. - Listas de tipos, excepto en el caso especial de
[type, “null”]
, donde un tipo de la lista es un tipo JSON válido y el otro es"null"
.
Asimismo, se aplican las siguientes limitaciones:
- El número máximo de claves especificadas en el esquema JSON es
16
. - Las API de Foundation Model no aplican restricciones de longitud ni tamaño para objetos y matrices.
- Esto incluye palabras clave como
maxProperties
,minProperties
ymaxLength
.
- Esto incluye palabras clave como
- Los esquemas JSON muy anidados darán lugar a una generación de menor calidad. Si es posible, intente aplanar el esquema JSON para obtener mejores resultados.
Uso de tokens
Para mejorar la calidad de las llamadas a herramientas, se usa la inserción de indicaciones y otras técnicas. Hacer esto influye en el número de tokens de entrada y salida consumidos por el modelo, lo que a su vez repercute en la facturación. Cuantos más herramientas use, más aumenta el número de tokens de entrada.
Limitaciones
A continuación se muestran las limitaciones de la llamada a funciones en la versión preliminar pública:
- La solución actual de llamada a funciones está optimizada para llamadas a funciones de un solo turno. La llamada a funciones multiturno se admite en la versión preliminar, pero está en desarrollo.
- No se admiten las llamadas a funciones paralelas.
- El número máximo de funciones que se pueden definir en
tools
es de 32 funciones. - Para la compatibilidad con el rendimiento aprovisionado, la llamada a funciones solo se admite en nuevos puntos de conexión. No se puede agregar una llamada de función a los puntos de conexión creados anteriormente.
Ejemplo de cuaderno
Consulte el cuaderno siguiente para ver ejemplos detallados de llamadas a funciones.