Escuela IA · Nivel 4 · Agentes · 3 de 4

Las herramientas: el contrato

Read this in English →

Lectura: unos 20 minutos

Un agente es tan bueno como sus herramientas, y eso no es una frase bonita: es literalmente dónde está el trabajo. El bucle de la lección anterior son treinta líneas y no se toca nunca más. Todo lo que vas a escribir a partir de ahora son herramientas, y todo lo que se te va a estropear también.

Una herramienta son dos cosas, y la que falla casi siempre es la segunda: una función que hace el trabajo y una descripción que lee el modelo. El modelo no ve tu código. Ve una frase, unos nombres de campo y unos tipos. Si eso está mal escrito, da igual lo bien programada que esté la función.

Lo que hay dentro

  1. Las seis reglas de una descripción que funciona
  2. El esquema de parámetros, campo a campo
  3. Qué devuelve: forma, tamaño y errores
  4. Herramientas que ESCRIBEN: el contrato de las cuatro condiciones
  5. Idempotencia, con código
  6. Preparar y confirmar: por qué son dos herramientas
  7. Los límites van en el código, nunca en el prompt
  8. Cuántas herramientas caben
  9. Cuando la herramienta llama a otro sistema
  10. El alcance: lo que la herramienta puede ver
  11. El agente de pedidos, entero
  12. Probar una herramienta sin gastar ni una llamada

1. Las seis reglas de una descripción que funciona

Todas salen de lo mismo: el modelo elige con lo que lee. Una descripción no es documentación para ti — es la interfaz.

MalBien
"Consulta el stock." "Stock, mínimo y días de cobertura de UN producto. Úsala cuando pregunten cuánto queda o si hay que pedir. El código tiene que venir de buscar_producto."
"Envía un pedido al proveedor." "Envía DE VERDAD el pedido ya preparado. Sólo se puede llamar con el identificador que devuelve preparar_pedido y después de que el usuario haya dicho que sí. No la uses para calcular nada."

2. El esquema de parámetros, campo a campo

El esquema no es burocracia: es lo único que impide que llegue basura a tu función. Y cada campo lleva su propia descripción, que también la lee el modelo.

Un esquema completo{ name: 'preparar_pedido', description: 'Calcula las lineas de un pedido para un proveedor y devuelve un borrador ' + 'con un identificador. NO envia nada. Es el paso previo obligatorio de confirmar_pedido.', parameters: { type: 'object', properties: { proveedor: { type: 'string', // ⚠️ enum: la lista cerrada evita que invente un proveedor enum: ['artsana', 'kenvue', 'johnson'], description: 'Proveedor al que va el pedido', }, cubrir_dias: { type: 'integer', description: 'Dias de venta que se quieren cubrir. Entre 3 y 30. Si no te lo dicen, 14', }, solo_codigos: { type: 'array', items: { type: 'string' }, description: 'Limitar a estos codigos. Vacio = todo lo que este bajo minimo', }, }, required: ['proveedor'], }, }
El enum es la herramienta más infravalorada que existe. Convierte «el modelo podría escribir cualquier cosa» en «el modelo sólo puede escribir una de estas tres». Siempre que un campo tenga un número finito de valores válidos —un proveedor, un estado, un tipo de documento— va con enum. Es gratis y elimina una familia entera de fallos.
Y fíjate en que la lista son LABORATORIOS, no mayoristas. No es un detalle de ejemplo: es lo que hace que este agente tenga sentido. El pedido al mayorista —Cofares, Hefame, Bidafarma— es continuo, lo genera el programa de gestión contra los mínimos y se manda varias veces al día; ahí no hay nada que decidir ni nada que preparar. El pedido directo a laboratorio es lo contrario: es periódico, tiene mínimo de compra, condiciones y rappel, y decidir cuánto entra en él es exactamente la cuenta que un titular hace a mano. Un agente que duplicara el pedido del mayorista no sobraría: estorbaría.
Y fíjate en «Si no te lo dicen, 14». Los valores por defecto se escriben en la descripción del campo, no en tu cabeza. Sin esa frase, el modelo se inventa un número razonable —7, 30, 45— y cada ejecución sale distinta sin que nada haya cambiado.
El esquema no valida por ti. Que pongas entre 3 y 30 no impide que llegue un 900: eso es una frase, no una comprobación. La validación de verdad va en la primera línea de tu función, y esto vale para todo lo que sigue.

← Anterior: tu primer agente Siguiente: en producción →