Pesos abiertos no significa uso libre
Pesos abiertos quiere decir que los archivos con los números de un modelo se pueden descargar. No quiere decir que puedas hacer con ellos lo que quieras. Una licencia fija las condiciones.
Importa porque una empresa que construye sobre un modelo que no puede usar con fines comerciales puede recibir la orden de parar. Leer las condiciones antes cuesta diez minutos.
Al final de esta lección
Nota
Puedo leer la licencia de un modelo y decir qué me permite hacer.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Pesos | los números aprendidos de un modelo |
| Licencia | las condiciones para usar algo |
| Cláusula | una regla dentro de una licencia |
| Atribución | decir quién lo hizo |
| Límite de uso | un tope, como un número de usuarios |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una licencia dice lo que puedes hacer
Los pesos de un modelo tienen una licencia, y el código que los ejecuta puede tener otra. Lee las dos.
Cada regla es una cláusula. Las cláusulas habituales preguntan cinco cosas. ¿Se permite el uso comercial? ¿Hay un límite de uso? ¿Qué fines están prohibidos? ¿Puedes cambiar el modelo y debes compartir los cambios? ¿Hay que dar atribución?
Cláusulas que revisar, en palabras claras
| Cláusula | Pregunta que hacer |
|---|---|
| Comercial | ¿Puedo ganar dinero con él? |
| Límite de uso | ¿Hay un tope, como un número de usuarios? |
| Usos prohibidos | ¿Mi fin está en la lista? |
| Cambios | ¿Puedo cambiarlo y debo compartir el cambio? |
| Atribución | ¿Debo mostrar quién lo hizo? |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Prueba un uso contra cada cláusula
Anota tu uso: si es comercial, cuántos usuarios tendrá, con qué fin, si cambiarás el modelo y si compartirás los cambios. Luego pruébalo contra cada cláusula, una por una.
Una cláusula que falla basta para decir no permitido. Si todas pasan pero hace falta atribución, el uso está permitido con condiciones.
Un error frecuente
Advertencia
Mucha gente cree que un modelo en una web pública es libre para cualquier uso. Que sea fácil de descargar no dice nada de las condiciones. Lee las cláusulas para tu propio uso antes de construir sobre él. Esta lección es práctica, no asesoramiento jurídico.
Escribe el ayudante del modelo, parte 1
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
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 comprobador de licencias, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const licences = [' ' { name: \"Abierta A\", commercial: true, maxUsers: 1000, banned: [\"armas\"], attribution: true, modify: true, share: false },' ' { name: \"Abierta B\", commercial: false, maxUsers: Infinity, banned: [], attribution: false, modify: true, share: true },' '];' 'const use = { commercial: true, users: 500, purpose: \"tutoría\", modifies: true, shares: false };' 'function problems(l, u) {' ' const found = [];' ' if (u.commercial && l.commercial === false) found.push(\"uso comercial no permitido\");' ' if (u.users > l.maxUsers) found.push(\"supera el límite de usuarios\");' > licence.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 comprobador de licencias, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' if (l.banned.includes(u.purpose)) found.push(\"uso prohibido: \" + u.purpose);' ' if (u.modifies && l.modify === false) found.push(\"cambios no permitidos\");' ' if (u.modifies && l.share && u.shares === false) found.push(\"los cambios deben compartirse\");' ' return found;' '}' >> licence.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 comprobador de licencias, parte 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function verdict(l, u) {' ' const found = problems(l, u);' ' if (found.length > 0) return \"no permitido\";' ' return l.attribution ? \"permitido con condiciones\" : \"permitido\";' '}' >> licence.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 comprobador de licencias, parte 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' console.log(\"uso: comercial, 500 usuarios, tutoría, con cambios, cambios en privado\");' ' for (const l of licences) console.log(l.name + \": \" + verdict(l, use) + \" | \" + problems(l, use).join(\"; \"));' ' const q = \"En una frase corta, ¿por qué conviene leer la licencia de un modelo antes de usar sus pesos?\";' ' const sample = \"La licencia dice qué puedes hacer con los pesos, y incumplir sus condiciones puede quitarte el derecho a usarlos.\";' ' const reply = await ask([{ role: \"user\", content: q }], sample, 60);' ' console.log(\"el modelo dijo: \" + reply.text);' '}' 'main();' >> licence.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 comprobador de licencias
docker exec -w /home/node/project agent node licence.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Las licencias de aquí son inventadas
Abierta A y Abierta B son inventadas para practicar. No son licencias reales y no dicen nada de ningún modelo real.
El comprobador solo hace lo que le dices. Una licencia real exige una lectura cuidadosa, y una duda real exige a alguien con la formación necesaria.
Qué imprime el Run
| Línea | Qué muestra |
|---|---|
| Abierta A: permitido con condiciones | | Todas las cláusulas pasan, pero hace falta atribución |
| Abierta B: no permitido | uso comercial no permitido; los cambios deben compartirse | Fallan dos cláusulas |
| 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.