¿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

Riesgo de proveedor y de modelo en IA

Después de esta lección: Puedo decir cuánto depende una función de un proveedor y qué no tiene respaldo.

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

Qué pasa si el proveedor cambia mañana

El riesgo de proveedor mide cuánto depende una función de un proveedor que no controlas. Importa porque un proveedor puede caerse, subir un precio o retirar un modelo, y tu función se para o cuesta mucho más.

No puedes quitar la dependencia, pero sí verla, puntuarla y preparar una salida.

Al final de esta lección

Nota

Puedo decir cuánto depende una función de un proveedor y qué no tiene respaldo.

Palabras clave

PalabraQué significa
Dependenciaalgo sin lo que la función no puede trabajar
Punto único de fallouna dependencia sin respaldo
Retiradaun proveedor que retira un modelo que usas
Tiempo de cambiolos días que lleva sustituir una dependencia
Plan de salidalos pasos escritos para dejar un proveedor

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

Enumera de qué depende la función

Escribe cada dependencia: el modelo, los datos que lee, las herramientas que llama. De cada una pregúntate tres cosas. ¿Hay respaldo? ¿Cuánto costaría sustituirla? ¿Qué les pasa a los usuarios mientras tanto?

Una dependencia sin respaldo es un punto único de fallo. Puntúala y trabaja desde lo más alto de la lista.

Ejemplo resuelto: dos dependencias

DependenciaPesoSin respaldo60 días para sustituirPuntos
Modelo de chat3se duplica a 6suma 17
Búsqueda de documentos2tiene respaldosolo 10 días2

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

Planea la salida antes de necesitarla

Un proveedor puede retirar un modelo, cambiar su precio o sufrir una caída larga. Decide ya qué harías: un segundo modelo, una caché, una respuesta más simple o una pausa.

Escribe el plan de salida y prueba la segunda vía de vez en cuando. Un respaldo que nunca ejecutas puede no funcionar el día que hace falta. El módulo sobre coste, trazas y fiabilidad enseña a elegir un respaldo para cada fallo.

Un error frecuente

Advertencia

Mucha gente cree que un proveedor grande no puede fallar, así que no hace falta plan. Los proveedores grandes también se caen, cambian precios y retiran modelos. Juzga cada dependencia por lo que les pasa a tus usuarios cuando desaparece, no por el tamaño del proveedor.

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 puntuación de dependencias, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' '' '// Un diseño inventado: de qué depende la función, si hay respaldo y los días para sustituirlo.' 'const design = [' '  { name: \"Modelo de chat\", kind: \"model\", fallback: false, days: 60 },' '  { name: \"Búsqueda de documentos\", kind: \"data\", fallback: true, days: 10 },' '  { name: \"API de pagos\", kind: \"tool\", fallback: false, days: 20 },' '  { name: \"Voz a texto\", kind: \"model\", fallback: true, days: 45 },' '];' 'const WEIGHT = { model: 3, data: 2, tool: 1 };' > vendor.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 puntuación de dependencias, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function score(d) {' '  let s = WEIGHT[d.kind];' '  if (d.fallback === false) s = s * 2;' '  if (d.days > 30) s = s + 1;' '  return s;' '}' >> vendor.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 puntuación de dependencias, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  let total = 0;' '  design.forEach(function (d) {' '    total = total + score(d);' '    console.log(d.name + \": \" + score(d) + (d.fallback ? \"\" : \" SIN RESPALDO\"));' '  });' '  console.log(\"Total: \" + total);' '  const q = \"Enumera tres preguntas cortas para hacer a un proveedor antes de que una función dependa de él.\";' '  const r = await ask([{ role: \"user\", content: q }], \"1. ¿Con cuánto aviso comunicáis un cambio de precio? 2. ¿Cuánto tiempo mantenéis una versión antigua? 3. ¿Cómo exporto mis datos?\", 90);' '  console.log(\"Una lista posible: \" + r.text);' '}' 'main();' >> vendor.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 puntuación de dependencias

Comando
docker exec -w /home/node/project agent node vendor.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
Modelo de chat: 7 SIN RESPALDOLa puntuación más alta y un punto único de fallo
Búsqueda de documentos: 2Tiene respaldo y un tiempo de cambio corto
API de pagos: 2 SIN RESPALDOSin respaldo, pero con poco peso
Voz a texto: 4Tiene respaldo, pero tarda en reemplazarse
Total: 15El diseño en conjunto
Una lista 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.