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
| Palabra | Qué significa |
|---|---|
| Afirmación | una cosa que dice una respuesta sobre la entrada |
| Prueba | el hecho conocido con el que se puede comprobar una afirmación |
| Inventada | una afirmación sobre algo que no está en la entrada |
| Sin comprobar | una afirmación sin ningún hecho con que comprobarla |
| Veredicto | el 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ón | Hecho que se tiene | Veredicto |
|---|---|---|
| Hay 2 gatos | gatos: 2 | respaldada |
| Hay 3 gatos | gatos: 2 | error de número |
| Hay un perro | ningún perro en la lista | inventada |
| La puerta es roja | sin color anotado para la puerta | sin 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
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
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
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
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
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
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
docker exec -w /home/node/project agent node check5.jsSe 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ínea | Qué muestra |
|---|---|
| hechos {"R":3,"A":1,"V":1} | Lo que el script contó en su cuadrícula de letras |
| count R 3: respaldada | La afirmación coincide con la cuenta |
| count A 2: error de número | La cuenta era 1 |
| count M 1: inventada | No hay ninguna M en la cuadrícula |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.