¿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

Medir una tasa de alucinaciones

Después de esta lección: Puedo medir con qué frecuencia una respuesta dice lo que su fuente no dice.

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

¿Con qué frecuencia inventa datos una respuesta?

Una alucinación es una afirmación de una respuesta que su fuente no respalda. Un bot de ayuda que dice que una biblioteca abre a las 8 cuando abre a las 9 ha alucinado.

Para controlarlo, lo mides como una tasa y dices cuánto te fías de esa tasa.

Al final de esta lección

Nota

Puedo medir con qué frecuencia una respuesta dice lo que su fuente no dice.

Palabras clave

PalabraQué significa
Afirmaciónun hecho que dice una respuesta
Fuenteel texto en el que debe apoyarse la respuesta
Sin respaldouna afirmación que la fuente no sostiene
Tasalas afirmaciones sin respaldo como parte del total
Intervaloel margen en el que puede estar de verdad una tasa

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

Comprueba cada afirmación con la fuente

Parte una respuesta en afirmaciones, un hecho en cada una. Para cada afirmación, pregunta si la fuente lo dice.

Una primera pasada sencilla usa palabras clave. Una afirmación está respaldada cuando todas las palabras clave que necesita están en la fuente. No lo está cuando falta una.

Ejemplo resuelto: cuatro afirmaciones sobre una fuente

AfirmaciónPalabras clave¿Están en la fuente?Veredicto
Abre a las 9abre, 9Las dosRespaldada
Tiene 30 ordenadoresordenadores, 30Falta el 30Sin respaldo
El retraso cuesta 20 céntimosretraso, 20, cuestaLas tresRespaldada
Abre los domingosdomingosFaltaSin respaldo

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

La tasa es un recuento entre otro recuento

Cuenta las afirmaciones sin respaldo. Divide entre todas las afirmaciones y escríbelo como porcentaje. Tres afirmaciones sin respaldo de ocho son el 37,5 %.

Cuenta afirmaciones, no respuestas. Una respuesta con cinco afirmaciones, una de ellas falsa, es una afirmación mala de cinco.

Remuestrea para ver cuánto varía la tasa

Escribe las 40 afirmaciones como 0 si tienen respaldo y 1 si no. Saca 40 de esa lista al azar, devolviendo cada una después de sacarla. Cuenta los unos.

Repite 200 veces y ordena los recuentos. El 6.º y el 195.º marcan el margen. Una semilla fija hace que los sorteos se repitan.

Ejemplo resuelto: 6 sin respaldo de 40

PasoResultado
Afirmaciones y sin respaldo40 y 6
Tasa15 %
Recuento ordenado más bajo del margen2, es decir, el 5 %
Recuento ordenado más alto del margen10, es decir, el 25 %
Qué informar15 %, margen de 5 a 25

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

Un error frecuente

Advertencia

Mucha gente cree que 6 sin respaldo de 40 significa que la tasa real es exactamente el 15 %. Es solo lo que muestra esta muestra. Otras 40 afirmaciones podrían dar el 10 o el 20. Informa de la tasa con su intervalo.

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 la tasa y el intervalo, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const source = \"La Biblioteca del Puerto abre a las 9 y cierra a las 17 de lunes a viernes. Tiene 12 ordenadores. Los socios pueden llevarse 6 libros durante 3 semanas. El retraso cuesta 20 céntimos al día.\";' 'const have = source.toLowerCase().split(\".\").join(\" \").split(\" \");' 'const claims = [' '  \"abre 9\", \"cierra 17\", \"ordenadores 12\", \"ordenadores 30\",' '  \"llevarse 6 libros\", \"semanas 4\", \"retraso 20 cuesta\", \"domingos\",' '].map(function (c) { return c.split(\" \"); });' > rate.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 la tasa y el intervalo, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function supported(needs) {' '  return needs.every(function (w) { return have.indexOf(w) >= 0; });' '}' 'const bad = claims.filter(function (c) { return supported(c) === false; });' 'const flags = \"0001000001000001000000100000100000010000\".split(\"\").map(Number);' >> rate.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 la tasa y el intervalo, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function interval(list, seed) {' '  const n = list.length;' '  const counts = [];' '  let s = seed;' '  for (let r = 0; r < 200; r++) {' '    let total = 0;' '    for (let k = 0; k < n; k++) { s = (s * 16807) % 2147483647; total += list[s % n]; }' '    counts.push(total);' '  }' '  counts.sort(function (a, b) { return a - b; });' '  return [counts[5] * 100 / n, counts[194] * 100 / n];' '}' >> rate.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 la tasa y el intervalo, parte 4

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"sin respaldo: \" + bad.length + \" de \" + claims.length + \" (\" + (bad.length * 100 / claims.length) + \" por ciento)\");' '  const ones = flags.filter(function (f) { return f === 1; }).length;' '  const span = interval(flags, 12345);' '  console.log(\"prueba mayor: \" + ones + \" de \" + flags.length + \" = \" + (ones * 100 / flags.length) + \" por ciento\");' '  console.log(\"intervalo: de \" + span[0] + \" a \" + span[1] + \" por ciento\");' '  const q = \"La fuente dice que la biblioteca abre a las 9. ¿Está respaldada esta afirmación: abre a las 8? Una frase corta.\";' '  const sample = \"No, la fuente dice que abre a las 9, así que la afirmación no está respaldada.\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"el modelo dijo: \" + reply.text);' '}' 'main();' >> rate.js"

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

Ejecuta la tasa y el intervalo

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

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

Lo que imprime el Run

LíneaQué muestra
sin respaldo: 3 de 8 (37.5 por ciento)La comprobación por palabras clave en ocho afirmaciones
prueba mayor: 6 de 40 = 15 por cientoUna lista grabada de 40 afirmaciones
intervalo: de 5 a 25 por cientoEl margen remuestreado
el modelo dijo: ...Una comprobación real del laboratorio. Una muestra grabada si ningún modelo responde

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.