Pular para o conteúdo principal

Recuperação contextual do Anthropic: Um guia com implementação

Saiba como a recuperação contextual da Anthropic melhora a precisão dos sistemas de recuperação e como implementá-la passo a passo.
Actualizado 29 de nov. de 2024  · 8 min de leitura

A geração aumentada por recuperação (RAG) ajuda os modelos de IA a incorporar conhecimento extra de fontes externas. No entanto, esses sistemas geralmente perdem um contexto importante, o que pode levar a resultados menos precisos.

A Anthropic desenvolveu a recuperação contextual, uma maneira simples e eficaz de aprimorar a recuperação de informações. Manter o contexto correto para cada bloco reduz os erros de recuperação em até 67%, levando a um desempenho muito melhor nas tarefas posteriores.

Neste artigo, explicarei a recuperação contextual e como você pode usá-la em seus aplicativos.

O que é recuperação contextual?

Embora os sistemas RAG tradicionais sejam eficazes, eles têm uma falha importante: geralmente dividem os documentos em pequenos pedaços para facilitar a recuperação, mas isso pode remover um contexto importante.

Por exemplo, um trecho pode dizer "Seus mais de 3,85 milhões de habitantes fazem dela a cidade mais populosa da União Europeia" sem mencionar de qual cidade ou país você está falando. Essa falta de contexto pode levar a resultados incompletos ou irrelevantes, especialmente quando são necessários detalhes específicos.

diagrama RAG padrão

Fonte: Apresentando a recuperação contextual

A recuperação contextual corrige isso gerando e adicionando uma breve explicação específica do contexto a cada bloco antes de incorporá-lo. No exemplo acima, o bloco seria transformado da seguinte forma:

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.
"""

recuperação contextual diagrama RAG

Fonte: Apresentando a recuperação contextual

No geral, os testes internos da Anthropic em diferentes campos, incluindo bases de código, artigos científicos e ficção, mostram que a recuperação contextual reduz os erros de recuperação em 49% quando usada com modelos de incorporação contextual e Contextual BM25.

desempenho da recuperação contextual

Fonte: Apresentando a recuperação contextual

Implementação da recuperação contextual

Agora explicarei passo a passo como implementar a recuperação contextual. Usaremos o seguinte documento de amostra como exemplo:

# 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."""

Etapa 1: Divida o documento em partes

A primeira etapa é dividir o documento de amostra em partes menores e independentes. Nesse caso, vamos dividi-lo em frases individuais.

# 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."
]

Etapa 2: Definir o modelo de prompt

Em seguida, configuraremos o prompt que nosso modelo usará para gerar contexto para cada bloco. O Anthropic forneceu um modelo útil para isso. O prompt receberá duas entradas: o documento inteiro e a parte específica do texto que você deseja 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]
)

Etapa 3: Inicialize seu modelo de idioma preferido

Aqui, você pode escolher qualquer LLM que desejar para gerar contexto para cada bloco. Em nosso exemplo, usaremos o GPT-4o da 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",
)

Etapa 4: Colocando tudo junto

Conectaremos o modelo de prompt ao modelo de linguagem para criar uma cadeia LLM pronta para processar os blocos que criamos anteriormente.

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()

Etapa 5: Processar cada pedaço

Agora, percorreremos nossos blocos, geraremos as informações contextuais para cada um deles e imprimiremos os resultados usando a cadeia contextual_chunk_creation LLM.

# 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.
-----

Melhoria com o uso do Reranking

Embora a recuperação contextual aumente a precisão da recuperação, você pode ir ainda mais longe com reranking. Essa técnica de filtragem garante que apenas os blocos mais relevantes sejam enviados ao modelo, melhorando a qualidade da resposta e reduzindo o custo e o tempo de processamento.

O ranqueamento funciona pontuando os blocos recuperados na primeira etapa e mantendo apenas os melhores. Em nossos testes, o reranking reduziu os erros de recuperação de 5,7% para apenas 1,9%, melhorando a precisão em 67% em comparação com os métodos tradicionais.

recuperação contextual com desempenho de reranking

