Sesión 4 · Tool Use
Conecta las herramientas con el modelo
Registra findCourses, añade instrucciones y permite varios pasos para consultar el catálogo y redactar la respuesta.
Qué aprenderás
- Registrar herramientas en un objeto de generateText.
- Usar instrucciones y un límite de pasos de AI SDK 7.
- Diagnosticar el proveedor y comparar respuestas con evidencia.
Referencias de código
Índice de esta lección
Paso 1
Pasa findCourses al modelo
Importa findCourses desde tools.js y crea withTools a partir de withoutTools. tools es un objeto cuyas claves identifican operaciones disponibles.
Definir una herramienta en un archivo no permite usarla por sí solo: hay que pasarla a la llamada. El modelo decide si propone una consulta; valida lo ocurrido en las trazas.
import { generateText, isStepCount } from "ai";import { createTracer, model } from "../../helpers/index.js";import { findCourses } from "./tools.js"; async function withTools() { const tracer = createTracer("con-herramientas"); const { text } = await generateText({ model, prompt: QUESTION, instructions: "Eres un asistente del catálogo. No inventes cursos, precios ni horas. Consulta las herramientas. Si hay varias coincidencias, pide el ID antes de calcular.", tools: { findCourses }, stopWhen: isStepCount(6), onStepEnd: tracer.onStepFinish, }); console.log("Con herramientas:", text); return tracer.summary();}Qué deberías observar
La llamada puede buscar cursos, recibir sus resultados y elaborar una respuesta.
Paso 2
Distingue instrucciones y pregunta
instructions establece cómo debe actuar el asistente; prompt contiene la consulta del usuario. Las instrucciones guían su comportamiento, pero no crean memoria persistente ni añaden datos ausentes.
Esta adaptación usa AI SDK 7: instructions, onStepEnd e isStepCount. stepCountIs sigue como alias en la versión instalada. El helper mantiene onStepFinish como nombre de su función.
instructions: "Eres un asistente del catálogo. " + "No inventes cursos, precios ni horas. " + "Consulta las herramientas. " + "Si hay varias coincidencias, pide el ID antes de calcular."Qué deberías observar
La política exige consultar datos y aclarar coincidencias ambiguas.
Paso 3
Permite la continuación y limita los pasos
Con herramientas, una generación puede terminar en una llamada pendiente de ejecutar. La ejecución en varios pasos permite incorporar el resultado y volver al modelo.
stopWhen: isStepCount(6) limita el número de pasos del SDK. No equivale a un circuit breaker completo, no es un límite de tiempo y no garantiza seis pasos ni una respuesta final correcta.
Revisa llamadas y resultados, no solo el texto final. Un límite demasiado pequeño puede detener la tarea antes de la explicación.
stopWhen: isStepCount(6),onStepEnd: tracer.onStepFinish,Qué deberías observar
Ves cuándo consulta el catálogo y si llega a redactar una respuesta.
Paso 4
Comprueba modelo y adaptador
El proveedor, el adaptador y el modelo deben admitir la llamada a herramientas. Un aviso de reasoning no demuestra por sí solo que el modelo no pueda razonar ni identifica toda la causa del fallo.
Razonamiento y tool calling son capacidades distintas. Si la práctica falla, lee el error, confirma la versión del adaptador y prueba un modelo con soporte de herramientas documentado.
No es necesario cambiar de proveedor si tu configuración ya funciona. Los tokens, pasos y tiempos dependen de la ejecución; las cifras de la grabación no son un benchmark general.
Revisa → proveedor + adaptador + modeloVerifica → soporte de herramientasObserva → llamadas, resultados, respuestaCompara → tokens y tiempo realesQué deberías observar
Diagnosticas el fallo concreto antes de atribuirlo a la inteligencia del modelo.
Paso 5
Compara y comprueba los datos
Invoca ambas funciones una vez para observar la diferencia. La comparación hace dos peticiones y puede consumir cuota: para futuras ejecuciones conserva solo la prueba con herramientas.
TypeScript desde cero cuesta 19.99 USD y Docker 17.99 USD en este catálogo: 37.98 USD antes del descuento y 36 horas. TypeScript también tiene otra coincidencia; pide el ID o precisa el título.
El modelo todavía calcula el descuento en esta clase. En la siguiente trasladaremos esa operación a una función verificable. Las herramientas aportan datos; no garantizan un resultado infalible.
export async function toolUseMain() { const resultA = await withoutTools(); const resultB = await withTools(); console.table({ "Sin herramientas": resultA, "Con herramientas": resultB, });}Qué deberías observar
Puedes justificar cada cifra con el resultado del catálogo.
Ahora te toca
Prueba la idea por tu cuenta
Inspecciona o ejecuta withTools. Verifica si findCourses fue llamado, qué IDs devolvió y cómo se resolvió la ambigüedad de TypeScript. Explica qué limita isStepCount(6).
Necesito una pista
Las trazas contienen argumentos y resultados; el texto final por sí solo no demuestra una consulta.
Comparar con una solución
La evidencia es la llamada a findCourses y sus cursos. Antes de cotizar precisa ts-01 frente a agt-04. isStepCount(6) limita pasos del SDK; no fija tiempo, coste ni exactitud.
Antes de seguir
Comprueba lo que aprendiste
No es una nota. Es una pausa para comprobar que la idea quedó clara.
¿Terminaste la práctica?
Haz el ejercicio y comprueba tus respuestas antes de marcar la lección como completada.