3. Proyecto base
Observa la ejecución con una traza
Registra pasos, herramientas y tokens sin confundir observación con una evaluación del resultado.
Qué aprenderás
- Observar los eventos de fin de paso.
- Separar una traza de una evaluación de calidad.
- Actualizar el callback de observación para AI SDK 7.
Índice de esta lección
Paso 1
Decide qué necesitas registrar
El helper createTracer de la base incrementa un contador de pasos, acumula tokens e imprime herramientas y resultados expuestos por la ejecución.
La traza permite entender qué ocurrió. No demuestra por sí sola que el modelo haya elegido bien ni revela todo su razonamiento interno. Para comparar resultados necesitas además un criterio de aceptación.
steps → pasos completadostotalTokens → uso comunicadotoolCalls → herramientas solicitadastoolResults → resultados recibidostext → salida expuesta por el modeloQué deberías observar
Sabes qué responde cada dato y qué preguntas siguen necesitando una comprobación propia.
Paso 2
Usa el callback vigente
En el código local encontrarás onStepFinish. La documentación de AI SDK 7 lo conserva como alias deprecado y recomienda onStepEnd para código nuevo.
La función de observación recibe datos del paso. Este ejemplo muestra el cambio del nombre del callback sin convertir la llamada en un agente con herramientas.
onStepEnd({ usage }) { console.log("Tokens del paso:", usage.totalTokens ?? "No disponible");}Qué deberías observar
La observación usa onStepEnd. Este fragmento se coloca dentro del objeto de opciones de generateText, no se ejecuta por separado.
Paso 3
Añade una variante observable
Añade esta función a tu archivo de acciones. Si conservas los imports de la lección anterior, no los dupliques.
El contador suma pasos y herramientas. Si un paso no informa tokens, el resumen indica que el total no está disponible. Registrar cero herramientas es esperable: esta prueba aún no declara ninguna.
import { generateText } from 'ai';import { model } from '../helpers/selected-model.js'; export async function getMessageFromModelWithTrace() { let steps = 0; let totalTokens = 0; let usageAvailable = true; const { text } = await generateText({ model, prompt: 'Responde solamente con: "OK, todo listo!"', onStepEnd({ usage, toolCalls, toolResults }) { steps += 1; if (usage.totalTokens === undefined) usageAvailable = false; totalTokens += usage.totalTokens ?? 0; console.log('Paso:', steps); console.log('Herramientas solicitadas:', toolCalls.length); console.log('Resultados de herramientas:', toolResults.length); }, }); const summary = { steps, totalTokens: usageAvailable ? totalTokens : 'No disponible', }; console.log('Respuesta:', text.trim()); console.table(summary); return summary;}Qué deberías observar
La consola muestra los pasos y un resumen. Los números dependen de la ejecución; no hay un total de tokens fijo que debas obtener.
Paso 4
Selecciona la variante en main
Reemplaza el punto de entrada por esta variante y ejecuta npm run build y npm run dev.
Compara la respuesta con la llamada básica y guarda una observación: ¿cuántos pasos expuso?, ¿reportó tokens?, ¿hubo herramientas? Cambiar la función ejecutada no exige cambiar el proveedor.
import { getMessageFromModelWithTrace } from './actions/get-message-model.js'; await getMessageFromModelWithTrace();Qué deberías observar
Se ejecuta la variante con traza y puedes explicar su resumen.
Ahora te toca
Prueba la idea por tu cuenta
Ejecuta la variante con traza y escribe dos cosas que puedes comprobar con ella y una que no demuestra.
Necesito una pista
Distingue datos de ejecución de exactitud del resultado.
Comparar con una solución
Puedes contar los pasos observados y leer el consumo reportado. La traza no garantiza que la respuesta sea correcta ni que un futuro patrón sea eficaz.
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.