La eficacia de un modelo de lenguaje grande depende en gran medida de las instrucciones que le proporcionamos. La ingeniería de instrucciones es el proceso de crear preguntas de manera que se obtenga el mejor resultado de un LLM. Es un paso fundamental para implementar una función basada en LLM.
La ingeniería de instrucciones es un proceso iterativo. Si experimentaste con diferentes LLMs, es probable que hayas notado que necesitabas modificar tu instrucción para obtener un mejor resultado.
Esto también se aplica a los modelos de diferentes tamaños.
Las interfaces de chat potenciadas por LLM grandes, como Gemini o ChatGPT, suelen producir resultados satisfactorios con un esfuerzo mínimo en la generación de instrucciones. Sin embargo, cuando trabajas con un LLM predeterminado más pequeño que no está ajustado, debes adaptar tu enfoque.
Los LLM más pequeños son menos potentes y tienen un conjunto de información más pequeño del que pueden extraer datos.
¿A qué nos referimos con "LLMs más pequeños"?
Definir los tamaños de los LLM es complicado, y los creadores no siempre los divulgan.
En este documento, "LLMs más pequeños" hace referencia a cualquier modelo con menos de 30,000 millones de parámetros. Actualmente, los modelos con unos pocos millones o miles de millones de parámetros se pueden ejecutar de forma realista en el navegador, en dispositivos de consumo.
¿Dónde se usan los LLMs más pequeños?
- IA generativa en el dispositivo o en el navegador, por ejemplo, si usas Gemma 2B con la API de LLM Inference de MediaPipe (incluso apta para dispositivos solo con CPU) o DistilBert en el navegador con Transformers.js. Descargar un modelo y ejecutar la inferencia en el dispositivo de un usuario solo es posible con estos LLM más pequeños, para que las descargas web sean razonables y se adapten a las restricciones de memoria y GPU/CPU de un dispositivo.
- IA generativa personalizada del servidor Los modelos pequeños de peso abierto, como Gemma 2B, Gemma 7B o Gemma 27B, están disponibles para que los ejecutes en tu propio servidor (y, de manera opcional, los ajustes).
Comenzar
Las interfaces de chat potenciadas por LLM grandes, como Gemini o ChatGPT, suelen producir resultados satisfactorios con un esfuerzo mínimo en la generación de instrucciones. Sin embargo, cuando trabajas con LLMs más pequeños, debes adaptar tu enfoque. Los LLM más pequeños son menos potentes y tienen un conjunto de información más pequeño del que pueden extraer datos.
Proporciona contexto e instrucciones de formato precisas
Para obtener resultados óptimos con LLMs pequeños, crea instrucciones más detalladas y específicas.
Por ejemplo:
Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.
Review: "${review}"
Rating:
| Entrada (revisión) | Resultado (calificación) | |
|---|---|---|
| LLM más grande (Gemini 1.5) | LLM más pequeño (Gemma 2B) | |
| Me encanta el ajuste. Distribuye bien el peso y es sorprendentemente cómoda, incluso en caminatas de todo el día. Lo recomendaría. | 5 | 4 de 5 estrellas** |
| Las correas son endebles y comenzaron a clavarse en mis hombros con cargas pesadas. | 1 | 2/5 |
Si bien Gemini 1.5 proporciona el resultado deseado con esta instrucción simple, el resultado de Gemma no es satisfactorio:
- El formato es incorrecto. Solicitamos un número entero para la calificación.
- La clasificación no parece ser del todo precisa. La primera opinión es lo suficientemente entusiasta como para indicar una opinión de 5 estrellas.
Para solucionar este problema, debemos usar técnicas de ingeniería de instrucciones, como las instrucciones con uno, varios y múltiples ejemplos y las instrucciones de cadena de pensamientos. También debemos proporcionar instrucciones de formato claras e insistir en que el modelo debe usar el rango completo de calificaciones.
Por ejemplo:
`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
\n\n
Here are some examples of reviews and their corresponding analyses and
ratings:
\n\n
Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
use, but it's perfect for urban exploring.'
Analysis: The reviewer appreciates the product's style and basic
functionality. They express some uncertainty about its ruggedness but
overall find it suitable for their intended use, resulting in a positive,
but not top-tier rating.
Rating (integer): 4
\n\n
Review: 'It's a solid backpack at a decent price. Does the job, but nothing
particularly amazing about it.'
Analysis: This reflects an average opinion. The backpack is functional and
fulfills its essential purpose. However, the reviewer finds it unremarkable
and lacking any standout features deserving of higher praise.
Rating (integer): 3
\n\n
Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
Rating (integer): 1
\n\n
Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
Rating (integer): 5
\n\n
Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
Rating (integer): 1
\n\n
Now, here is the review you need to assess:
\n
Review: "${review}" \n`;
| Entrada (revisión) | Resultado con un LLM más pequeño (Gemma 2B) |
|---|---|
Me encanta el ajuste. Distribuye bien el peso y es sorprendentemente cómoda, incluso en caminatas de todo el día. Lo recomendaría. |
Análisis: Esta opinión es muy positiva y enfatiza el ajuste y la comodidad del producto, lo que indica una gran satisfacción con él. Esto justifica una calificación alta. Calificación (número entero): 5 |
Las correas son endebles y comenzaron a clavarse en mis hombros con cargas pesadas. |
**Análisis:** La opinión destaca un problema de comodidad significativo con las correas. También sugiere que el producto podría no ser adecuado para cargas pesadas o salidas prolongadas. **Calificación:** 1 (peor) |
Nuestra instrucción más elaborada, combinada con técnicas de instrucciones con pocos ejemplos y de cadena de pensamientos, proporciona calificaciones más precisas.
Se espera el análisis manual del resultado
Si bien siempre debes limpiar e interpretar manualmente el resultado de un LLM, esto es especialmente cierto en el caso de los LLM más pequeños, que pueden producir resultados menos pulidos y requerir indicaciones de encadenamiento de pensamiento.
En el primer ejemplo, usamos la técnica de encadenamiento de pensamiento, por lo que el resultado incluyó un análisis y una calificación, y debemos analizar manualmente la calificación. También observa el formato incoherente en el resultado de la sección anterior: a veces, el modelo genera Markdown, pero no siempre.
// Use try/catch to catch (parsing) errors
try {
// Parse the output for a rating
const int = /[1-5]/;
const ratingAsString = llmOutput.match(int)[0];
// Parse as int
const ratingAsInt = parseInt(ratingAsString);
// `checkRating` checks the rating is a number between 1 and 5, since the
// regEx may catch a number like "100"
const finalRating = checkRating(ratingAsInt);
} catch (e) {
console.error('Error', e);
}
Diferencias de la API de Mind
Las APIs de LLM basadas en la nube, como la API de Gemini o OpenAI, que suelen ser el punto de entrada a LLMs más grandes, ofrecen funciones de instrucciones útiles. Por ejemplo, Gemini 1.5 Pro ofrece instrucciones del sistema y modo JSON.
Por el momento, estas funciones no siempre están disponibles para el uso de modelos personalizados ni para los LLMs más pequeños a los que se accede con APIs de IA en el navegador, como la API de MediaPipe LLM Inference o Transformers.js. Si bien esto no es necesariamente una limitación técnica, las APIs de IA en el navegador suelen ser más ligeras.
Ten en cuenta los límites de tokens
Dado que tu instrucción para los LLM más pequeños debe incluir ejemplos o instrucciones más detalladas, es probable que sea más larga y ocupe más de tu límite de tokens de entrada, si lo hay.
Además, los modelos más pequeños suelen tener un límite de tokens de entrada más bajo. Por ejemplo, Gemini 1.5 Pro tiene un límite de 1 millón de tokens de entrada, mientras que los modelos de Gemma tienen una ventana de contexto de 8 K.
Usa funciones de recuento de tokens para evitar alcanzar el límite.
Adapta tus estimaciones de tiempo
Ten en cuenta el diseño y las pruebas de mensajes en tus estimaciones de tiempo de ingeniería.
Debido a las diferencias de la API y los límites de tokens, es probable que necesites más tiempo y esfuerzo para crear tu instrucción para un LLM más pequeño que para uno más grande. Probar y validar la salida del LLM también puede requerir más esfuerzo.
¿Ingeniería de instrucciones o ajuste?
Para los desarrolladores web, la ingeniería de instrucciones es nuestra forma preferida de aprovechar la IA generativa en lugar del entrenamiento personalizado y el ajuste. Sin embargo, incluso la ingeniería de instrucciones avanzada puede no ser suficiente en algunos casos de uso, en especial si usas un LLM más pequeño.
Usa el ajuste cuando se cumplan las siguientes condiciones:
- Necesitas precisión y rendimiento de primer nivel para una tarea específica. El ajuste modifica directamente los parámetros internos del modelo para obtener resultados óptimos.
- Tienes datos bien seleccionados y relevantes para tu tarea, ya etiquetados con los resultados preferidos. Necesitas estos datos para realizar un ajuste fino eficaz.
- Usas el modelo para el mismo propósito de forma repetida. El ajuste se puede realizar una vez y reutilizar para una tarea específica.