Fonte: Apresentando a recuperação contextual

Considerações adicionais

A pesquisa antrópica descobriu que nem todas as situações exigem a complexidade da recuperação contextual. Para bases de conhecimento menores, com menos de 200.000 tokens (cerca de 500 páginas), uma opção melhor pode ser incluir toda a base de conhecimento diretamente no prompt do modelo, ignorando totalmente a necessidade de sistemas de recuperação.

Eles também sugerem que você aproveite as vantagens do prompt cachingum recurso introduzido para o Claude. Ao armazenar em cache os prompts usados com frequência entre as chamadas de API, os desenvolvedores podem reduzir os custos em até 90% e acelerar os tempos de resposta em mais de duas vezes. Este livro de receitas de cache imediato fornece orientação passo a passo para você implementar isso.

Conclusão

A recuperação contextual do Anthropic é um método simples, mas eficaz, para aprimorar os sistemas de recuperação. A combinação de embeddings contextuais, BM25 e reranking melhora significativamente a precisão desses sistemas.

Para saber mais sobre diferentes técnicas de recuperação, recomendo os seguintes blogs:

  1. Implementação do RAG corretivo (CRAG) com LangGraph
  2. Recuperação recursiva para RAG: Implementação com o LlamaIndex

Ryan Ong's photo
Author
Ryan Ong
LinkedIn
Twitter

Ryan é um cientista de dados líder, especializado na criação de aplicativos de IA usando LLMs. Ele é candidato a PhD em Processamento de Linguagem Natural e Gráficos de Conhecimento no Imperial College London, onde também concluiu seu mestrado em Ciência da Computação. Fora da ciência de dados, ele escreve um boletim informativo semanal da Substack, The Limitless Playbook, no qual compartilha uma ideia prática dos principais pensadores do mundo e, ocasionalmente, escreve sobre os principais conceitos de IA.

Temas

Aprenda IA com estes 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 DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

O que é Retrieval Augmented Generation (RAG)?

Explorar a Geração Aumentada de Recuperação (RAG) RAG: Integração de LLMs com pesquisa de dados para respostas de IA diferenciadas. Compreender suas aplicações e seu impacto.
Natassha Selvaraj's photo

Natassha Selvaraj

8 min

tutorial

Dominando a retropropagação: Um guia abrangente para redes neurais

Mergulhe nos fundamentos da retropropagação em redes neurais com um guia prático para treinar e avaliar um modelo para um cenário de uso de classificação de imagens.
Zoumana Keita 's photo

Zoumana Keita

14 min

tutorial

Tutorial da API de assistentes da OpenAI

Uma visão geral abrangente da API Assistants com nosso artigo, que oferece uma análise aprofundada de seus recursos, usos no setor, orientação de configuração e práticas recomendadas para maximizar seu potencial em vários aplicativos de negócios.
Zoumana Keita 's photo

Zoumana Keita

14 min

tutorial

Guia de Introdução ao Ajuste Fino de LLMs

O ajuste fino dos grandes modelos de linguagem (LLMs, Large Language Models) revolucionou o processamento de linguagem natural (PLN), oferecendo recursos sem precedentes em tarefas como tradução de idiomas, análise de sentimentos e geração de textos. Essa abordagem transformadora aproveita modelos pré-treinados como o GPT-2, aprimorando seu desempenho em domínios específicos pelo processo de ajuste fino.
Josep Ferrer's photo

Josep Ferrer

12 min

tutorial

Guia para iniciantes no uso da API do ChatGPT

Este guia o orienta sobre os conceitos básicos da API ChatGPT, demonstrando seu potencial no processamento de linguagem natural e na comunicação orientada por IA.
Moez Ali's photo

Moez Ali

11 min

tutorial

IA explicável - Entendendo e confiando nos modelos de aprendizado de máquina

Mergulhe na IA explicável (XAI) e saiba como criar confiança em sistemas de IA com LIME e SHAP para interpretabilidade de modelos. Entenda a importância da transparência e da justiça nas decisões baseadas em IA.
Zoumana Keita 's photo

Zoumana Keita

12 min

See MoreSee More