Tres ajustes que cambian una respuesta
La temperatura, el límite de tokens y el texto de parada son los tres ajustes de una llamada que más cambian la respuesta. Cada uno va en el cuerpo de la petición, junto a los mensajes.
Importan porque una llamada con los valores por defecto puede ser demasiado aleatoria para trabajar con datos, o demasiado larga para una pantalla. Conocerlos te permite elegir a propósito.
Al final de esta lección
Nota
Puedo decir qué cambian la temperatura, el límite de tokens y el texto de parada en una llamada a un modelo.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Temperatura | un ajuste de lo variadas que son las respuestas | 0 |
| Token | un trozo pequeño de texto que el modelo lee y escribe | |
| Límite de tokens | el máximo de tokens que puede escribir una respuesta | max_tokens |
| Texto de parada | un texto que termina la respuesta cuando el modelo lo alcanza | |
| Motivo de fin | la razón por la que terminó la respuesta | length |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La temperatura fija la variedad de respuestas
Un modelo elige cada token siguiente de una lista de tokens probables. Una temperatura baja toma casi siempre el más probable. Una temperatura alta deja entrar tokens menos probables.
Elige un valor bajo, cercano a 0, para un trabajo con una única respuesta, como sacar una fecha de un texto. Elige un valor más alto para ideas o nombres.
Ejemplo resuelto: la temperatura de tres tareas
| Tarea | Temperatura | Por qué |
|---|---|---|
| Sacar un número de pedido de un correo | 0 | Solo hay una respuesta correcta |
| Responder a la pregunta de un cliente | 0.7 | Natural, pero sin exceso |
| Proponer diez nombres para una tienda | 1.2 | Quieres variedad |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pregunta tres veces con dos temperaturas
docker exec -w /home/node/project agent node -e 'const lab = require("./lab.js"); const question = [{ role: "user", content: "Propón un nombre para un pez dorado. Responde con una sola palabra." }]; const samples = { 0: ["Burbuja", "Burbuja", "Burbuja"], 1.2: ["Nemo", "Capitán Salpicón", "Burbuja"] }; (async () => { for (const temperature of [0, 1.2]) { const found = []; let label = ""; for (let i = 0; i < 3; i++) { const got = await lab.ask({ max_tokens: 8, temperature: temperature, messages: question }, samples[temperature][i]); found.push(got.text.trim()); label = got.label; } console.log("temperatura " + temperature + " (" + label + "): " + found.join(" | ")); } })();'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El límite de tokens es un tope estricto
Un token es un trozo pequeño de texto, a menudo una palabra corta o parte de una larga. max_tokens es el máximo de tokens que el modelo puede escribir. Cuando se alcanza, la respuesta se detiene, incluso a mitad de frase.
La respuesta lleva un motivo de fin. La palabra stop significa que el modelo terminó. La palabra length significa que el tope la cortó.
Corta una respuesta a propósito
docker exec -w /home/node/project agent node -e 'const lab = require("./lab.js"); const question = [{ role: "user", content: "Explica qué es una API en dos frases." }]; const sample = { short: "Una API es una forma de que un programa pida", long: "Una API es un conjunto de reglas que permite a un programa pedir algo a otro. Quien llama envía una petición y recibe una respuesta." }; (async () => { for (const limit of [12, 80]) { const got = await lab.ask({ max_tokens: limit, messages: question }, limit === 12 ? sample.short : sample.long); const why = got.data ? got.data.choices[0].finish_reason : (limit === 12 ? "length" : "stop"); console.log("max_tokens " + limit + " (" + got.label + "), finish_reason " + why + ":"); console.log(" " + got.text.trim()); } })();'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que un max_tokens pequeño hace que el modelo escriba más corto. No: corta la respuesta, a menudo a mitad de frase. Para una respuesta más corta, pídela en la instrucción. Deja el tope como medida de seguridad, por encima de lo que esperas.
El texto de parada termina antes la respuesta
Un texto de parada es un texto que eliges tú. Cuando el modelo va a escribirlo, la respuesta termina en su lugar, y el propio texto de parada no aparece en ella.
Úsalo para mantener una respuesta en una línea o en un elemento de lista. La mayoría de las API de modelos admiten varios textos de parada a la vez.
Detén una lista antes del punto tres
docker exec -w /home/node/project agent node -e 'const lab = require("./lab.js"); const question = [{ role: "user", content: "Escribe los números del uno al cinco en letras, uno por línea, cada línea empezando por 1. 2. 3. y así hasta el final." }]; (async () => { const got = await lab.ask({ max_tokens: 60, stop: ["3."], messages: question }, "1. uno\n2. dos\n"); console.log("Respuesta (" + got.label + "): " + JSON.stringify(got.text)); console.log("¿Contiene 3.? " + got.text.includes("3.")); })();'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos: prueba tus ajustes
En el Run de la longitud, cambia la pregunta por una tuya y prueba un max_tokens de 5, de 30 y de 200. Anota cada vez el motivo de fin.
Después di qué valor pondrías en un programa real. Di también por qué un tope demasiado pequeño cuesta más que uno demasiado grande.