Python & Data Science
LLMs y GenAI En revisión

RAG vs. Modelos de Contexto Largo: ¿Cuál gana en 2026?

La última vez, Rae se encontró con el problema de “Lost in the Middle”. El pipeline de RAG de su bot de soporte recuperó los fragmentos correctos del manual del producto de 500 páginas, pero el LLM seguía pasando por alto hechos enterrados en el medio del contexto recuperado. Reordenar los fragmentos para que los más relevantes se situaran en los extremos ayudó un poco. Aun así, una pregunta la seguía molestando: si GPT-4o y Claude 3.5 Sonnet pueden manejar 128k–200k tokens, ¿por qué no simplemente pegar todo el manual en el prompt y omitir la fragmentación, los embeddings y la recuperación por completo?

Rae está sopesando esa decisión ahora. Imagina a un detective trabajando en un caso sin resolver—dos enfoques.

Método uno: te sientas en una biblioteca enorme con millones de archivos. Usas un catálogo digital para encontrar las tres carpetas más relevantes, las llevas a tu escritorio y las lees.

Método dos: tu escritorio tiene el tamaño de un campo de fútbol. Despliegas todos los documentos del archivo lado a lado para que cada conexión sea visible al mismo tiempo.

En términos de IA, el método uno es RAG (Generación Aumentada por Recuperación). El método dos es el modelo de contexto largo. Durante años, Rae tuvo que usar RAG porque las ventanas de contexto eran diminutas. En 2026, son enormes. Así que la verdadera pregunta es si RAG sigue siendo necesario.

Esto es lo que realmente está sucediendo.

1. La biblioteca vs. el escritorio gigante: una analogía sencilla

RAG es un bibliotecario. Haces una pregunta, corre hacia los estantes, agarra unas páginas que cree que son relevantes y se las entrega a la IA. Es eficiente. No le pagas a la IA por leer toda la biblioteca cada vez.

Contexto largo es un escritorio tan grande que puedes dejar todos los libros abiertos a la vez. Modelos como Gemini 1.5 o Claude 3.5 ahora tienen ventanas de contexto que van de 200,000 a 2 millones de tokens. Eso son varias novelas gruesas.

Entonces, ¿por qué no hacer simplemente el escritorio infinito?

Costo y velocidad. Incluso en 2026, hacer que una IA “mire” un millón de tokens toma más tiempo y electricidad que mirar unos pocos cientos. La verdadera pregunta para Rae no es “¿cuál es más inteligente?” sino “¿es mejor buscar o simplemente recordar todo?”

2. Configurando nuestra prueba: el problema de la ‘aguja en un pajar’

Para ver la diferencia, necesitamos una prueba. La llamamos “Aguja en un pajar”. La configuración es sencilla: generar un bloque grande de texto (el pajar) y ocultar un dato específico y extraño (la aguja) en algún lugar del medio.

Esta es la parte que confunde a la mayoría de la gente: los LLMs no leen como nosotros. Procesan “tokens” — fragmentos de caracteres. Si tu “escritorio” no es lo suficientemente grande, la IA olvida el principio del documento para cuando llega al final.

Así que construyamos nuestro pajar en Python:

import random

def generate_haystack(num_documents=100):
    # A list of boring corporate filler text
    fillers = [
        "The quarterly report indicates a 5% increase in synergy.",
        "Standard operating procedures require all staff to wear badges.",
        "The coffee machine in breakroom B is currently out of order.",
        "Project X-15 is scheduled for a soft launch next Tuesday."
    ]
    
    haystack = []
    for i in range(num_documents):
        # Create a document of roughly 1000 words
        doc = " ".join(random.choices(fillers, k=100))
        haystack.append(f"Document ID {i}: {doc}")
    
    # Hide the needle
    needle = "SECRET CODE: The golden penguin flies at midnight."
    insertion_point = num_documents // 2
    haystack.insert(insertion_point, f"Document ID 999: {needle}")
    
    return "\n\n".join(haystack)

