Saltar al contenido principal

Recuperación contextual antrópica: Guía de aplicación

Descubre cómo la recuperación contextual de Anthropic mejora la precisión de los sistemas de recuperación y cómo aplicarla paso a paso.
Actualizado 29 nov 2024  · 8 min de lectura

La generación aumentada por recuperación (RAG) ayuda a los modelos de IA a incorporar conocimientos adicionales de fuentes externas. Sin embargo, estos sistemas suelen perder un contexto importante, lo que puede dar lugar a resultados menos precisos.

Anthropic ha desarrollado larecuperación contextual, una forma sencilla pero eficaz de mejorar la recuperación de información. Mantener el contexto adecuado para cada trozo reduce los errores de recuperación hasta en un 67%, lo que se traduce en un rendimiento mucho mejor en las tareas posteriores.

En este artículo, te explicaré la recuperación contextual y cómo puedes utilizarla en tus aplicaciones.

¿Qué es la recuperación contextual?

Aunque los sistemas tradicionales de GAR son eficaces, tienen un fallo importante: suelen dividir los documentos en trozos pequeños para facilitar la recuperación, pero esto puede eliminar el contexto importante.

Por ejemplo, un trozo puede decir "Sus más de 3,85 millones de habitantes la convierten en la ciudad más poblada de la Unión Europea" sin mencionar de qué ciudad o país está hablando. Esta falta de contexto puede dar lugar a resultados incompletos o irrelevantes, sobre todo cuando se necesitan detalles específicos.

diagrama estándar RAG

Fuente: Presentación de la recuperación contextual

La recuperación contextual lo soluciona generando y añadiendo una breve explicación específica del contexto a cada trozo antes de incrustarlo. En el ejemplo anterior, el trozo se transformaría de la siguiente manera:

contextualized_chunk = """Berlin is the capital and largest city of Germany, known for being the EU's most populous city within its limits.
Its more than 3.85 million inhabitants make it the European Union's most populous city, as measured by population within city limits.
"""

recuperación contextual diagrama RAG

Fuente: Presentación de la recuperación contextual

En general, las pruebas internas de Anthropic en distintos campos, como bases de código, artículos científicos y ficción, demuestran que la recuperación contextual reduce los errores de recuperación en un 49% cuando se utiliza con modelos de incrustación contextual y BM contextual25.

rendimiento de la recuperación contextual

Fuente: Presentación de la recuperación contextual

Implementación de la recuperación contextual

A continuación te explicaré paso a paso cómo poner en práctica la recuperación contextual. Utilizaremos como ejemplo el siguiente documento de muestra:

# Input text for the knowledge base
input_text = """Berlin is the capital and largest city of Germany, both by area and by population.
Its more than 3.85 million inhabitants make it the European Union's most populous city, as measured by population within city limits.
The city is also one of the states of Germany and is the third smallest state in the country in terms of area.
Paris is the capital and most populous city of France.
It is situated along the Seine River in the north-central part of the country.
The city has a population of over 2.1 million residents within its administrative limits, making it one of Europe's major population centers."""

Paso 1: Divide el documento en trozos

El primer paso es dividir el documento de muestra en trozos más pequeños e independientes. En este caso, lo dividiremos en frases individuales.

# Splitting the input text into smaller chunks
test_chunks = [
    'Berlin is the capital and largest city of Germany, both by area and by population.',
    "\\n\\nIts more than 3.85 million inhabitants make it the European Union's most populous city, as measured by population within city limits.",
    '\\n\\nThe city is also one of the states of Germany and is the third smallest state in the country in terms of area.',
    '\\n\\n# Paris is the capital and most populous city of France.',
    '\\n\\n# It is situated along the Seine River in the north-central part of the country.',
    "\\n\\n# The city has a population of over 2.1 million residents within its administrative limits, making it one of Europe's major population centers."
]

Paso 2: Definir la plantilla de avisos

A continuación, configuraremos el indicador que nuestro modelo utilizará para generar el contexto de cada trozo. Anthropic ha proporcionado una plantilla útil para ello. La consulta tomará dos entradas: el documento completo y el trozo concreto de texto que queremos situar.

