Capítulo 6: Tools — Dándole Manos al Modelo
En el capítulo anterior aprendiste a obtener datos estructurados del modelo. Pero hay un límite: solo puede generar información que ya "conoce".
¿Qué pasa cuando necesitas que consulte tu base de datos? ¿Que busque productos en tu inventario? ¿Que procese una devolución?
Necesitas tools — herramientas que el modelo puede ejecutar.
Código Primero
Un tool tiene tres partes:
description: Le dice al modelo cuándo usarloinputSchema: Parámetros tipados con Zodexecute: La función que corre cuando el modelo lo llama
Cambios en AI SDK v6
| v4/v5 | v6 |
|---|---|
parameters: z.object({...}) | inputSchema: z.object({...}) |
maxSteps: 5 | stopWhen: stepCountIs(5) |
| Aprobación manual | needsApproval: true built-in |
| Sin control de output | toModelOutput para reducir tokens |
El Comportamiento por Defecto
Por defecto, streamText hace UNA sola generación. Si el modelo llama un tool, el flujo termina ahí:
El cliente recibe el tool output, pero no hay respuesta textual.
stopWhen: Habilitando Multi-Step
Para que el modelo use el resultado y genere respuesta, necesitas stopWhen:
stepCountIs(3) significa: "continúa hasta 3 pasos máximo". Ahora el flujo es:
Renderizando Tools en el Cliente
Los tool calls aparecen en message.parts:
Estados de un tool call:
input-streaming: Recibiendo parámetrosoutput-available: Tool terminó, resultado listoapproval-requested: Esperando aprobación humana
Human-in-the-Loop: needsApproval
needsApproval sirve para confirmar antes de ejecutar acciones sensibles:
En el cliente, manejas la aprobación:
Optimización: toModelOutput
Cuando un tool retorna mucha data, el modelo consume tokens innecesarios:
executeretorna data completa → El cliente muestra cards con imágenestoModelOutputretorna resumen → El modelo genera respuesta sin gastar tokens extra
Preview: ToolLoopAgent
En el próximo capítulo veremos agentes en detalle. La diferencia clave:
streamText + tools | ToolLoopAgent |
|---|---|
| 1 paso por defecto | 20 pasos por defecto |
Necesitas stopWhen siempre | Continúa automático |
| Chat interactivo | Tareas autónomas |
El agente se detiene cuando:
- La tarea está completada
- Un tool requiere aprobación
- Se alcanza el límite de pasos
Callbacks y Monitoreo
Resumen
| Concepto | Qué aprendiste |
|---|---|
tool() | Función que define una herramienta ejecutable |
inputSchema | Parámetros tipados con Zod (antes parameters) |
execute | La función que corre cuando el modelo llama el tool |
stopWhen | CRÍTICO — sin esto, no hay respuesta después del tool |
stepCountIs(n) | Helper para limitar pasos (reemplaza maxSteps) |
needsApproval | Requiere confirmación humana antes de ejecutar |
toModelOutput | Reduce tokens enviados al modelo |
part.state | Estados: input-streaming, output-available, approval-requested |
Tools vs Structured Output
| Usar Tools cuando... | Usar Structured Output cuando... |
|---|---|
| Necesitas ejecutar acciones | Solo necesitas datos tipados |
| Consultas externas (DB, API) | Parsear o clasificar texto |
| El modelo decide qué hacer | Tú sabes qué estructura quieres |
| Flujo conversacional | Respuesta única estructurada |
En el próximo capítulo veremos Agentes: cuando el modelo toma el control completo del loop, decide autónomamente qué herramientas usar, y resuelve tareas complejas sin intervención.
¿Ya compraste el libro?
Si compraste el libro y no encuentras tu email de descarga, ingresa tu email y te enviamos un nuevo enlace.
