strumento#

Impara come connettere un LLM con strumenti esterni.

Introduction#

Con la funzione tools, puoi fare in modo che il tuo modello utilizzi strumenti esterni.

Come l”API di Function Calling di OpenAI, puoi definire funzioni con parametri e far sì che il modello scelga dinamicamente quale funzione chiamare e quali argomenti passarvi.

Questo è il processo generale per chiamare una funzione:

  1. Invia una query specificando le funzioni, i loro parametri e la descrizione.

  2. LLM decide se avviare la funzionalità. Se sceglie di non avviarla, risponde in linguaggio quotidiano, fornendo soluzioni basate sulla propria comprensione intrinseca o chiedendo ulteriori dettagli sulla query e sull’uso degli strumenti. Quando decide di utilizzare uno strumento, raccomanda API adatte e istruzioni per l’uso in formato JSON.

  3. Successivamente, implementa le chiamate API nell’applicazione e invia la risposta restituita all’LLM per l’analisi dei risultati, proseguendo poi con il passaggio successivo.

Attualmente non esiste un endpoint API dedicato per la funzionalità tools. Deve essere utilizzato in combinazione con l’API Chat.

Elenco dei modelli supportati#

Xinference supporta i seguenti modelli per l’uso della funzionalità tools:

Guida rapida#

Il parametro opzionale tools nell’API Chat può essere utilizzato per fornire specifiche di funzioni. Il suo scopo è consentire al modello di generare parametri di funzione conformi alle specifiche fornite.

Esempio di utilizzo del client 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)

Il risultato dell’output è:

{
    "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}"
        }
    ],
}

Esempio di utilizzo del client 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"}
)

Il risultato dell’output è:

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

Nota

Se l’LLM ha utilizzato chiamate a strumenti, il motivo del completamento sarà tool_calls. Altrimenti, sarà il motivo di completamento predefinito.

Nota

L’API stessa non esegue alcuna chiamata di funzione. Lo sviluppatore deve utilizzare l’output del modello per eseguire la chiamata di funzione.

Puoi trovare altri esempi sulle capacità di tools nei notebook del tutorial.

Chiamata di funzione

Studia un esempio completo che dimostri il processo di chiamata di funzione.

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