from langchain.prompts import ChatPromptTemplate, PromptTemplate, HumanMessagePromptTemplate

# Define the prompt for generating contextual information
anthropic_contextual_retrieval_system_prompt = """<document>
{WHOLE_DOCUMENT}
</document>
Here is the chunk we want to situate within the whole document
<chunk>
{CHUNK_CONTENT}
</chunk>
Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else."""

# Create a PromptTemplate for WHOLE_DOCUMENT and CHUNK_CONTENT
anthropic_prompt_template = PromptTemplate(
    input_variables=['WHOLE_DOCUMENT', 'CHUNK_CONTENT'],
    template=anthropic_contextual_retrieval_system_prompt
)

# Wrap the prompt in a HumanMessagePromptTemplate
human_message_prompt = HumanMessagePromptTemplate(prompt=anthropic_prompt_template)
# Create the final ChatPromptTemplate
anthropic_contextual_retrieval_final_prompt = ChatPromptTemplate(
    input_variables=['WHOLE_DOCUMENT', 'CHUNK_CONTENT'],
    messages=[human_message_prompt]
)

Paso 3: Inicializa tu modelo lingüístico preferido

Aquí puedes elegir el LLM que quieras para generar el contexto de cada trozo. Para nuestro ejemplo, utilizaremos la GPT-4o de OpenAI GPT-4o de OpenAI.

import os
from langchain_openai import ChatOpenAI

# Load environment variables
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# Initialize the model instance
llm_model_instance = ChatOpenAI(
    model="gpt-4o",
)

Paso 4: Ponerlo todo junto

Conectaremos la plantilla de avisos con el modelo de lenguaje para crear una cadena LLM que esté lista para procesar los trozos que hemos creado antes.

from langchain.output_parsers import StrOutputParser

# Chain the prompt with the model instance
contextual_chunk_creation = anthropic_contextual_retrieval_final_prompt | llm_model_instance | StrOutputParser()

Paso 5: Procesa cada trozo

Ahora recorreremos nuestros trozos, generaremos la información contextual de cada uno e imprimiremos los resultados utilizando la cadena LLM contextual_chunk_creation.

# Process each chunk and generate contextual information
for test_chunk in test_chunks:
    res = contextual_chunk_creation.invoke({
        "WHOLE_DOCUMENT": input_text,
        "CHUNK_CONTENT": test_chunk
    })
    print(res)
    print('-----')
The document compares Berlin and Paris, highlighting Berlin as Germany's capital and largest city by area and population, and noting its significance within the European Union.
-----
Berlin is the capital and largest city of Germany, known for being the EU's most populous city within its limits.
-----
Berlin is the capital and largest city of Germany, both by area and by population.
-----
Paris, the capital of France, is a major population center in Europe with over 2.1 million residents.
-----
Paris is the capital and most populous city of France.
-----
Paris is the capital and most populous city of France, with a population of over 2.1 million residents within its administrative limits.
-----

Mejora mediante el reranking

Aunque la recuperación contextual aumenta la precisión de la recuperación, puedes llevarla aún más lejos con reranking. Esta técnica de filtrado garantiza que sólo se envíen al modelo los trozos más relevantes, mejorando la calidad de la respuesta y reduciendo el coste y el tiempo de procesamiento.

La reordenación funciona puntuando los trozos recuperados en el primer paso y quedándose sólo con los mejores. En nuestras pruebas, el reranking redujo los errores de recuperación del 5,7% a sólo el 1,9%, mejorando la precisión en un 67% en comparación con los métodos tradicionales.

recuperación contextual con rendimiento reranking

Fuente: Presentación de la recuperación contextual

Consideraciones adicionales

La investigación antrópica ha descubierto que no todas las situaciones requieren la complejidad de la recuperación contextual. Para las bases de conocimientos más pequeñas, de menos de 200.000 tokens (unas 500 páginas), una opción mejor podría ser incluir toda la base de conocimientos directamente en la consulta del modelo, omitiendo por completo la necesidad de sistemas de recuperación.

