Lección 03 · planificación

Deje que el agente administre su propio progreso

"El agente puede seguir su propio progreso y yo puedo verlo". Deje que el modelo haga su propia lista y luego use un pequeño mecanismo para permitirle recordar actualizar la lista.

⏱ ~10 min · 📝 3 widgets interactivos · 🧑‍💻 Basado en shareAI-lab · s03_todo_write.py

autoplanificación estructurada

Claude Code a menudo tiene que seguir varios pasos cuando trabaja: grep para buscar referencias → leer algunos archivos → cambiar el código → ejecutar pruebas. Si dejas que el modelo "avance por sensación", verás que lo hace bien en los primeros pasos, luego comienza a olvidarse en el medio y finalmente se rinde a la mitad.

La solución a s03 es darle una herramienta de manifiesto: el modelo ajusta su propia herramienta todo para incluir elementos de tareas en él, y TodoManager verifica la estructura, persiste y devuelve la vista actual. Esto tiene dos ventajas:

  • El modelo se ve obligado a explícita "qué hacer"; simplemente escribirlo ayuda a aclarar su pensamiento.
  • Los humanos pueden ver lo que están pensando. La experiencia de depuración es diez veces mejor.
# Vista TODO, cada elemento está estructurado
[] #1: grep "TODO" en src/
[>] #2: lee src/app.py y enumera los comentarios # en progreso
[] #3: generar rebaja resumida
[] #4: escribir en TODO_LIST.md

(0/4 completado)

Una regla estricta: solo hay uno en progreso a la vez

TodoManager.update() Hay una verificación:

if in_progress_count > 1:
    raise ValueError("Sólo una tarea puede estar en progreso a la vez")

Puede parecer duro, pero en realidad está ayudando al modelo. Si permites 3 "haceres" al mismo tiempo, comenzará a pelear por todas partes y nunca terminará ninguna de ellas. Avance de misión única forzado, se obliga a completar cada una antes de abrir la siguiente.

El siguiente widget le permite actuar como modelo, enviar varias tareas pendientes y ver cuáles pasan la verificación y cuáles se rechazan.

Recordatorio molesto: ¿No hay actualizaciones durante 3 rondas consecutivas? pincharlo

Incluso si se proporciona la herramienta de tareas pendientes, el modelo ocasionalmente se "olvidará" de actualizar la lista; ha hecho muchas cosas, pero in_progress todavía está atascado en el elemento 2. El movimiento en s03 es un contador muy simple:

rounds_since_todo = 0
mientras Verdadero:
    respuesta = LLM(mensajes, herramientas)
    ...
    used_todo = cualquier(b.name == "todo" para b en usos_herramientas)
    rounds_since_todo = 0 si used_todo else rounds_since_todo + 1
    if rounds_since_todo >= 3:
        results.append({"type":"text", "text":"<reminder>Actualiza tus todos.</reminder>"})

Cuando el recuento llegue a 3, incluya un recordatorio en la siguiente ronda de mensajes de usuario. Cuando el modelo lo vea, instintivamente ajustará la tarea. Se trata de utilizar medios de ingeniería para convertir una restricción suave ("Manténgala actualizada") en un estímulo forzado.

¿Cómo se llama esta rutina?

En los círculos de diseño de agentes, esto se denomina autoplanificación estructurada con suaves empujones: le da al modelo un estado estructurado en el que debe escribir, complementado con recordatorios oportunistas. Claude Code utiliza un patrón similar en el código real, pero más restringido (baja frecuencia, redacción neutral).

¿Por qué no simplemente escribir "actualizar todo en cada paso" en el indicador del sistema? Es posible escribir, pero la obediencia del modelo a las instrucciones generales en el mensaje del sistema disminuirá a medida que la conversación se alargue. Dividir las instrucciones en "recordatorios que se reinyectan constantemente" es mucho más estable.
Interactivo

Widget 1 · Kanban · todo presionar girar para evolucionar

Haga clic en Paso para ver cómo el modelo pasa la tarea de pendiente a in_progress y completada. Tenga en cuenta que siempre hay solo un in_progress en cada ronda.

[ ] pending
[>] in_progress
[x] completed
准备开始…
Interactivo

Widget 2 · Validación · ¿Cuál de las 5 cargas útiles de todo pasó?

Pase una matriz de elementos cuando el modelo llame a la herramienta todo. TodoManager ejecutará una serie de verificaciones: el texto no está vacío, el estado es legal, como máximo uno en progreso y un número total ≤ 20. Haga clic para determinar si cada carga útil se aprueba o se rechaza.

答对 0 / 5
Interactivo

Widget 3 · Contador de molestias · ¿Qué pasará si el todo no se actualiza durante 3 rondas consecutivas?

Haga clic en Siguiente turno para ver si el contador activa la inyección de recordatorio. Cada ronda selecciona aleatoriamente "llamar todo" o "no llamar"; el rendimiento del modelo en la realidad también fluctúa de esta manera.

rounds_since_todo: 0