¿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 pasar de la IA a una persona

Después de esta lección: Puedo diseñar el punto en que una persona toma el relevo.

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

Pedir una persona y recibir un bucle

Pasar a una persona es traspasar una conversación de la función de IA a alguien que puede resolverla. Importa porque una función buena sabe cuándo parar.

Una clienta escribe «quiero hablar con una persona». El chat responde «¡Puedo ayudarte con eso!» y repite la misma pregunta. Ella cierra la aplicación y llama a la tienda.

Al final de esta lección

Nota

Puedo diseñar el punto en que una persona toma el relevo.

Palabras clave

PalabraQué significa
Traspasopasar una conversación a una persona
Disparadoruna regla que inicia un traspaso
Nota de contextolo que se cuenta a la persona para no repetir
Colala lista de quienes esperan a una persona
Devolucióndar la conversación otra vez al modelo

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

Cuatro disparadores deciden cuándo pasar

Escribe los disparadores como reglas, para poder probarlos. Hay cuatro habituales. La persona pidió a un humano. El tema es uno que un modelo no debe decidir, como una devolución. La confianza del modelo es baja. La conversación lleva demasiados turnos.

El primero debe funcionar siempre. Nadie debería discutir con una máquina para llegar a una persona.

La nota y la espera

La persona que toma el relevo no debe pedir a la clienta que empiece de nuevo. Pásale una nota corta: los motivos, el último mensaje y el número de turnos.

Di a la clienta cuánto durará la espera, con un número real. Cuando la persona termine, decide si la conversación vuelve al modelo o se cierra.

Un error frecuente

Advertencia

Mucha gente cree que pasar a una persona significa que la función falló, así que dificulta llegar a ella. Es al revés. Un traspaso rápido y claro conserva a la clienta. Facilita pedirlo y manda el contexto con la conversación.

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 revisor de disparadores, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const RULES = { maxTurns: 6, minConfidence: 50, topics: [\"devolución\", \"queja\"] };' 'const CHATS = [' '  { id: \"c1\", turns: 3, confidence: 90, topic: \"horario\", asked: false, last: \"¿A qué hora abren?\" },' '  { id: \"c2\", turns: 4, confidence: 80, topic: \"devolución\", asked: false, last: \"Quiero que me devuelvan el dinero.\" },' '  { id: \"c3\", turns: 8, confidence: 40, topic: \"envío\", asked: false, last: \"Todavía no ha llegado.\" },' '  { id: \"c4\", turns: 2, confidence: 95, topic: \"horario\", asked: true, last: \"Quiero hablar con una persona.\" },' '];' > handover.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 revisor de disparadores, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function reasons(c) {' '  const out = [];' '  if (c.asked) out.push(\"pidió\");' '  if (RULES.topics.includes(c.topic)) out.push(\"tema\");' '  if (c.confidence < RULES.minConfidence) out.push(\"confianza\");' '  if (c.turns > RULES.maxTurns) out.push(\"turnos\");' '  return out;' '}' >> handover.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 revisor de disparadores, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  for (const c of CHATS) {' '    const why = reasons(c);' '    console.log(c.id + \" \" + (why.length > 0 ? \"pasa a una persona \" + why.join(\"+\") : \"sigue con el modelo\"));' '  }' '  const note = CHATS[2];' '  console.log(\"nota \" + JSON.stringify({ id: note.id, reasons: reasons(note), last: note.last, turns: note.turns }));' '  const msg = \"Escribe una frase corta que diga a una clienta que una persona toma el relevo y que no tiene que repetir nada.\";' '  const reply = await ask([{ role: \"user\", content: msg }], \"Ahora te atiende una persona. No hace falta que repitas nada.\", 30);' '  console.log(\"la clienta ve: \" + reply.text);' '}' 'main();' >> handover.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 revisor de disparadores

Comando
docker exec -w /home/node/project agent node handover.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
c1 sigue con el modeloNo saltó ningún disparador
c2 pasa a una persona temaUna devolución es un tema para una persona
c3 pasa a una persona confianza+turnosDos disparadores a la vez
c4 pasa a una persona pidióLa clienta lo pidió, así que siempre
nota {"id":"c3",...}Lo que recibe la persona

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.