Al construir mi propia aplicación basada en LLM, encontré muchas guías de ingeniería rápidas, pero pocas guías equivalentes para determinar la configuración de temperatura.

Por supuesto, la temperatura es un valor numérico simple, mientras que las indicaciones pueden volverse alucinantes, por lo que puede parecer trivial como una decisión del producto. Aún así, elegir la temperatura correcta puede cambiar drásticamente la naturaleza de sus salidas, y cualquiera que construya una aplicación LLM de calidad de producción debe elegir los valores de temperatura con intención.

En esta publicación, exploraremos qué temperatura y las matemáticas detrás de ella, posibles implicaciones del producto y cómo elegir la temperatura adecuada para su aplicación LLM y evaluarla. Al final, espero que tenga un curso de acción claro para encontrar la temperatura adecuada para cada caso de uso de LLM.

¿Qué es la temperatura?

La temperatura es un número que controla la aleatoriedad de las salidas de un LLM. La mayoría de las API limitan el valor de ser de 0 a 1 o algún rango similar para mantener las salidas en límites semánticamente coherentes.

Desde la documentación de OpenAI:

«Los valores más altos como 0.8 harán que la salida sea más aleatoria, mientras que los valores más bajos como 0.2 lo harán más enfocado y determinista».

Intuitivamente, es como un dial que puede ajustar cómo «exploratorio» o «conservador» es el modelo cuando escupe una respuesta.

¿Qué significan estos valores de temperatura?

Personalmente, me parece muy interesante las matemáticas detrás del campo de temperatura, así que me sumergiré en él. Pero si ya está familiarizado con las entrañas de LLM o no está interesado en ellos, Siéntase libre de omitir esta sección.

Probablemente sepa que un LLM genera texto prediciendo el siguiente token después de una secuencia dada de tokens. En su proceso de predicción, asigna probabilidades a todos los tokens posibles que podrían venir a continuación. Por ejemplo, si la secuencia pasada al LLM es «la jirafa corrió hacia el …», podría asignar altas probabilidades a palabras como «árbol» o «cerca» y probabilidades más bajas a palabras como «apartamento» o «libro».

Pero retrocedamos un poco. ¿Cómo se producen estas probabilidades?

Estas probabilidades generalmente provienen de puntajes en bruto, conocidos como logitsque son los resultados de muchos, muchos cálculos de redes neuronales y otros Aprendizaje automático técnicas. Estos logits son de oro; Contienen toda la información valiosa sobre qué fichas podrían seleccionarse a continuación. Pero el problema con estos logits es que no se ajustan a la definición de una probabilidad: pueden ser cualquier número, positivo o negativo, como 2, o -3.65, o 20. No están necesariamente entre 0 y 1, y No necesariamente se suman a 1 como una buena distribución de probabilidad.

Entonces, para que estos logits sean utilizables, necesitamos usar una función para transformarlos en una distribución de probabilidad limpia. La función típicamente utilizada aquí se llama Softmaxy es esencialmente una ecuación elegante que hace dos cosas importantes:

  1. Convierte todos los registros en números positivos.
  2. Escala los logits para que se suman a 1.
Fórmula Softmax

La función Softmax funciona tomando cada logit, elevando mi (alrededor de 2.718) al poder de ese logit, y luego dividirse por la suma de todos estos exponenciales. Entonces, el logit más alto aún obtendrá el numerador más alto, lo que significa que obtiene la mayor probabilidad. Pero otras fichas, incluso con valores logit negativos, aún tendrán una oportunidad.

Ahora aquí es donde Temperatura entra: La temperatura modifica los logits antes de aplicar Softmax. La fórmula para Softmax con temperatura es:

Softmax con temperatura

Cuando la temperatura es bajodividir los logits por t hace que los valores sean más grandes/más extendidos. Entonces, la exponenciación haría que el valor más alto sea mucho más grande que los demás, lo que hace que la distribución de probabilidad sea más desigual. El modelo tendría una mayor probabilidad de elegir el token más probable, lo que resulta en un Más determinista producción.

Cuando la temperatura es alto, Dividir los logits por T hace que todos los valores sean más pequeños/más cerca, extendiendo la distribución de probabilidad de manera más uniforme. Esto significa que es más probable que el modelo elija tokens menos probables, aumentando aleatoriedad.

Cómo elegir la temperatura

Por supuesto, la mejor manera de elegir una temperatura es jugar con ella. Creo que cualquier temperatura, como cualquier aviso, debe corregirse con ejecuciones de ejemplo y evaluarse contra otras posibilidades. Discutiremos eso en la siguiente sección.

