DocumentaciónHerramientas

Construir

Herramientas

Describe tus funciones al modelo. Él decide cuándo llamar a una, tu código la ejecuta y le devuelve el resultado.

En esta página
  1. El ciclo completo
  2. Ejemplo
  3. Conviene saber

El ciclo completo

  1. Describes la función

    Su nombre, lo que hace y sus parámetros, en JSON Schema.

  2. El modelo pide la llamada

    En lugar de un texto, devuelve tool_calls con los argumentos.

  3. Tu código la ejecuta

    El modelo no ejecuta nada por sí mismo. Tú decides lo que ocurre.

  4. El modelo responde

    Con el resultado devuelto en un mensaje tool, escribe su respuesta.

Ejemplo

Una función que indica si una factura está pagada. La respuesta mostrada es la de la primera llamada, cuando el modelo pide la función.

import json

tools = [
    {
        "type": "function",
        "function": {
            "name": "invoice_status",
            "description": "Payment status of an invoice.",
            "parameters": {
                "type": "object",
                "properties": {"number": {"type": "string"}},
                "required": ["number"],
            },
        },
    }
]
messages = [
    {
        "role": "user",
        "content": "Has invoice 2026-114 been paid?",
    }
]

first = client.chat.completions.create(
    model="flash", messages=messages, tools=tools
)
call = first.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)

# Run the function, then return its result with the call id.
result = {
    "number": args["number"],
    "status": "paid",
    "paid_on": "2026-10-02",
}
messages.append(first.choices[0].message)
messages.append(
    {
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps(result),
    }
)

final = client.chat.completions.create(
    model="flash", messages=messages, tools=tools
)
print(final.choices[0].message.content)
Respuesta
{
  "role": "assistant",
  "content": null,
  "tool_calls": [
    {
      "id": "call_7f3a",
      "type": "function",
      "function": { "name": "invoice_status", "arguments": "{\"number\": \"2026-114\"}" }
    }
  ]
}

Conviene saber

  • Una lista de herramientas vacía se elimina junto con tool_choice, como si no hubieras enviado ninguna.
  • parallel_tool_calls permite al modelo pedir varias funciones a la vez.
  • Comprueba los argumentos antes de actuar. El modelo puede equivocarse, tu código decide.