Multiagente y Orquestación|INEMA.CLUB-PRO

Clase 4 · 18 min

Generador × evaluador

El multiagente más útil tiene dos roles: uno hace, otro revisa. El generador siempre dice "listo"; quien decide es un evaluador separado que mira solo el artefacto y devuelve un dictamen. En esta clase conectas los dos en un ciclo con tope de rondas, primero con un generador falso que miente y después con Claude de verdad.

Empezar la clase
Impresora 3D con una pieza recién impresa y, enfrente, un banco de medición comprobando una pieza igual.

En esta clase vas a

  1. 1Por qué el evaluador es otro proceso, no otro párrafo del prompt
  2. 2El verificar.mjs del kit como evaluador por código
  3. 3El dictamen que vuelve al generador y el tope de rondas
  4. 4El equipo de tres roles en una sesión

Objetivo: conectar un generador a un evaluador separado que solo mira el artefacto y devuelve un dictamen, con tope de rondas.

01El lazo generador × evaluador

El generador nunca se pone su propia nota. Haz clic en cada etapa.

Haz clic en cada bloque del diagrama para ver qué hace.

La concordancia entre dos modelos no es prueba independiente: pueden compartir la misma suposición equivocada. El criterio por código va primero.

02El lazo en 25 líneas

El evaluador es el verificar.mjs del proyecto de entrenamiento; el generador es cualquier comando que lea el pedido por stdin.

gera-avalia.sh · guárdalo en ~/treino-multi/
#!/usr/bin/env bash
# gera-avalia.sh — el generador hace; el evaluador (otro proceso, solo el artefacto) comprueba; hasta MAX rondas.
# Uso: gera-avalia.sh <goal.md> "<pedido>"
#   GERADOR = comando que lee pedido + dictamen por stdin (por defecto: claude -p --permission-mode acceptEdits)
#   el evaluador es el verificar.mjs del kit: ejecuta cada criterio `comando` → `salida esperada`
set -u
GOAL="${1:?uso: gera-avalia.sh <goal.md> \"<pedido>\"}"; PEDIDO="${2:?pedido}"
GERADOR="${GERADOR:-claude -p --permission-mode acceptEdits}"; MAX="${MAX:-3}"; parecer=""
mkdir -p .gera-avalia
for r in $(seq 1 "$MAX"); do
  printf '%s\n%s\n' "$PEDIDO" "$parecer" | timeout 600 $GERADOR > .gera-avalia/gerador-$r.log 2>&1
  rc=$?
  if [ $rc -ne 0 ]; then   # el generador cayó o superó el tope: no evalúa lo que sobró de una ronda anterior
    echo "rodada $r · gerador falhou (rc=$rc) → REPROVADO"; parecer="A rodada anterior falhou (rc=$rc)."; continue
  fi
  echo "rodada $r · gerador diz: $(tail -1 .gera-avalia/gerador-$r.log)"
  if node runtime/scripts/verificar.mjs "$GOAL" > .gera-avalia/avaliador-$r.log 2>&1; then
    echo "rodada $r · avaliador: $(tail -1 .gera-avalia/avaliador-$r.log) → APROVADO"; exit 0
  fi
  echo "rodada $r · avaliador: $(tail -1 .gera-avalia/avaliador-$r.log) → REPROVADO"
  parecer="O avaliador reprovou. Trecho do parecer: $(grep -A2 '^FALHA' .gera-avalia/avaliador-$r.log)"
done
echo "PARADO: $MAX rodadas sem aprovação"; exit 2
goal-saudacao.md · los criterios (el generador no los edita)
# Goal — saludo

