Sesión 5 · Planeación

Construye un plan estructurado

Define goal y reason con Zod y pide al modelo un objeto de pasos antes de resolver la misión.

30 min aprox.4 pasosPráctica + comprobación
Qué aprenderás
  • Distinguir text de output con esquema.
  • Crear buildPlan y tipar su tracer.
  • Permitir de 2 a 15 pasos sin confundir estructura con corrección.

Referencias de código

Índice de esta lección

Paso 1

Organiza las tres fases

withPlanning construye un plan, analiza sus pasos secuencialmente e integra los resultados al final. En esta clase completamos la primera fase.

La ejecución del ejemplo consiste en llamadas de análisis sobre un escenario ficticio. No lleva a cabo capturas ni acciones externas.

Flujo de Planning
Paso 1 · text
1. buildPlan → pasos ordenados2. ejecutar cada paso → resultados parciales3. síntesis → propuesta final

Qué deberías observar

Puedes localizar cada fase del flujo.

Paso 2

Define el objeto esperado

Cada paso contiene goal y reason. Zod comprueba tipos, campos y límites; el modelo aún puede proponer un paso incorrecto.

La grabación empieza con un máximo de 5 y después lo amplía a 15. El laboratorio incorpora el límite final desde el inicio para no comprimir un ejercicio de siete capturas en cinco elementos obligatorios.

src/patterns/02-planning/context.ts
Paso 2 · typescript
import { z } from "zod"; export const planSchema = z.object({  steps: z.array(z.object({    goal: z.string().min(1).describe("Qué resuelve este paso, en una frase"),    reason: z.string().min(1).describe("Por qué es necesario y por qué va en esta posición"),  })).min(2).max(15).describe("Pasos ordenados; cada paso resuelve una sola tarea"),});export type PlanStep = z.infer<typeof planSchema>["steps"][number];

Qué deberías observar

El resultado tendrá entre 2 y 15 pasos con objetivo y justificación.

Paso 3

Pide output, no solo texto

generateText permite configurar Output.object({ schema: planSchema }). Extrae output y retorna output.steps; no intentes recorrer un Markdown como si fuera ese arreglo.

Si el proveedor o modelo no admite la salida estructurada elegida, o el resultado no cumple el esquema, la generación puede fallar. Lee el error antes de intentar continuar con un plan inexistente.

src/patterns/02-planning/planning.ts
Paso 3 · typescript
import { generateText, Output } from "ai";import { createTracer, model } from "../../helpers/index.js";import { planSchema } from "./context.js"; export async function buildPlan(mission: string, tracer: ReturnType<typeof createTracer>) {  const { output } = await generateText({    model,    prompt: mission,    instructions: "Eres un estratega. No resuelvas todavía el operativo. Responde en español. Descompón la tarea en pasos ordenados que usen los resultados anteriores.",    output: Output.object({ schema: planSchema }),    onStepEnd: tracer.onStepFinish,  });  return output.steps;}

Qué deberías observar

buildPlan devuelve pasos que cumplen la forma definida.

Paso 4

Revisa antes de ejecutar

Las instrucciones piden planear y no resolver todavía. reason es una explicación visible de la posición del paso, no una prueba de que la estrategia sea correcta.

Imprimir los pasos ayuda a detectar acciones fuera de orden o restricciones omitidas. Que el JSON sea válido no implica que Mirror Master vaya primero ni que las horas estén bien.

src/patterns/02-planning/planning.ts
Paso 4 · typescript
const tracer = createTracer("con-planificación");const steps = await buildPlan(buildMission(false), tracer);console.table(steps);

Qué deberías observar

Puedes inspeccionar el plan sin confundir validación de formato con evaluación del problema.

Ahora te toca

Prueba la idea por tu cuenta

Propón un objeto de dos pasos con goal y reason. Explica una condición que Zod comprueba y una regla de captura que este esquema no garantiza.

Necesito una pista

El esquema limita cantidad y texto, pero no contiene la lógica de especialidades.

Comparar con una solución

Zod comprueba que steps sea un arreglo de 2 a 15 objetos con goal y reason no vacíos. No comprueba el orden de capturas, compatibilidad ni jornadas del escenario.

Antes de seguir

Comprueba lo que aprendiste

No es una nota. Es una pausa para comprobar que la idea quedó clara.

1. ¿Qué extraes para obtener los pasos estructurados?
2. ¿Qué limita max(15)?
3. Un output válido según Zod, ¿garantiza un plan correcto?

¿Terminaste la práctica?

Haz el ejercicio y comprueba tus respuestas antes de marcar la lección como completada.

Apuntes y código de esta lección