# Generate roughly 500,000 tokens worth of text
big_data = generate_haystack(500)
print(f"Haystack generated. Total characters: {len(big_data)}")
Este bloque construye un conjunto de datos de prueba sintético para simular la escala de una base de conocimientos grande como el manual del producto de Rae. La lista `fillers` contiene cuatro oraciones corporativas aburridas—sustitutos del texto repetitivo de boilerplate en un manual de producto real. `random.choices(fillers, k=100)` selecciona 100 oraciones al azar (con reemplazo) de esa lista, y `" ".join(...)` las une en un solo "documento" de ~1000 palabras. El bucle `for` repite esto `num_documents` veces, creando 500 documentos sintéticos. La variable `needle` contiene el dato objetivo ("SECRET CODE: The golden penguin flies at midnight.")—la única pieza de información que el modelo necesita encontrar. `insertion_point = num_documents // 2` calcula el punto medio usando división entera, y `haystack.insert(insertion_point, ...)` inserta la aguja en el centro de la lista de documentos—simulando el caso más difícil para "Lost in the Middle". Finalmente, `"\n\n".join(haystack)` concatena todo en una cadena masiva usando separadores de doble salto de línea. El comentario señala que esto simula ~500,000 tokens—muy por encima de lo que RAG enviaría al modelo, pero bien dentro de la ventana de un modelo de contexto largo.

Ahora tenemos una cadena masiva. Pregúntale a una IA estándar “¿Cuál es el código secreto?” y fallará — a menos que pueda “ver” todo el contenido.

3. Opción A: el enfoque RAG (el bibliotecario)

RAG funciona en tres pasos:

  1. Fragmentación: Cortar los documentos en piezas pequeñas.
  2. Embedding: Convertir esas piezas en coordenadas matemáticas (vectores).
  3. Recuperación: Encontrar la pieza cuyas coordenadas estén más cerca de tu pregunta.

Ahora observa qué sucede cuando el bibliotecario intenta encontrar nuestra aguja:

# This is a simplified logic of how a RAG system retrieves data
def mock_rag_retrieve(query, documents):
    # In a real system, we'd use a Vector DB like Pinecone or Chroma
    # Here, we simulate 'searching' for the keyword
    for doc in documents:
        if "SECRET CODE" in doc:
            return doc
    return "No relevant info found."

# The RAG system only sends this tiny snippet to the LLM
context_snippet = mock_rag_retrieve("What is the secret code?", big_data.split("\n\n"))
print(f"RAG retrieved: {context_snippet}")
Este bloque simula el paso de recuperación de RAG sin necesidad de una base de datos vectorial real. `mock_rag_retrieve` toma una cadena `query` y una lista de `documents` (pasados como `big_data.split("\n\n")`, lo cual divide la enorme cadena de texto del pajar nuevamente en documentos individuales utilizando el separador de doble línea que `generate_haystack` usó para unirlos). El bucle `for` escanea cada documento y verifica `if "SECRET CODE" in doc`—una simple coincidencia de subcadena que sustituye la búsqueda de similitud semántica que haría una base de datos vectorial real (como Pinecone o Chroma). En un sistema RAG de producción, esta verificación sería una comparación de similitud de coseno entre el embedding de la consulta y el embedding de cada documento. Cuando se encuentra la palabra clave, la función devuelve ese único documento—solo un fragmento de entre 500. Si nada coincide, devuelve la cadena de respaldo `"No se encontró información relevante."` La conclusión clave: el sistema RAG envía solo este pequeño fragmento al LLM (quizás 50 tokens) en lugar de los 500,000. Eso es lo que hace que RAG sea económico y rápido—pero el compromiso es visible: si la respuesta requería conectar información de dos documentos diferentes, este paso de recuperación podría tomar solo uno de ellos.

