Compartir a través de


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:

  1. Llamada al modelo mediante la consulta enviada y un conjunto de funciones definidas en el parámetro tools.
  2. 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.
  3. Análisis de las cadenas en JSON en el código y llamada a la función con los argumentos proporcionados, si existen.
  4. 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) o current_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 y maxLength.
  • 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.

Cuaderno de llamadas a funciones de ejemplo

Obtener el cuaderno