## Criterios de terminado
- [ ] `cat saudacao.txt` → `Olá, comunidade INEMA`
- [ ] `wc -l < saudacao.txt` → `1`
Terminal · ensayo sin cuota (generador falso que se equivoca y luego corrige)
cd ~/treino-multi && chmod +x gera-avalia.sh && rm -f saudacao.txt
E=${TMPDIR:-/tmp}/ensaio-multi/gera; rm -rf $E && mkdir -p $E
cat > $E/gerador-falso.sh <<'SH'
#!/usr/bin/env bash
entrada=$(cat)
case "$entrada" in
  *reprovou*) echo "Olá, comunidade INEMA" > saudacao.txt ;;   # 2.ª vez: leyó el dictamen
  *) printf 'Olá comunidade INEMA\n\n' > saudacao.txt ;;      # 1.ª vez: coma faltante y una línea de más
esac
echo "Pronto! saudacao.txt criado conforme pedido."
SH
chmod +x $E/gerador-falso.sh
GERADOR=$E/gerador-falso.sh ./gera-avalia.sh goal-saudacao.md "Crie saudacao.txt com uma linha: Olá, comunidade INEMA"
echo "saída: $?"
Terminal · real, con Claude como generador
cd ~/treino-multi && rm -f saudacao.txt
./gera-avalia.sh goal-saudacao.md "Crie saudacao.txt com uma linha: Olá, comunidade INEMA" < /dev/null
echo "saída: $?"; cat saudacao.txt
Ejemplo del repositorio
## ensaio (gerador falso)
rodada 1 · gerador diz: Pronto! saudacao.txt criado conforme pedido.
rodada 1 · avaliador: 0/2 critérios OK → REPROVADO
rodada 2 · gerador diz: Pronto! saudacao.txt criado conforme pedido.
rodada 2 · avaliador: 2/2 critérios OK → APROVADO
saída: 0

## real (Claude como gerador)
rodada 1 · gerador diz: Terminei: criei o `saudacao.txt`. Conferi o arquivo e ele tem uma linha só: `Olá, comunidade INEMA`. Não fiz commit.
rodada 1 · avaliador: 2/2 critérios OK → APROVADO
saída: 0
Olá, comunidade INEMA

En la ronda 1 del ensayo el generador dijo "listo" con la coma faltante y una línea de más; el evaluador reprobó los dos criterios. Los títulos con ## separan las dos ejecuciones.

03Dentro de la sesión: el equipo de tres papeles

La receta R2 del proyecto de entrenamiento hace el mismo lazo con subagentes.

1. planejador

Devuelve hasta 5 pasos y los criterios en el formato comando → salida esperada, más los riesgos que piden confirmación.

En el kit, corre en un nivel tope; herramientas Read, Grep, Glob.

04Práctica

El ensayo prueba el loop; la ronda real prueba que funciona con un modelo.

E7 · El loop con generador falso

10 min

Guarda gera-avalia.sh y goal-saudacao.md y ejecuta el ensayo. Después cambia el generador falso por uno que nunca corrige.

Listo cuando: el ensayo termina en rodada 2 · avaliador: 2/2 critérios OK → APROVADO y saída: 0; el terco termina en PARADO: 3 rodadas sem aprovação y saída: 2.

E8 · El loop con Claude

10 min

Antes, haz commit del goal (git add goal-saudacao.md && git commit -qm goal), para que git avise si cambia. Ejecuta la versión real. Después escribe un goal tuyo, con 2 o 3 criterios, para una tarea pequeña de tu proyecto, y ejecútalo de nuevo.

Listo cuando: las dos rondas terminan con → APROVADO y saída: 0 en hasta 3 rondas, y git diff --exit-code -- goal-saudacao.md → código 0 (el generador no tocó los criterios).

05Prueba de la clase

Pregunta 1 de 4

El generador escribió "Pronto! criado conforme pedido". ¿Qué decide eso?competencia

06En tres frases

Dos rolesUno hace, otro revisa, en procesos separados; el generador nunca se pone su propia nota.
Artefacto y dictamenEl evaluador lee lo que quedó en disco y le devuelve al generador el fragmento que falló.
Tope y fallaMAX rondas y para con 2; una ronda con el generador caído se reprueba sin evaluar.

Para ir más allá

Clase anteriorSiguiente clase