El resultado: El sistema RAG es rápido — encontró la página exacta. ¿El compromiso? Si la respuesta requería conectar un hecho del Documento 1 con un hecho del Documento 500, el bibliotecario podría no tomar ambos. RAG a menudo sufre de “Lost in the Middle” (Perdido en el medio) o simplemente de elegir el fragmento equivocado.

4. Opción B: el enfoque de contexto largo (el escritorio gigante)

Con un modelo de contexto largo, omitimos la búsqueda. Todo el pajar de 500,000 tokens va directamente al prompt.

# Conceptual API call to a Long-Context model like Gemini 1.5 Pro
def long_context_call(full_haystack, question):
    # We send the WHOLE thing.
    # In 2026, this might cost $1.00 per query vs $0.001 for RAG.
    prompt = f"Here is the full archive:\n{full_haystack}\n\nQuestion: {question}"
    # response = llm.complete(prompt)
    return "The secret code is The golden penguin flies at midnight."

print("Long-context model is processing the entire dataset...")
Este bloque simula la llamada a un modelo de contexto largo como Gemini 1.5 Pro. A diferencia del enfoque RAG —que recuperaba un pequeño fragmento— `long_context_call` toma el `full_haystack` (los ~500,000 tokens completos) y lo vuelca directamente en el string `prompt` usando una f-string: `f"Here is the full archive:\n{full_haystack}\n\nQuestion: {question}"`. La línea comentada `# response = llm.complete(prompt)` marca dónde iría una llamada real a la API: en producción, esto enviaría el prompt completo a un modelo como Gemini 1.5 Pro o Claude 3.5 Sonnet. El comentario `# In 2026, this might cost \$1.00 per query vs \$0.001 for RAG` destaca la compensación fundamental: los modelos de contexto largo pueden verlo todo (no se necesita recuperación, no hay riesgo de "Lost in the Middle" dentro del conjunto recuperado), pero a aproximadamente 1000× el costo por consulta en comparación con RAG. La función devuelve la respuesta correcta porque el modelo puede ver la aguja en el contexto: no se necesita ningún paso de recuperación. La llamada a `print` antes del return simula el retraso de procesamiento que se vería al enviar medio millón de tokens a una API.

El resultado: El modelo encuentra la aguja perfectamente. Más importante aún, capta el contexto que la rodea — lo que vino antes y después.

Lo que esto significa en la práctica: El mecanismo de “Atención” examina la relación de cada palabra con todas las demás. El costo es el principal obstáculo. Procesar 1 millón de tokens es como contratar a un lector veloz para que lea un libro completo cada vez que haces una pregunta. Exhaustivo, pero costoso.

5. El veredicto de 2026: por qué probablemente necesitas ambos

Entonces, ¿quién gana? En 2026, la respuesta es: Ninguno. Usas un híbrido.

Si tienes 100 millones de documentos, Long-Context no funcionará. Costaría una fortuna y tardaría minutos en responder. Necesitas RAG para encontrar el “vecindario” adecuado.

Sin embargo, una vez que RAG extrae los 10 documentos más relevantes, ya no le entregas pequeños fragmentos a la IA. Le das la totalidad de esos 10 documentos a través de una ventana de Long-Context.

Aquí tienes una regla de oro sencilla en Python:

def choose_my_ai_strategy(token_count, budget_per_query):
    if token_count > 2000000:
        return "Use RAG: Your library is too big for the desk."
    elif token_count < 100000 and budget_per_query > 0.01:
        return "Use Long-Context: The desk is big enough, just lay it all out."
    else:
        return "Use Hybrid: RAG to find the books, Long-Context to read them."

