Guía de Llamadas a Funciones de GPT-6 Astra: Esquemas, Validación, Reintentos y Resultados de Herramientas
Implementa llamadas a funciones GPT-6 Astra confiables con esquemas JSON estrictos, validación de argumentos, ejecución idempotente, reintentos, llamadas paralelas y resultados estructurados.

La llamada a funciones permite que GPT-6 Astra solicite código que tu aplicación controla. El modelo elige una función y propone argumentos; tu tiempo de ejecución los valida, realiza la operación y envía el resultado de vuelta. La fiabilidad depende menos de una descripción ingeniosa de la herramienta que de un bucle de ejecución disciplinado.
Define un contrato estricto
OpenAI recomienda strict: true. Los esquemas estrictos requieren additionalProperties: false, y cada propiedad debe aparecer en required. Representa un valor opcional como una unión que incluya null.
const tools = [{
type: "function",
name: "buscar_pedido",
description: "Devuelve el estado actual de un pedido visible para el usuario."
strict: true,
parámetros: {
type: "objeto",
propiedades: {
order_id: { type: "string", description: "ID de orden canónica" },
include_events: { type: ["booleano", "null"] }
},
obligatorio: ["order_id", "include_events"],
additionalProperties: false
}
}];
Mantén las funciones pequeñas y los nombres concretos. Una herramienta grande manage_account con muchos modos invita a combinaciones inválidas y oculta riesgos. Prefiere get_account, update_shipping_address y close_account, con aprobación en torno a operaciones importantes.
El bucle de ejecución
En la API de Respuestas, una llamada solicitada aparece en response.output como un elemento con type: "function_call", call_id, name y arguments en formato JSON. La aplicación analiza y valida los argumentos, ejecuta código de confianza y luego continúa con un function_call_output correspondiente.
const first = await client.responses.create({ model: "gpt-6-astra", herramientas, input: "¿Dónde está la orden ORD-1042?" });
const salidas = []; for (const item of first.output) { if (item.type !== "function_call") continue; const args = JSON.parse(item.arguments); const result = await lookupOrder(args); outputs.push({ type: "function_call_output", call_id: item.call_id, JSON.stringify(result) }); }
const final = await client.responses.create({ model: "gpt-6-astra", previous_response_id: first.id, outputs });
Nunca ejecutes nombres arbitrarios del modelo. Resuélvelos contra un registro fijo. Vuelve a validar en el código de la aplicación incluso con modo estricto: la validez del esquema no demuestra autorización, existencia de registros, cumplimiento de reglas de negocio ni seguridad.
## Resultados de herramientas de diseño útiles
Devuelve el resultado completo más pequeño. Incluye identificadores estables, estado, campos tipados y códigos de error legibles por máquina. Evita volcar una fila completa de la base de datos o un seguimiento de pila.
```json
{
"headers": {
"row1": "Encabezado 1",
"row2": "Encabezado 2",
"row3": "Encabezado 3"
},
"rows": [
{
"row1": "Datos de ejemplo 1",
"row2": "Datos de ejemplo 2",
"row3": "Datos de ejemplo 3"
},
{
"row1": "Datos de ejemplo 4",
"row2": "Datos de ejemplo 5",
"row3": "Datos de ejemplo 6"
}
],
"videourl": "https://example.com/video.mp4"
}
{ "ok": false, "error": { "code": "ORDER_NOT_VISIBLE", "message": "El pedido no se encontró en la cuenta del solicitante.", "retryable": false } }
El mensaje ayuda al modelo a explicar; el código ayuda a la capa de orquestación a decidir. No reveles si otro inquilino posee un identificador oculto.
## Los reintentos requieren dos políticas
Los reintentos de transporte manejan los tiempos de espera de la API, los errores 429 y las fallas transitorias 5xx. Los reintentos de herramientas abordan sus propias fallas de dependencia. Sepárelos.
Las lecturas seguras generalmente pueden reintentarse con retroceso exponencial y fluctuación. Las escrituras necesitan una clave de idempotencia y reconciliación. Si la conexión desaparece después de `create_refund`, verifica si el reembolso existe antes de llamar nuevamente. Asigna a cada acción lógica un ID de operación estable y almacena el ID de la llamada de herramienta con el resultado.
Nunca preguntes al modelo solo si reintentar es seguro. El registro de herramientas debe declarar la clase de reintento, el tiempo de espera y el nivel de efectos secundarios.
## Llamadas paralelas y ordenamiento
El modelo puede solicitar múltiples llamadas a funciones. La ejecución en paralelo es útil para lecturas independientes, como consultar el clima en tres ciudades. No es segura cuando la llamada B depende de la llamada A o cuando dos escrituras afectan el mismo registro.
Recolecta cada elemento de llamada a función; no asumas que solo hay uno. Construye un ejecutor consciente de dependencias, o deshabilita/evita el comportamiento paralelo donde el orden importe. Devuelve cada resultado usando su propio `call_id`.
## Selección de herramienta de control
`tool_choice` puede permitir la selección automática, requerir una herramienta, evitar herramientas o forzar una función nombrada. Use `auto` para agentes abiertos, fuerce una herramienta cuando una operación de API sea el propósito explícito del endpoint, y elija `none` cuando el procesamiento deba permanecer solo en el modelo.
Para acciones dirigidas al usuario, un patrón de dos fases es sólido: primero preparar y mostrar un cambio propuesto; luego ejecutar una herramienta confirmada por separado. Esto evita que una frase amigable se convierta en una autorización implícita.
## Probar el contrato
Crea casos para campos faltantes, opcionales nulos, enumeraciones inválidas, IDs no autorizados, tiempos de espera, envíos duplicados, fallos parciales, múltiples llamadas, salidas enormes y cadenas maliciosas dentro de los resultados de la herramienta. Evalúa si la respuesta final refleja con precisión el fallo en lugar de afirmar éxito.
Versión del esquema de registro, ID de llamada, nombre de la herramienta, argumentos sanitizados, duración, resultado y número de reintentos. Mantenga los secretos y el contenido sensible fuera de la telemetría.
## Lista de verificación para la revisión del diseño del esquema
Revisa cada herramienta como si fuera una API pública. Los enumerados deben reflejar valores reales admitidos en lugar de pedirle al modelo que invente cadenas. Las fechas necesitan un formato y una zona horaria declarados. Los campos numéricos necesitan unidades y límites. Los identificadores deben ser canónicos, no nombres de clientes de forma libre cuando un paso de búsqueda pueda resolver la ambigüedad. Las descripciones deben indicar las condiciones previas y lo que la función no hace.
Evita trampas booleanas como `force`, `override` o `skip_checks`. Estas colapsan decisiones políticas importantes en un solo bit generado por el modelo. Si una operación excepcional es legítima, exponla como una herramienta separada de alto riesgo con autorización y aprobación más estrictas.
Contratos con versiones incompatibles. Las cadenas de respuesta en ejecución aún pueden contener llamadas o resultados moldeados por un esquema anterior. Su ejecutor debe rechazar explícitamente las versiones no compatibles y devolver un error recuperable en lugar de adivinar cómo traducir una solicitud sensible.
Finalmente, compara el resultado de la función con la afirmación orientada al usuario. Una herramienta que devuelva `{ok:false}` nunca debe convertirse en "Listo". Las evaluaciones automatizadas deben inspeccionar tanto el rastro de llamadas como la respuesta final, porque una capa de herramienta operativamente correcta aún puede ser mal representada por el modelo.
## Preguntas Frecuentes
### ¿El modo estricto elimina el código de validación?
No. Mejora la adherencia estructural. Tu aplicación sigue aplicando permisos, rangos, invariantes y políticas de negocio.
### ¿Debe la salida de la herramienta ser JSON?
El campo de salida es una cadena, por lo que JSON es una convención práctica para resultados estructurados. Mantén el contrato consistente.
### ¿Cuándo debería forzar una herramienta?
Cuando el propósito del endpoint requiera esa operación y el usuario la haya autorizado. No fuerces llamadas innecesarias solo para que el comportamiento parezca determinista.
### ¿Puede GPT-6 Astra ejecutar mi función por sí mismo?
No. Emite la solicitud de llamada; tu aplicación ejecuta la función y devuelve el resultado.
## Conclusión
La llamada a funciones confiable es un protocolo: esquema estricto, registro fijo, validación de la aplicación, autorización, ejecución controlada, resultado estructurado y continuación verificada. Agregue idempotencia y clasificación de reintentos antes de habilitar escrituras. El modelo propone; su sistema sigue siendo responsable de cada efecto.





























































































