Cómo funcionan los LLM

Primero, el nombre. LLM es la abreviatura de large language model (modelo de lenguaje grande): el tipo de IA detrás de herramientas como ChatGPT, a la que le envías un prompt y recibes texto de vuelta. Este capítulo es la imagen funcional de qué es realmente uno.
Escribes una pregunta y unos segundos después aparece una respuesta fluida y confiada. Se lee como si el modelo te hubiera entendido y buscado la respuesta. Esa impresión es útil, y también está equivocada en formas que importan, y la brecha entre las dos es de donde vienen la mayoría de los errores de principiantes.
Este es el capítulo que da sus frutos para el resto de tu carrera con estas herramientas. No necesitas saber las matemáticas detrás del entrenamiento de un modelo para construir con uno. Sí necesitas una imagen funcional de qué está pasando realmente cuando responde, porque esa imagen explica todo lo demás: por qué funciona el prompting, por qué la misma pregunta da diferentes respuestas, por qué los modelos inventan hechos, por qué cuestan lo que cuestan, y por qué algunas características son difíciles cuando se ven como si deberían ser triviales. Todo lo que viene después en este manual es una consecuencia de las ideas aquí.
Qué es realmente un modelo
Despoja la interfaz de chat y un modelo de lenguaje grande es una cosa: una función matemática enorme, un conjunto fijo de miles de millones de números llamados parámetros (también los escucharás llamar pesos). Ese es el modelo completo. No una base de datos, no un motor de búsqueda, no una personita en una caja. Es una pila muy grande de números que toma texto y produce texto.
Esos números no vinieron de un programador escribiéndolos. Se establecieron durante el entrenamiento. El proveedor alimentó el modelo con una cantidad asombrosa de texto, libros, código, artículos, páginas web, y ejecutó un ejercicio simple miles de millones de veces: oculta la siguiente palabra, pídele al modelo que la prediga, y ajusta sus números un poco siempre que adivine mal. Repite eso a una escala enorme y los números se asientan lentamente en valores que son buenos para predecir texto. Eso es lo que es el entrenamiento: ajustar miles de millones de diales hasta que la predicción sea buena.
Dos cosas se desprenden de esto, y explican mucho del comportamiento que encontrarás después. Primero, el entrenamiento ocurre una vez, por adelantado, y es tremendamente caro. Para cuando llamas al modelo, los números están congelados. El modelo no aprende de tu conversación. Nada de lo que digas cambia sus parámetros. Se siente como si recordara y se adaptara, pero eso es el software a su alrededor, no el modelo mismo, un punto que regresa fuertemente en la sección de ventana de contexto.
Segundo, no hay una tabla de hechos dentro. El "conocimiento" vive como patrones cocidos en esos números, la forma en que un panadero que ha hecho diez mil panes tiene la técnica en sus manos sin leer una receta. El modelo aprendió la forma del texto correcto y sensato. Es por eso que puede ser fluido y estar equivocado en la misma oración: está reproduciendo la forma de una buena respuesta, no leyendo un hecho almacenado en un estante.
Predecir el siguiente token
Con esa pila de números en lugar, el modelo hace exactamente un trabajo: predice el siguiente trozo de texto, una y otra vez.
Aquí está el bucle en cámara lenta. Le das algo de texto. Ejecuta ese texto a través de todos esos parámetros y produce una probabilidad para cada posible siguiente trozo que conoce, decenas de miles de opciones a la vez. Después de "La capital de Francia es", el trozo "París" podría obtener una puntuación del 97%, "un" del 1%, y todo lo demás casi nada.
El modelo luego elige un trozo, lo añade al texto, y ejecuta el todo nuevamente para elegir el siguiente. Repite hasta que la respuesta esté completa.
Ese es el motor completo. Una respuesta que lees como un pensamiento único fue construida un trozo a la vez, cada trozo elegido de un ranking fresco de probabilidades, sin plan sobre a dónde va la oración más allá de "qué es probable después". Cada capacidad que usarás, chat, código, traducción, uso de herramientas, razonamiento, es este mismo bucle ejecutándose por debajo.
El teclado del teléfono que sugiere tu siguiente palabra es la misma idea en miniatura. La diferencia es los miles de millones de parámetros detrás de la adivinanza. Entrenado en suficiente texto, "cuál es el trozo probable siguiente" resulta ser lo suficientemente bueno para escribir código funcionando y explicaciones claras. Pero el movimiento subyacente nunca cambia: es predicción, no comprensión, y no buscar una respuesta almacenada.
El dial de aleatoriedad
Si el modelo siempre agarrara el trozo con la puntuación más alta, te daría la misma respuesta al mismo prompt cada vez, y esa respuesta a menudo sería plana y repetitiva. Así que la mayoría de las veces la selección tiene un poco de aleatoriedad: generalmente toma un trozo de alta probabilidad, pero no siempre el muy superior. Es por eso que puedes hacer exactamente la misma pregunta dos veces y obtener dos respuestas diferentes. Ese es el sistema funcionando como se diseñó, no un defecto.
Controlas cuánta aleatoriedad hay a través de una configuración llamada temperatura, que estableces cuando llamas el modelo en el capítulo sobre llamar modelos desde código. La intuición vale la pena tenerla ahora. A una temperatura baja, el modelo se mantiene cerca de sus mejores selecciones: enfocado, consistente, predecible, que es lo que quieres para extraer un número de una factura o clasificar texto en categorías. A una temperatura más alta, se eligen trozos de menor probabilidad más a menudo: más variado y creativo, y más probable que deambule hacia algún lugar equivocado. El brainstorming y la escritura creativa quieren el extremo más alto; cualquier cosa con una respuesta correcta quiere el extremo más bajo.
Así que un único dial desliza el modelo entre "cuidadoso y repetible" e "sorpresivo e inventivo". Es el mismo bucle de predicción de cualquier manera; la temperatura solo cambia qué tan atrevidamente el modelo llega más allá de su adivinanza más segura.
Tokens
Los "trozos" que predice un modelo tienen un nombre: tokens. Un token es un trozo de texto, a menudo una palabra completa, a veces solo parte de una. Las palabras comunes suelen ser un único token, mientras que las palabras más largas o raras se dividen en varias.
"tokenización" -> "token" + "ización"
"increíble" -> "incre" + "íble"
"gato" -> "gato"¿Por qué dividir el texto en estos trozos extraños en lugar de usar palabras completas o letras individuales? Es un tradeoff. Las letras individuales harían cada secuencia enormemente larga, y la longitud es lo que el modelo tiene que calcular. Las palabras completas necesitarían un vocabulario de millones de entradas y aún se romperían la primera vez que alguien inventa una palabra o comete un error tipográfico. Los tokens son el camino medio: un vocabulario fijo de decenas de miles de piezas comunes que pueden ser encajadas juntas para deletrear cualquier cosa, incluyendo palabras que el modelo nunca ha visto.
Aquí está la consecuencia por debajo del capó que sorprende a la gente. El modelo nunca ve letras. Ve tokens, que para él son realmente números de ID para esos trozos. Así que tareas que nos parecen sin esfuerzo pueden ser difíciles para él: contar las letras en una palabra, invertir una cadena, notar que "fresa" tiene tres r.
No es ser tonto. No percibe los caracteres individuales en absoluto, la forma en que no puedes saborear los granos separados de harina en un pan terminado. Cuando un modelo se tropieza con una tarea de deletreo o conteo de caracteres, esto es por qué, y la solución suele ser hacer esa parte en código normal en lugar.
Los tokens también son la unidad de dos cosas que te importarán constantemente:
- Dinero: los proveedores cobran por token, tanto los tokens que envías como los tokens que escribe el modelo de vuelta, así que un documento largo dentro y una respuesta larga fuera ambos cuestan más. Una medida aproximada para inglés es aproximadamente cuatro caracteres por token, o 100 tokens por cada 75 palabras; el código y otros lenguajes a menudo se dividen en más tokens, que es parte de por qué pueden costar más. Lo encontrarás directamente cuando empieces a llamar modelos desde código.
- Límites: hay un techo en cuántos tokens el modelo puede manejar a la vez, que es la siguiente sección.
La ventana de contexto
La ventana de contexto es cuánto texto puede tomar el modelo a la vez, medido en tokens. Imagínalo como el tamaño del escritorio del modelo. Todo lo involucrado en una sola solicitud tiene que caber en ese escritorio de una vez: tus instrucciones, la conversación hasta ahora, cualquier documento que hayas pegado, y la respuesta que el modelo está escribiendo.
¿Por qué hay un límite en absoluto? Viene de cómo funciona la predicción. Para elegir el siguiente token, el modelo pesa cómo cada token en la entrada se relaciona con todos los demás tokens, así que puede decir que "eso" se refiere al gato tres oraciones atrás. Esa comparación de todos con todos es lo que permite que el modelo rastreee significado en un pasaje, y también es lo que hace que las entradas largas sean costosas de procesar. El proveedor establece un techo, la ventana de contexto, para mantener cada solicitud manejable.
Cuando el escritorio está lleno, algo tiene que salir. Si una conversación dura lo suficiente para desbordar la ventana, las primeras partes desaparecen y el modelo ya no puede verlas. Por eso un chat largo parece "olvidar" lo que dijiste al inicio. No olvidó en ningún sentido humano; esos tokens están fuera del escritorio. También ayuda saber que los modelos tienden a prestar la máxima atención al principio y al final de lo que está en el escritorio y pueden perder de vista las cosas enterradas en el medio, así que dónde pones el texto importante importa cuando llenas la ventana.
Ahora el punto que atrapa a casi todo principiante, e importa más que todo el resto. El modelo no tiene memoria entre solicitudes separadas. Recuerda que sus números están congelados. Cada llamada empieza con un escritorio en blanco. El modelo no recuerda tu última pregunta, tu nombre, o cualquier cosa de hace un minuto.
Una aplicación de chat se siente como una conversación fluida solo porque la aplicación silenciosamente reenvía el historial completo con cada nuevo mensaje. La continuidad es algo que el software alrededor del modelo construye, no algo que el modelo tenga.
Ese único hecho moldea cómo construyes todo a partir de aquí. Si quieres que el modelo sepa algo, tienes que ponerlo en el escritorio en esa solicitud: la conversación hasta ahora, los detalles del usuario, los documentos relevantes, todo ello, cada vez. Una gran parte de este manual es realmente sobre hacer esa una cosa bien, obtener el texto correcto en el escritorio.
Lo que el modelo no sabe
Todo el conocimiento de un modelo fue cocido mientras se entrenaba, así que solo sabe lo que estaba en esos datos de entrenamiento, y esos datos se recopilaron hasta algún punto de corte en el pasado. Dos límites salen directamente de esto.
Primero, no sabe nada que haya sucedido después de su punto de corte. Pregunta sobre noticias de la semana pasada o una biblioteca que salió este mes y no tiene idea real, aunque puede felizmente producir una respuesta que suene plausible de todas formas. Segundo, nunca supo nada privado. Los documentos internos de tu compañía, el historial de pedidos de un usuario, los contenidos de tu base de datos: nada de eso estaba en el texto público en el que se entrenó, así que no puede saberlo, sin importar cuán agradablemente preguntes.
Hay un límite más tranquilo también. El modelo generalmente no puede decirte de dónde vino algo que "sabe", porque el conocimiento se mezcla dentro de él en lugar de ser archivado como hechos separados y originales. Puede escribirte una cita, pero está prediciendo cómo debería verse una cita, no buscando una real.
Esta es la razón de una técnica que encontrarás después llamada recuperación, o RAG. Si quieres que un modelo responda sobre eventos recientes o tus propios datos privados, no lo reentrenas. Buscas el texto relevante tú mismo y lo pones en el escritorio en el momento de la solicitud, así que el modelo tiene los hechos enfrente de él en lugar de adivinar. Un modelo es un razonador sobre el texto que le das mucho más que un pozo confiable de hechos específicos.
Por qué los modelos inventan cosas
A veces un modelo declara algo falso con confianza total: una cita que nadie dijo, una función que no existe, una cita a un estudio que nunca fue escrito. Esto se llama una alucinación, y después de las últimas secciones debería sentirse casi inevitable en lugar de misterioso.
La razón es que el modelo no tiene sentido interno de "verdadero" versus "falso". Solo tiene "texto probable" versus "texto improbable". La mayoría de las veces esos se alinean, porque en el texto en el que aprendió, las declaraciones verdaderas son mucho más comunes que las falsas, así que la continuación probable es generalmente la correcta.
Pero cuando el modelo golpea una brecha, algo en el que nunca fue entrenado, o tus datos privados que nunca pudo haber visto, no se detiene y marca la brecha. No puede confiablemente decir qué no sabe. Hace la única cosa que jamás hace: produce la continuación más probable.
Una respuesta confiada, bien formada, equivocada es a menudo exactamente lo que suena más probable. La misma maquinaria que la hace fluida la hace fluida cuando está equivocada.
Esta es la parte para sentarse con: la alucinación no es un glitch que puedas prompt completamente. Puedes reducirla, y los capítulos posteriores muestran cómo. Decirle al modelo que se le permite decir "No sé" ayuda un poco. Pedirle que responda solo desde texto que proporcionas ayuda mucho más, porque ahora no hay brecha para llenar desde entrenamiento congelado. Pero la tendencia viene de qué es el modelo fundamentalmente, una máquina de probabilidad sin fact-checker adentro, así que los arreglos duraderos son estructurales: dale los hechos para trabajar en lugar de esperar que estén en su entrenamiento, y verifica respuestas que importen en lugar de confiar en ellas.
Lleva una regla fuera de este capítulo por encima de todo lo demás: la confianza de un modelo no te dice nada sobre si está bien. Fluidez y corrección son producidas por el mismo proceso y se separan todo el tiempo. Construye como si cualquier respuesta única pudiera estar equivocada, porque cualquier respuesta única podría ser.
Juntarlo todo
Todo en este capítulo es una idea vista desde diferentes ángulos. Un modelo es una pila congelada de números que predice el siguiente token, y casi cada comportamiento que tratarás sale de eso:
- Predice un token a la vez desde un ranking de probabilidades, así que improvisa en lugar de recuerda, y un toque de aleatoriedad (temperatura) significa respuestas varían.
- Tokens son los trozos en los que funciona: la unidad de tu factura, la unidad de tu límite de tamaño, y la razón por la que no puede confiablemente contar letras.
- La ventana de contexto es el escritorio de una sola solicitud, compartido por todo, y el modelo no recuerda nada entre solicitudes, así que continuidad es tu trabajo.
- Su conocimiento está congelado en un punto de corte de entrenamiento y nunca incluyó tus datos privados, que es por qué buscas hechos y los pones en el prompt.
- La alucinación es el precio de un sistema que predice texto probable sin sentido de verdad, reducido por grounding y verificación, nunca solo por fraseo inteligente.
Sostén estos juntos y una cantidad sorprendente de ingeniería de IA resulta ser una tarea en disfraces diferentes: obtén el texto correcto en el escritorio, en la forma correcta, en el momento correcto, y nunca confíes la salida ciegamente. El siguiente capítulo, Modelos abiertos y cerrados, mira qué tipos de modelos hay y cómo obtienes uno, y luego prompting es donde empiezas a dirigir toda esta predicción hacia lo que realmente quieres.