print(choose_my_ai_strategy(500000, 0.50))
Este bloque es una función de decisión simplificada para elegir entre RAG, contexto largo y un enfoque híbrido. `choose_my_ai_strategy` toma dos argumentos: `token_count` (el tamaño total de la base de conocimiento en tokens) y `budget_per_query` (cuánto puedes pagar por llamada a la API, en dólares). La primera rama (`if token_count > 2000000`) devuelve solo RAG cuando la base de conocimiento supera los 2 millones de tokens, demasiado grande para cualquier ventana de contexto actual, por lo que la recuperación es obligatoria. La segunda rama (`elif token_count < 100000 and budget_per_query > 0.01`) devuelve solo contexto largo cuando la base de conocimiento es lo suficientemente pequeña para caber en una ventana de contexto *y* el presupuesto es lo suficientemente alto como para costear enviarlo todo cada vez. La rama `else` devuelve la recomendación híbrida para todo lo intermedio: usa RAG para reducir los documentos, luego contexto largo para leer profundamente los seleccionados. La llamada de ejemplo `choose_my_ai_strategy(500000, 0.50)` pasa una base de conocimiento de 500k tokens con un presupuesto de $0.50, lo que cae en la rama `else`, devolviendo "Use Hybrid." Para el manual de producto de ~300k tokens de Rae con un presupuesto de startup, esto también apunta hacia el híbrido: RAG para encontrar las secciones correctas, contexto largo para leerlas.

Resumen de lo que aprendimos:

  • RAG es tu bibliotecario. Excelente para escala masiva, pero puede perder la visión general.
  • Long-Context es tu escritorio gigante. Comprensión profunda, pero se vuelve costoso y lento.
  • El ganador de 2026 es el enfoque híbrido: usa RAG para filtrar millones de documentos hasta unos pocos miles, y luego deja que Long-Context se encargue del resto.

RAG vs. Long-Context: ¿Cuál debería elegir Rae?

Para el bot de soporte de Rae, la decisión se reduce a tres factores: el tamaño de la base de conocimientos, cuánto puede gastar por consulta y si las respuestas requieren conectar hechos a través de secciones distantes del manual.

Usa RAG cuando:

  • Tu base de conocimientos es grande (millones de documentos, o incluso cientos de páginas que exceden la ventana de contexto). RAG escala a cualquier tamaño; el contexto largo no.
  • Eres sensible a los costos. RAG envía solo unos pocos miles de tokens al modelo; el contexto largo envía todo el documento cada vez. Para la startup de Rae, RAG cuesta fracciones de centavo por consulta en comparación con dólares para el contexto largo.
  • Necesitas baja latencia. Recuperar y enviar 2,000 tokens es rápido; enviar 500,000 tokens agrega segundos a cada respuesta, inaceptable para un chatbot orientado al cliente.
  • La respuesta probablemente esté en una sección específica. Si un cliente pregunta “¿Cómo reinicio el termostato?” y la respuesta está en la página 47, RAG la encuentra sin pagar por procesar las páginas 1–46 y 48–500.

Usa Long-Context cuando:

  • Tu conjunto de documentos cabe en la ventana de contexto (200k–2M tokens). Un manual de producto de 500 páginas con ~300k tokens podría caber en la ventana de 2M tokens de Gemini 1.5 Pro.
  • Las respuestas requieren sintetizar hechos a través de secciones distantes. Si la respuesta a “¿Se puede extender la garantía más allá de 2 años?” requiere conectar una cláusula en la página 12 con una limitación en la página 340, el contexto largo ve ambos a la vez; RAG podría recuperar uno pero no el otro.
  • Puedes permitirte el costo. A aproximadamente $1–7 por millón de tokens para modelos de contexto largo de vanguardia, un prompt de 300k tokens cuesta $0.30–2.10 por consulta; está bien para análisis interno ocasional, pero doloroso para un bot orientado al cliente de alto volumen.
  • El costo de una conexión perdida supera el costo de procesamiento. Si una respuesta incorrecta le cuesta a Rae un cliente perdido o un problema de responsabilidad, el costo adicional de tokens vale la pena.

