Ir al contenido

Skills

chimera-carry-the-failure-forward

Un bucle de reintentos que sobrescribe su variable de feedback le muestra al intento 3 solo el fallo del intento 2 — así que vuelve a derivar el parche que el intento 1 ya probó.

PatrónProcedencia: cleanEstado: activev0.1.0 · Apache-2.0

Conferida por quien revisó y leyó la tarjeta, no reclamada por el propio archivo. Una tarjeta que el agente destila durante una ejecución que consumió contenido no confiable nace contaminada y queda retenida para revisión antes de ser recuperada.

Cuándo viene a la mente

  • escribiendo un bucle de reintentos
  • el agente repite el mismo arreglo
  • devolviendo la salida del verificador al modelo
  • los intentos fallan siempre igual
  • revirtiendo el workspace entre intentos

Evita y Comprueba es donde suele estar el valor. Haz es la sección que todo el mundo escribe.

El cuerpo de la tarjeta de arriba es una traducción. El original en inglés es lo que importa la CLI, lo que lee el agente en ejecución y lo que atestigua el hash de abajo.

Disparador

Tienes un bucle que ejecuta un intento, lo juzga, y ejecuta otro con feedback: un agente con un verificador, un corrector de código contra una suite de pruebas, una tubería de generar-y-comprobar. El presupuesto es de más de dos intentos, y el workspace se revierte entre ellos, de modo que cada intento empieza limpio.

No aplica a un reintento idempotente sobre un transporte inestable — una llamada de red que falló por razones ajenas a lo que enviaste. Ahí no hay nada que aprender del intento 1, y arrastrarlo hacia adelante es solo carga.

Haz

  1. Guarda los intentos en una lista, no en una variable que reasignas. Un registro por intento: la salida del verificador, el parche que el intento escribió realmente, y qué paso de herramienta falló primero.
  2. Toma el parche del snapshot del workspace, antes de la reversión — el diff real, no la descripción que el modelo hace de lo que cambió. La reversión es lo que hace esto necesario: una vez que el árbol vuelve atrás, nada en disco registra tampoco el camino equivocado, así que el siguiente intento no tiene obstáculo para volver a derivar el mismo.
  3. Compón el prompt de reintento con todos los registros, del más antiguo al más reciente, cada uno etiquetado con su número de intento y su veredicto, bajo un encabezado que diga que estos ya se probaron y se revirtieron.
  4. Acota cada registro. Chimera limita un diff realimentado a 2000 caracteres y lo trunca con un marcador; un historial de tres intentos sin acotar dominará el prompt.
  5. Deduplica por firma de fallo. Si dos intentos fallaron de la misma manera, conserva uno y registra que se repitió — la repetición es la señal, la segunda copia no es información nueva.
  6. Cuando la firma se repite, deja de añadir y cambia algo estructural: replanifica con las causas acumuladas como contexto del planificador (TaskLedger.context() las renderiza bajo "Why earlier attempts failed (do NOT repeat these):"), o escala a un modelo más fuerte. Más feedback sobre el mismo callejón sin salida no saca del callejón sin salida.
  7. Emite un evento contable cada vez que inyectes historial, para que un brazo del benchmark pueda demostrar que la inyección siquiera se disparó.

Evita

La sobrescritura. En chimera/core/autonomous.py el feedback del bucle se reconstruye en cada ronda:

feedback = "\n\n".join(p for p in (fb, _verify_fb) if p) or "The attempt did not pass verification."

de modo que el intento 3 se compone con el fallo del intento 2 y con nada del intento 1. Arrastrarlo hacia adelante significa añadir a una estructura en su lugar — esbozado, no citado, porque la versión que acumula es lo que esta tarjeta defiende y no lo que el archivo hace hoy:

records.append(record_for(index, verdict, patch))   # one entry per attempt
feedback = render(records)                          # every attempt, oldest first

Sé preciso sobre qué mitad ya existe cuando leas esto en Chimera: el contenido del feedback está bien cubierto — --diff-feedback le muestra al reintento el parche que realmente escribió (chimera/core/autonomous.py, limitado a _DIFF_FEEDBACK_MAX_CHARS = 2000), y TaskLedger acumula causas para el planificador. Lo que no está cubierto es la acumulación entre intentos de la línea de arriba. Una tarjeta que presentara todo esto como faltante estaría discutiendo contra trabajo ya hecho.

Evita también decirle al reintento que falló sin mostrarle qué escribió. "The attempt did not pass verification" más una prueba que falla basta para que un modelo lo intente otra vez, y no basta para que lo intente de otra manera — el parche equivocado le resulta invisible y el workspace ya no lo contiene, así que volver a derivarlo es el camino de menor resistencia.

Y evita arrastrar solo la prosa del gestor descartando la salida del verificador. El assert que falla es la línea más accionable de todo el bucle; el párrafo de un revisor sobre ella es una paráfrasis con estrictamente menos información.

Comprueba

Instrumenta el compositor, ejecuta una tarea que sabes que falla tres veces, y busca con grep en el prompt del intento 3 una cadena que solo exista en el intento 1 — un nombre de archivo que tocó, un identificador de su diff. Está o no está; no hay crédito parcial.

Segunda comprobación, igual de binaria: cuenta las inyecciones. Una ejecución donde el historial nunca se ensambló porque la guarda estaba mal, o porque la lista de diffs estaba vacía, no midió absolutamente nada — y un brazo de benchmark construido sobre eso mide la fontanería, no la idea. Si el contador marca cero, el resultado es nulo sin importar lo que diga la tasa de éxito.

Riesgo

El anclaje es la contrahipótesis registrada, no una hipótesis lejana: mostrarle a un modelo el parche equivocado puede fijar su atención en ese parche y producir variaciones de un enfoque muerto en lugar de uno distinto. Por eso el comportamiento es opcional y está medido en Chimera (--diff-feedback) en vez de estar activado por defecto. Trátalo como una afirmación a probar en tus propias tareas, no como una mejora zanjada.

El segundo costo es el presupuesto de contexto. Tres diffs, tres volcados del verificador y una revisión del gestor pueden empujar el prompt más allá de su umbral de compactación — y entonces un compactador sin restauración descartará exactamente el historial acumulado que pagaste por construir. Acota los registros y conoce tu presupuesto antes de activar esto, o los dos mecanismos pelearán y el síntoma visible no será ninguno de los dos.

Cómo usarla

La tarjeta es un dato. Clona el repositorio e impórtala por ruta: lo que llega por la red se trata como contaminado y queda retenido a la espera de aprobación, que es el comportamiento deseable y la razón por la que aquí no hay un instalador de una línea.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/chimera-carry-the-failure-forward/SKILL.md

Integridad

SHA-256 del archivo tal como se publicó. Quien lo importe puede comprobar que lo que recibió es lo que mostró esta página.

62dcc2aa830e5eb35c554bebf2c1a24454a054bf17bf152ccd59f3497b5e043d

Lee la tarjeta en el repositorio