¿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

Cómo pedir opiniones sobre las respuestas

Después de esta lección: Puedo recoger opiniones que la gente da de verdad.

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

Pulgares que nadie pulsa

Pedir opinión es dejar que una persona diga si una respuesta le sirvió, con el menor esfuerzo posible. Importa porque una opinión que nadie da no enseña nada.

Una función de chat muestra un pulgar arriba y otro abajo bajo cada respuesta. Al cabo de un mes, solo una de cada cincuenta personas ha pulsado algo. El equipo no sabe qué falla.

Al final de esta lección

Nota

Puedo recoger opiniones que la gente da de verdad.

Palabras clave

PalabraQué significaEjemplo
Opiniónlo que una persona te dice de una respuesta
Motivopor qué una persona no quedó contentademasiado larga
Tasa de respuestala parte de personas que contestan
Preguntael texto que pide la opinión
Lista de pendienteslos arreglos que esperan su turno

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

Que lo primero sea un toque

Pide primero un voto. Cuesta un toque. Solo después de un pulgar abajo, ofrece una lista corta de motivos para tocar: incorrecta, demasiado larga, no era lo que pedí.

Un cuadro de texto libre, solo, recoge casi nada. Una lista de motivos consigue un motivo de mucha más gente, y se puede contar.

Cuenta y actúa sobre el mayor

Cuenta los motivos de los pulgares abajo. Arregla primero el mayor. Avisa cuando lo hayas hecho, porque quien ve que se usa su opinión da más.

No preguntes siempre. Una regla como «preguntar cada cinco respuestas» mantiene bajo el coste para la persona.

Un error frecuente

Advertencia

Mucha gente cree que cuanta más opinión, mejor, y pregunta en cada respuesta. Entonces la gente deja de contestar. Pregunta pocas veces y con un toque. Juzga el diseño por su tasa de respuesta: la parte de personas que contestaron.

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 contador de opiniones, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const VOTES = [' '  { vote: \"arriba\", reason: \"\" },' '  { vote: \"abajo\", reason: \"incorrecta\" },' '  { vote: \"abajo\", reason: \"demasiado larga\" },' '  { vote: \"arriba\", reason: \"\" },' '  { vote: \"abajo\", reason: \"incorrecta\" },' '  { vote: \"abajo\", reason: \"\" },' '  { vote: \"arriba\", reason: \"\" },' '  { vote: \"abajo\", reason: \"incorrecta\" },' '  { vote: \"abajo\", reason: \"demasiado larga\" },' '  { vote: \"arriba\", reason: \"\" },' '];' > feedback.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 contador de opiniones, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function countReasons(votes) {' '  const counts = {};' '  for (const v of votes) {' '    if (v.vote === \"abajo\" && v.reason.length > 0) {' '      counts[v.reason] = (counts[v.reason] || 0) + 1;' '    }' '  }' '  return counts;' '}' >> feedback.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 contador de opiniones, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  const counts = countReasons(VOTES);' '  const downs = VOTES.filter(function (v) { return v.vote === \"abajo\"; }).length;' '  const named = Object.values(counts).reduce(function (a, b) { return a + b; }, 0);' '  console.log(\"votos \" + VOTES.length + \" abajo \" + downs + \" con motivo \" + named);' '  console.log(\"tasa de respuesta \" + Math.floor((named * 100) / downs) + \" por ciento\");' '  console.log(\"motivos \" + JSON.stringify(counts));' '  const msg = \"Escribe una pregunta corta que pida por qué una respuesta no fue útil.\";' '  const reply = await ask([{ role: \"user\", content: msg }], \"¿Qué le pasaba a esta respuesta?\", 25);' '  console.log(\"pregunta: \" + reply.text);' '}' 'main();' >> feedback.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 el contador de opiniones

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

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

Qué imprime el Run

LíneaQué muestra
votos 10 abajo 6 con motivo 5Seis pulgares abajo, cinco dieron motivo
tasa de respuesta 83 por ciento5 de 6 personas lo dieron, redondeado hacia abajo
motivos {"incorrecta":3,"demasiado larga":2}Incorrecta es el mayor, así que se arregla primero

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.