¿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

Elegir el tamaño de un modelo

Después de esta lección: Puedo elegir el tamaño de un modelo para una tarea a partir de una prueba y un precio.

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

El modelo mayor no siempre es el mejor

Elegir el tamaño de un modelo es hacer coincidir el modelo más pequeño que hace bien una tarea con esa tarea. Un modelo pequeño en una tarea concreta puede igualar a uno grande por una fracción del precio.

Importa porque el precio de cada llamada se acumula, y la espera también. El tamaño adecuado se halla probando, nunca adivinando.

Al final de esta lección

Nota

Puedo elegir el tamaño de un modelo para una tarea a partir de una prueba y un precio.

Palabras clave

PalabraQué significa
Tarea concretaun trabajo pequeño y claro
Conjunto de pruebacasos fijos con los que se puntúa un modelo
Tasa de aciertosla parte de casos que un modelo acierta
Precio por llamadalo que cuesta cada petición
Suficientemente buenouna tasa de aciertos que la tarea acepta

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

Prueba cada tamaño con los mismos casos

Escribe un conjunto de prueba: una lista fija de casos reales de tu tarea, como diez mensajes de clientes que hay que clasificar. Pasa cada tamaño de modelo por los mismos casos y anota acierto o fallo en cada uno.

La tasa de aciertos es la parte que acierta. El módulo 68 trata más a fondo los conjuntos de prueba. Esta lección usa resultados grabados, así que ahora no se ejecuta nada.

Resultados grabados en seis mensajes

TamañoAciertos de 6Tasa de aciertosPrecio por 1000 llamadas
pequeño466,7%2
mediano583,3%9
grande6100%40

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

Mira los casos que falla un modelo pequeño

Una tasa de aciertos oculta qué casos fallan. El modelo pequeño de arriba falla los mensajes 5 y 6. Léelos. Si en la vida real son raros, el pequeño puede seguir valiendo.

Después calcula el precio por acierto: el precio dividido entre la parte que aprueba. Un modelo barato que falla a menudo puede salir más caro por acierto que otro más caro.

Un error frecuente

Advertencia

Mucha gente cree que el modelo más grande es la opción segura. Es el más caro y es más lento. Si un tamaño menor aprueba tu propio conjunto de prueba, es suficientemente bueno. Elige el tamaño más barato que aprueba y vuelve a probar cuando cambie la tarea.

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 selector de tamaño, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const recorded = {' '  pequeño: { cost: 2, passed: [1, 1, 1, 1, 0, 0] },' '  mediano: { cost: 9, passed: [1, 1, 1, 1, 1, 0] },' '  grande: { cost: 40, passed: [1, 1, 1, 1, 1, 1] },' '};' 'function wins(m) {' '  return m.passed.reduce(function (a, b) { return a + b; }, 0);' '}' 'function rate(m) {' '  return wins(m) * 100 / m.passed.length;' '}' > choose.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 selector de tamaño, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function perCorrect(m) {' '  return m.cost * m.passed.length / wins(m);' '}' 'function choose(need) {' '  let best = \"ninguno\";' '  let bestCost = Infinity;' '  for (const name of Object.keys(recorded)) {' '    const m = recorded[name];' '    if (rate(m) >= need && m.cost < bestCost) { best = name; bestCost = m.cost; }' '  }' '  return best;' '}' >> choose.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 selector de tamaño, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"Resultados grabados en 6 mensajes (no se ejecutan ahora):\");' '  for (const name of Object.keys(recorded)) {' '    const m = recorded[name];' '    console.log(name + \": \" + rate(m).toFixed(1) + \"% de aciertos, precio \" + m.cost + \", precio por acierto \" + perCorrect(m).toFixed(2));' '  }' '  console.log(\"si hace falta 80%: \" + choose(80) + \" | 95%: \" + choose(95) + \" | 100%: \" + choose(100));' '  const q = \"En una frase corta, ¿por qué probar un modelo pequeño con tus propios casos antes de elegirlo?\";' '  const sample = \"Un modelo pequeño puede ir bien en una tarea concreta, y solo tus casos muestran dónde falla.\";' '  const reply = await ask([{ role: \"user\", content: q }], sample, 60);' '  console.log(\"el modelo dijo: \" + reply.text);' '}' 'main();' >> choose.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 selector de tamaño

Comando
docker exec -w /home/node/project agent node choose.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
pequeño: 66.7% de aciertos, precio 2, precio por acierto 3.00Barato, y no tan caro por acierto como parece
grande: 100.0% de aciertos, precio 40, ... 40.00Siempre acierta y es el más caro
si hace falta 80%: mediano | 95%: grandeLa necesidad decide el tamaño
el modelo dijo: ...Una frase. Las palabras cambian en cada ejecución

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.