También sugieren aprovechar caché rápidauna función introducida para Claude. Al almacenar en caché los avisos de uso frecuente entre las llamadas a la API, los desarrolladores pueden reducir los costes hasta un 90% y acelerar los tiempos de respuesta más del doble. Este libro de cocina de caché rápida proporciona una guía paso a paso para ponerlo en práctica.

Conclusión

La recuperación contextual de Anthropic es un método sencillo pero eficaz para mejorar los sistemas de recuperación. La combinación de incrustaciones contextuales, BM25 y reordenación mejora significativamente la precisión de estos sistemas.

Para saber más sobre las distintas técnicas de recuperación, te recomiendo los siguientes blogs:

  1. Implementación del RAG correctivo (CRAG) con LangGraph
  2. Recuperación recursiva para RAG: Implementación con LlamaIndex

Ryan Ong's photo
Author
Ryan Ong
LinkedIn
Twitter

Ryan es un científico de datos líder especializado en la creación de aplicaciones de IA utilizando LLMs. Es candidato al doctorado en Procesamiento del Lenguaje Natural y Grafos de Conocimiento en el Imperial College de Londres, donde también completó su máster en Informática. Fuera de la ciencia de datos, escribe un boletín semanal de Substack, The Limitless Playbook, donde comparte una idea procesable de los mejores pensadores del mundo y ocasionalmente escribe sobre conceptos básicos de la IA.

Temas

Aprende IA con estos cursos

curso

Retrieval Augmented Generation (RAG) with LangChain

3 hr
1.2K
Learn cutting-edge methods for integrating external data with LLMs using Retrieval Augmented Generation (RAG) with LangChain.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

tutorial

Cómo ajustar GPT 3.5: Liberar todo el potencial de la IA

Explore GPT-3.5 Turbo y descubra el potencial transformador del ajuste fino. Aprenda a personalizar este modelo de lenguaje avanzado para aplicaciones especializadas, mejore su rendimiento y comprenda los costes asociados, la seguridad y las consideraciones de privacidad.
Moez Ali's photo

Moez Ali

11 min

tutorial

Guía introductoria para el ajuste preciso de los LLM

El ajuste preciso de los grandes modelos lingüísticos (LLM) ha revolucionado el procesamiento del lenguaje natural (PLN) y ofrece capacidades sin precedentes en tareas como la traducción lingüística, el análisis del sentimiento y la generación de textos. Este enfoque transformador aprovecha modelos preentrenados como el GPT-2 y mejora su rendimiento en dominios específicos mediante el proceso de ajuste preciso.
Josep Ferrer's photo

Josep Ferrer

12 min

tutorial

Tutorial de la API de OpenAI Assistants

Una visión completa de la API Assistants con nuestro artículo, que ofrece una mirada en profundidad a sus características, usos en la industria, guía de configuración y las mejores prácticas para maximizar su potencial en diversas aplicaciones empresariales.
Zoumana Keita 's photo

Zoumana Keita

14 min

tutorial

Tutorial sobre cómo crear aplicaciones LLM con LangChain

Explore el potencial sin explotar de los grandes modelos lingüísticos con LangChain, un marco Python de código abierto para crear aplicaciones avanzadas de IA.
Moez Ali's photo

Moez Ali

12 min

tutorial

Introducción a la incrustación de texto con la API OpenAI

Explore nuestra guía sobre el uso de la API OpenAI para crear incrustaciones de texto. Descubra sus aplicaciones en la clasificación de textos, la recuperación de información y la detección de similitudes semánticas.
Zoumana Keita 's photo

Zoumana Keita

7 min

tutorial

Tutorial FLAN-T5: Guía y puesta a punto

Una guía completa para afinar un modelo FLAN-T5 para una tarea de respuesta a preguntas utilizando la biblioteca de transformadores, y ejecutando la inferencia optmizada en un escenario del mundo real.
Zoumana Keita 's photo

Zoumana Keita

15 min

See MoreSee More