Pero antes de sumergirnos en eso, quiero resaltar que La temperatura es una decisión crucial del productouno que puede influir significativamente en el comportamiento del usuario. Puede parecer bastante sencillo elegir: más bajo para aplicaciones más basadas en la precisión, más alta para aplicaciones más creativas. Pero hay compensaciones en ambas direcciones con consecuencias aguas abajo para los patrones de confianza y uso de usuarios. Aquí hay algunas sutilezas que vienen a la mente:

  • Las bajas temperaturas pueden hacer que el producto se sienta autorizado. Los resultados más deterministas pueden crear la ilusión de la experiencia y fomentar la confianza del usuario. Sin embargo, esto también puede conducir a usuarios crédulos. Si las respuestas siempre tienen confianza, los usuarios pueden dejar de evaluar críticamente los resultados de la IA y simplemente confiar ciegamente en ellas, incluso si están equivocados.
  • Las bajas temperaturas pueden reducir la fatiga de la decisión. Si ve una respuesta fuerte en lugar de muchas opciones, es más probable que tome medidas sin pensar demasiado. Esto podría conducir a una carga cognitiva más fácil o una carga cognitiva más baja mientras se usa el producto. Inversamente, las altas temperaturas podrían crear más fatiga de decisión y conducir a la rotación.
  • Las altas temperaturas pueden fomentar la participación del usuario. La imprevisibilidad de las altas temperaturas puede mantener a los usuarios curiosos (como recompensas variables), lo que lleva a sesiones más largas o mayores interacciones. Inversamente, las bajas temperaturas pueden crear experiencias de usuario estancadas que tengan a los usuarios.
  • La temperatura puede afectar la forma en que los usuarios refinan sus indicaciones. Cuando las respuestas son inesperadas con altas temperaturas, los usuarios pueden ser impulsados ​​a aclarar sus indicaciones. Pero con bajas temperaturas, los usuarios pueden verse obligados a Agregar más detalles o expandir sus indicaciones para obtener nuevas respuestas.

Estas son generalizaciones amplias y, por supuesto, hay muchos más matices con cada aplicación específica. Pero en la mayoría de las aplicaciones, la temperatura puede ser una variable poderosa para ajustar en las pruebas A/B, algo a considerar junto con sus indicaciones.

Evaluación de diferentes temperaturas

Como desarrolladores, estamos acostumbrados a las pruebas unitarias: definir un conjunto de entradas, ejecutar esas entradas a través de una función y obtener un conjunto de salidas esperadas. Duermemos profundamente por la noche cuando nos aseguramos de que nuestro código esté haciendo lo que esperamos que haga y que nuestra lógica esté satisfaciendo algunas restricciones claras.

El préstamo El paquete le permite realizar el equivalente LLM-ProMPT de las pruebas unitarias, pero hay algunos matices adicionales. Debido a que las salidas de LLM no son deterministas y a menudo están diseñadas para hacer tareas más creativas que las estrictamente lógicas, puede ser difícil definir cómo se ve una «salida esperada».

Definición de su «salida esperada»

La táctica de evaluación más simple es tener una humano Califica lo bueno que piensan que es alguna producción, según alguna rúbrica. Para las salidas en las que está buscando un cierto «ambiente» que no pueda expresar con palabras, este probablemente será el método más efectivo.

Otra táctica de evaluación simple es usar métricas deterministas – Estas son cosas como «¿La salida contiene una cierta cadena?» o «¿La salida es válida JSON?» o «¿La salida satisface esta expresión de JavaScript?». Si su salida esperada se puede expresar de esta manera, Promptfoo te respalda.

Una táctica de evaluación más interesante y de edad es usar Cheques calificados por LLM. Estos usan esencialmente LLM para evaluar sus salidas generadas por LLM, y pueden ser bastante efectivas si se usan correctamente. PromptFoo ofrece estas métricas con clasificación modelo en múltiples formas. Toda la lista es aquíy contiene afirmaciones de «¿El resultado es relevante para la consulta original?» «Comparar los diferentes casos de prueba y decirme cuál es el mejor!» a «¿Dónde se clasifica esta salida en esta rúbrica que definí?».

Ejemplo

Digamos que estoy creando una aplicación orientada al consumidor que se les ocurre ideas creativas de regalos y quiero determinar empíricamente qué temperatura debo usar con mi aviso principal.

Es posible que desee evaluar métricas como la relevancia, la originalidad y la viabilidad dentro de un cierto presupuesto y asegurarme de que esté eligiendo la temperatura adecuada para optimizar esos factores. Si estoy comparando el rendimiento de GPT 4o-Mini con temperaturas de 0 vs. 1, mi archivo de prueba podría comenzar así:

providers:
  - id: openai:gpt-4o-mini
    label: openai-gpt-4o-mini-lowtemp
    config:
      temperature: 0
  - id: openai:gpt-4o-mini
    label: openai-gpt-4o-mini-hightemp
    config:
      temperature: 1
prompts:
  - "Come up with a one-sentence creative gift idea for a person who is {{persona}}. It should cost under {{budget}}."

tests:
  - description: "Mary - attainable, under budget, original"
    vars:
      persona: "a 40 year old woman who loves natural wine and plays pickleball"
      budget: "$100"
    assert:
      - type: g-eval
        value:
          - "Check if the gift is easily attainable and reasonable"
          - "Check if the gift is likely under $100"
          - "Check if the gift would be considered original by the average American adult"
  - description: "Sean - answer relevance"
    vars:
      persona: "a 25 year old man who rock climbs, goes to raves, and lives in Hayes Valley"
      budget: "$50"
    assert:
      - type: answer-relevance
        threshold: 0.7

Probablemente querré ejecutar los casos de prueba repetidamente para probar los efectos de los cambios de temperatura en múltiples ejecuciones de la misma entrada. En ese caso, usaría el parámetro repetido como:

promptfoo eval --repeat 3
Resultados de la prueba de apropiado

Conclusión

La temperatura es un parámetro numérico simple, pero no se deje engañar por su simplicidad: puede tener implicaciones de largo alcance para cualquier aplicación LLM.

Ajustarlo correctamente es clave para obtener el comportamiento que desea: demasiado bajo, y su modelo lo juega demasiado seguro; Demasiado alto, y comienza a tomar respuestas impredecibles. Con herramientas como PromptFoo, puede probar sistemáticamente diferentes configuraciones y encontrar su zona de oro de oro, no demasiado frío, no demasiado caliente, sino correcto. ️

Por automata