¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Comprobar lo que vio el modelo

Después de esta lección: Puedo comprobar cada afirmación de la descripción de un modelo con hechos conocidos y decidir si acepto la respuesta.

Lección de 75 min7 comandosLaboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

La descripción suena bien, pero ¿es cierta?

Un modelo describe una foto: dos gatos, una pelota roja y un cartel que dice ABIERTO. Suena seguro. Pero un modelo puede añadir un perro que no está, o decir tres gatos cuando son dos.

Esta lección enseña a comprobar cada afirmación con lo que sabes de la entrada.

Al final de esta lección

Nota

Puedo comprobar cada afirmación de la descripción de un modelo con hechos conocidos y decidir si acepto la respuesta.

Palabras clave

PalabraQué significa
Afirmaciónuna cosa que dice una respuesta sobre la entrada
Pruebael hecho conocido con el que se puede comprobar una afirmación
Inventadauna afirmación sobre algo que no está en la entrada
Sin comprobaruna afirmación sin ningún hecho con que comprobarla
Veredictoel resultado de comprobar una afirmación

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Parte una respuesta en afirmaciones

Una respuesta se comprueba mejor si la cortas en afirmaciones, cada una tan pequeña que pueda ser cierta o falsa. «Dos gatos y una pelota roja» son tres afirmaciones.

Solo puedes comprobar una afirmación si tienes un hecho para ella. Los hechos pueden venir de la propia entrada, como contar elementos de una cuadrícula, o de una persona que conoce la imagen.

Cuatro afirmaciones y sus hechos

AfirmaciónHecho que se tieneVeredicto
Hay 2 gatosgatos: 2respaldada
Hay 3 gatosgatos: 2error de número
Hay un perroningún perro en la listainventada
La puerta es rojasin color anotado para la puertasin comprobar

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cada fallo pide un veredicto distinto

Un número equivocado, un color equivocado y una cosa inventada son fallos distintos. Lo inventado es lo peor, porque la respuesta habla de algo que no está.

Por eso la decisión sigue al peor veredicto. Una afirmación inventada significa rechazar. Una equivocada o sin comprobar significa que lo revisa una persona. Solo se acepta una respuesta sin nada malo.

Un error frecuente

Advertencia

Mucha gente acepta una respuesta porque casi todo es correcto. Cuatro afirmaciones ciertas no hacen cierta a una quinta. Comprueba todas. Una sola cosa inventada puede bastar para rechazar toda la respuesta.

Escribe el ayudante del modelo, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// Los tokens de una respuesta, o null si no trae ninguno.' 'function count(data, name) {' '  return data.usage && typeof data.usage[name] === \"number\" ? data.usage[name] : null;' '}' > model.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el ayudante del modelo, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function ask(messages, sample, max) {' '  try {' '    const res = await fetch(base + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"estado \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, inTokens: count(d, \"prompt_tokens\"), outTokens: count(d, \"completion_tokens\"), recorded: false };' '  } catch (error) {' '    console.log(\"Muestra grabada: ningún modelo respondió (\" + error.message + \").\");' '    return { text: sample, inTokens: null, outTokens: null, recorded: true };' '  }' '}' 'module.exports = { ask };' >> model.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el script de comprobación, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const grid = [\"..R...\", \".A..R.\", \"R.....\", \"...V..\"];' 'const claims = [' '  { kind: \"count\", thing: \"R\", value: 3 },' '  { kind: \"count\", thing: \"A\", value: 2 },' '  { kind: \"count\", thing: \"M\", value: 1 },' '  { kind: \"exists\", thing: \"V\" },' '];' > check5.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el script de comprobación, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function facts(g) {' '  const counts = {};' '  for (const row of g) {' '    for (const ch of row) {' '      if (ch === \".\") continue;' '      counts[ch] = (counts[ch] || 0) + 1;' '    }' '  }' '  return counts;' '}' >> check5.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el script de comprobación, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function verdict(counts, c) {' '  if (c.kind === \"exists\") return c.thing in counts ? \"respaldada\" : \"inventada\";' '  if ((c.thing in counts) === false) return \"inventada\";' '  return counts[c.thing] === c.value ? \"respaldada\" : \"error de número\";' '}' >> check5.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el script de comprobación, parte 4

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const counts = facts(grid);' '  console.log(\"hechos \" + JSON.stringify(counts));' '  for (const c of claims) {' '    const value = c.value === undefined ? \"\" : \" \" + c.value;' '    console.log(c.kind + \" \" + c.thing + value + \": \" + verdict(counts, c));' '  }' '  const q = \"En una frase corta, ¿por qué hay que comprobar la descripción de una imagen con la propia imagen?\";' '  const reply = await ask([{ role: \"user\", content: q }], \"Una descripción puede añadir cosas o equivocar un número, así que se comprueba con la imagen.\", 40);' '  console.log(\"respuesta: \" + reply.text);' '}' 'main();' >> check5.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba cuatro afirmaciones grabadas

Comando
docker exec -w /home/node/project agent node check5.js

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Las líneas que imprime

LíneaQué muestra
hechos {"R":3,"A":1,"V":1}Lo que el script contó en su cuadrícula de letras
count R 3: respaldadaLa afirmación coincide con la cuenta
count A 2: error de númeroLa cuenta era 1
count M 1: inventadaNo hay ninguna M en la cuadrícula

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Sobre este laboratorio y su código: Laboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.