¿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

Convertir comentarios de usuarios en casos

Después de esta lección: Puedo convertir lo que dicen los usuarios sobre las respuestas en mejores casos.

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

Un pulgar abajo es un caso gratis

Un bucle de comentarios convierte lo que dicen los usuarios sobre las respuestas en casos con los que pruebas cada cambio. Importa porque los usuarios encuentran las preguntas que no imaginaste. Un pulgar abajo con una corrección es uno de los mejores casos de prueba posibles.

También lleva palabras personales, así que debes decidir quién puede verlo y cuánto tiempo se guarda.

Al final de esta lección

Nota

Puedo convertir lo que dicen los usuarios sobre las respuestas en mejores casos.

Palabras clave

PalabraQué significa
Comentariouna valoración o corrección que un usuario da a una respuesta
Correcciónla respuesta que el usuario dice que debía ser
Casouna pregunta con la respuesta que esperas
Conservacióncuánto tiempo se guarda un registro antes de borrarlo
Accesoquién puede leer un registro

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

Una corrección se convierte en caso

No todo comentario es un caso. Un pulgar abajo sin corrección dice que algo va mal, pero no qué sería lo correcto. Un pulgar arriba no tiene nada que arreglar.

Guarda la pregunta y la respuesta corregida. Deja fuera a quién lo dijo. Un caso con un id de usuario o un correo es un dato personal que ahora tienes que proteger.

Ejemplo resuelto: tres comentarios

ValoraciónCorrección¿Es un caso?
abajoA las 18:00 los domingos.Sí: la pregunta y esa respuesta
abajo(ninguna)No: no hay nada esperado
arriba(ninguna)No: nada que arreglar

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

Decide quién lo ve y cuánto tiempo

Los comentarios sin tratar son para las pocas personas que mejoran la función. Los casos que salen de ellos sirven a todo el equipo porque no contienen a nadie.

Fija una edad de conservación y borra los comentarios brutos que la pasen. En el Run la edad es un número de cada registro, así que todos ven el mismo resultado. Un sistema real compara fechas.

Un error frecuente

Advertencia

Mucha gente cree que guardar más comentarios durante más tiempo es siempre mejor. Los comentarios brutos llevan lo que escribió la gente, a veces datos personales. Guarda el caso, borra el resto según un calendario y escribe cuánto tiempo.

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 bucle de comentarios, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' '' 'const KEEP_DAYS = 30; // un comentario más antiguo se borra' 'const feedback = [' '  { id: \"f1\", rating: \"down\", question: \"¿A qué hora cierra la tienda?\", fix: \"A las 18:00 los domingos.\", user: \"u17\", age: 3 },' '  { id: \"f2\", rating: \"up\", question: \"¿Dónde está mi pedido?\", fix: \"\", user: \"u22\", age: 5 },' '  { id: \"f3\", rating: \"down\", question: \"¿Puedo devolver unas zapatillas?\", fix: \"\", user: \"u31\", age: 12 },' '  { id: \"f4\", rating: \"down\", question: \"¿Enviáis a Canarias?\", fix: \"Sí, en 3 días.\", user: \"u40\", age: 45 },' '];' > 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 bucle de comentarios, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Un caso guarda la pregunta y la respuesta esperada, nunca al usuario.' 'function toCase(f) {' '  if (f.rating === \"down\" && f.fix.length > 0) return { id: f.id, question: f.question, expected: f.fix };' '  return null;' '}' >> 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 bucle de comentarios, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  feedback.forEach(function (f) {' '    if (f.age > KEEP_DAYS) {' '      console.log(f.id + \": más antiguo que \" + KEEP_DAYS + \" días, borrado\");' '      return;' '    }' '    const c = toCase(f);' '    console.log(f.id + \": \" + (c ? \"caso nuevo: \" + c.question + \" -> \" + c.expected : \"sin caso\"));' '  });' '  const q = \"En una frase, ¿qué debe comprobar una prueba de este caso? Pregunta: ¿A qué hora cierra la tienda? Esperado: A las 18:00 los domingos.\";' '  const r = await ask([{ role: \"user\", content: q }], \"Debe comprobar que la respuesta dice las 18:00 y que menciona los domingos.\", 60);' '  console.log(\"Una comprobación posible: \" + r.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 bucle de comentarios

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.

Una salida posible

LíneaQué muestra
f1: caso nuevo: ¿A qué hora cierra la tienda? -> ...Un abajo reciente con corrección
f2: sin caso y f3: sin casoUn pulgar arriba, y un abajo sin corrección
f4: más antiguo que 30 días, borradoLa regla de conservación aplicada
Una comprobación posible: ...Tu propia llamada. Cambia en cada ejecución, o dice Muestra grabada

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.