El punto ideal del enfoque híbrido: Usa RAG para recuperar los 5–10 fragmentos relevantes principales de la base de conocimientos completa, y luego alimenta su totalidad en un modelo de contexto largo. Esto evita el problema de “Lost in the Middle” (porque estás enviando menos documentos más relevantes) mientras mantiene los costos manejables (porque no estás enviando toda la biblioteca).

El veredicto de Rae: Su manual de producto tiene ~300k tokens. El contexto largo podría manejarlo de una sola vez, pero a $0.30–2.10 por consulta de cliente, eso es prohibitivo para un bot de soporte de una startup que maneja cientos de preguntas por día. RAG recupera los 3–5 fragmentos correctos (2,000–5,000 tokens) por fracciones de centavo. Por ahora, se queda con RAG, y el enfoque híbrido está ahí si lo necesita más adelante.

Por ahora, Rae se queda con RAG. La matemática de costos es simple: su bot de soporte maneja cientos de preguntas de clientes por día, y a fracciones de centavo por consulta, RAG mantiene su runway intacto. El contexto largo puede esperar hasta que el manual crezca, o hasta que una pregunta de un cliente requiera conectar cláusulas a lo largo de 50 páginas. Pero unas semanas después del lanzamiento, empieza a suceder algo más extraño. El contexto recuperado es correcto (Rae puede ver la respuesta justo ahí en los fragmentos), pero el bot le dice confiadamente al cliente algo completamente diferente. No es “No lo sé”. No es “No puedo encontrarlo”. Se inventa algo, y suena absolutamente seguro. El próximo artículo profundiza en por qué los LLM alucinan incluso cuando la información correcta está justo ahí en el prompt.

Comprueba tu comprensión

Las preguntas a continuación van desde la recordación simple hasta el diseño abierto, siguiendo aproximadamente la Taxonomía de Bloom.

Recordar ¿Cuáles son los tres pasos del pipeline de RAG descritos en el artículo?

Entender Con tus propias palabras, explica por qué RAG podría “perder la visión general” cuando una respuesta requiere conectar un hecho del Documento 1 con un hecho en el Documento 500.

Aplicar Usando la función choose_my_ai_strategy del artículo, ¿qué devolvería para una base de conocimiento con token_count=3000000 y budget_per_query=1.00?

Analizar El enfoque híbrido del artículo utiliza RAG para encontrar los “10 documentos más relevantes” y luego introduce su totalidad en una ventana de Long-Context. Explica paso a paso por qué este enfoque híbrido soluciona específicamente la debilidad de “Lost in the Middle” de RAG sin incurrir en el costo total de Long-Context sobre todo el conjunto de datos original.

Evaluar La prueba “Needle-in-a-Haystack” del artículo solo verifica si el modelo puede recuperar un hecho específico insertado. Critica esto como un benchmark completo para elegir entre RAG y Long-Context: ¿qué capacidad no logra probar “encontrar la aguja” que sería importante para el escenario de “conectar hechos entre documentos” que el propio artículo plantea como la debilidad de RAG?

Crear Diseña una estrategia de recuperación para un nuevo escenario: un equipo legal necesita responder preguntas sobre un único contrato de 800 páginas (aproximadamente 300,000 tokens) donde las cláusulas frecuentemente se referencian y modifican entre sí a través de las secciones. Usando el marco de decisión del artículo, ¿usarías RAG, Long-Context o Híbrido? Justifica tu elección dada la naturaleza de referencias cruzadas del documento.


Artículos relacionados

Referencias y lecturas adicionales


Esta traducción fue generada automáticamente y puede contener errores. Si el idioma inglés es tu preferencia, puedes leer el artículo original en inglés .

«Aplica lo que aprendiste» es para suscriptores Supporter e Insider.

Suscríbete para desbloquear los ejercicios de este artículo.

Ver planes

¿Buscas otra cosa?

Busca en todos los artículos por título, resumen o tema.