Herramienta#

Aprende cómo conectar un LLM con herramientas externas.

Introducción#

A través de la funcionalidad tools, puede hacer que su modelo utilice herramientas externas.

Al igual que la API de Function calling de OpenAI, puedes definir funciones con parámetros y permitir que el modelo seleccione dinámicamente qué función llamar y qué argumentos pasarle.

Este es el proceso general de llamar a una función:

  1. Usted envía una consulta, detallando las funciones, sus parámetros y descripciones.

  2. El LLM decide si iniciar una función. Si opta por no iniciarla, responderá en lenguaje cotidiano, ya sea proporcionando una solución basada en su comprensión intrínseca o solicitando más detalles sobre la consulta y el uso de herramientas. Al decidir usar una herramienta, recomendará la API adecuada e instrucciones de uso en formato JSON.

  3. A continuación, implementas la llamada a la API en la aplicación, envías la respuesta devuelta al LLM para el análisis de resultados y continúas con el siguiente paso.

Actualmente no se ha implementado un endpoint de API dedicado para la función tools. Debe usarse en combinación con la API de Chat.

Lista de modelos compatibles#

Xinference admite que los siguientes modelos utilicen la función tools:

Inicio rápido#

El parámetro opcional tools en la API de Chat se puede utilizar para proporcionar especificaciones de funciones. Su propósito es permitir que el modelo genere parámetros de funciones que cumplan con las especificaciones proporcionadas.

Ejemplo de uso del cliente OpenAI#

import openai

client = openai.Client(
    api_key="cannot be empty",
    base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1"
)
response = client.chat.completions.create(
    model="<MODEL_UID>",
    messages=[{
        "role": "user",
        "content": "Call me an Uber ride type 'Plus' in Berkeley at zipcode 94704 in 10 minutes"
    }],
    tools=[
        {
            "type": "function",
            "function": {
                "name": "uber_ride",
                "description": "Find suitable ride for customers given the location, "
                "type of ride, and the amount of time the customer is "
                "willing to wait as parameters",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "loc": {
                            "type": "int",
                            "description": "Location of the starting place of the Uber ride",
                        },
                        "type": {
                            "type": "string",
                            "enum": ["plus", "comfort", "black"],
                            "description": "Types of Uber ride user is ordering",
                        },
                        "time": {
                            "type": "int",
                            "description": "The amount of time in minutes the customer is willing to wait",
                        },
                    },
                },
            },
        }
    ],
)
print(response.choices[0].message)

El resultado de salida es:

{
    "role": "assistant",
    "content": null,
    "tool_calls": [
        "id": "call_ad2f383f-31c7-47d9-87b7-3abe928e629c",
        "type": "function",
        "function": {
            "name": "uber_ride",
            "arguments": "{\"loc\": 94704, \"type\": \"plus\", \"time\": 10}"
        }
    ],
}

Ejemplo de uso del cliente de Anthropic#

import anthropic
import json
import uuid

client = anthropic.Anthropic(
    api_key="cannot be empty",
    base_url="http://localhost:9997"
)

response = client.messages.create(
    model="qwen3",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": "What's the weather like in Beijing?"
        }
    ],
    tools=[
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Get weather information for a city",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {
                            "type": "string",
                            "description": "The city name",
                        },
                    },
                    "required": ["city"]
                },
            },
        }
    ],
    tool_choice={"type": "auto"}
)

El resultado de salida es:

{
    "role": "assistant",
    "content": null,
    "tool_calls": [
        "id": "call_26884d11-ff6b-48fb-ada7-734f3fd0dfcc",
        "type": "function",
        "function": {
            "name": "get_weather",
            "arguments": "{\"city\": \"Beijing\"}"
        }
    ],
}

Nota

Si el LLM utiliza la llamada a herramientas, el motivo de finalización será tool_calls. De lo contrario, será el motivo de finalización predeterminado.

Nota

La API en sí no ejecuta ninguna llamada a funciones. Los desarrolladores deben utilizar la salida del modelo para realizar llamadas a funciones.

Puede encontrar más ejemplos sobre las capacidades de tools en el cuaderno de tutoriales.

Llamada a función

Aprende un ejemplo completo que demuestre el proceso de llamada a funciones.

https://github.com/xorbitsai/inference/blob/main/examples/FunctionCall.ipynb