Maison >Périphériques technologiques >IA >Récupération contextuelle de l'Anthropic: un guide avec implémentation

Récupération contextuelle de l'Anthropic: un guide avec implémentation

William Shakespeare
William Shakespeareoriginal
2025-03-02 09:34:12449parcourir

La génération auprès de la récupération (RAG) améliore les modèles d'IA en intégrant les connaissances externes. Cependant, le chiffon traditionnel fragmente souvent les documents, perdant un contexte crucial et impactant la précision.

La récupération contextuelle d'Anthropic aborde cela en ajoutant des explications concises et riches en contexte à chaque morceau de document avant d'incorporer. Cela réduit considérablement les erreurs de récupération, conduisant à une amélioration des performances des tâches en aval. Cet article détaille la récupération contextuelle et sa mise en œuvre.

Rag avec Langchain

Tirez parti de Langchain et Rag pour intégrer les données externes avec les LLM.

La récupération contextuelle a expliqué

Les méthodes de chiffon traditionnelles divisent les documents en morceaux plus petits pour une récupération plus facile, mais cela peut éliminer le contexte essentiel. Par exemple, un morceau pourrait indiquer "que plus de 3,85 millions d'habitants en font la ville la plus peuplée de l'Union européenne" sans préciser la ville. Ce manque de contexte entrave la précision.

La récupération contextuelle résout cela en ajoutant un court résumé spécifique au contexte à chaque morceau avant de l'incorporer. L'exemple précédent deviendrait:

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

Anthropic's Contextual Retrieval: A Guide With Implementation

Les tests internes d'Anthropic sur divers ensembles de données (bases de code, articles scientifiques, fiction) démontrent que la récupération contextuelle réduit les erreurs de récupération jusqu'à 49% lorsqu'elles sont associées à des modèles d'intégration contextuels et à BM25.

Anthropic's Contextual Retrieval: A Guide With Implementation

Implémentation de la récupération contextuelle

Cette section décrit une implémentation étape par étape à l'aide d'un exemple de document:

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

Étape 1: Création de morceaux

Divisez le document en morceaux plus petits et indépendants (ici, phrases):

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

Étape 2: Définition du modèle d'invite

Définissez l'invite pour la génération de contexte (le modèle d'Anthropic est utilisé):

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

# ... (rest of the prompt template code remains the same)</code>

Étape 3: Initialisation LLM

Choisissez un LLM (le GPT-4O d'OpenAI est utilisé ici):

<code>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",
)</code>

Étape 4: Création de chaîne

Connectez l'invite et LLM:

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

Étape 5: Traitement des morceaux

Générer un contexte pour chaque morceau:

<code># 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('-----')</code>

(la sortie est affichée dans l'exemple d'origine)

redirigeant une précision améliorée

Rerraner davantage la récupération de la récupération en priorisant les morceaux les plus pertinents. Cela améliore la précision et réduit les coûts. Dans les tests d'Anthropic, le rediffusion a diminué les erreurs de récupération de 5,7% à 1,9%, une amélioration de 67%.

Anthropic's Contextual Retrieval: A Guide With Implementation

Considérations supplémentaires

pour les bases de connaissances plus petites (& LT; 200 000 jetons), y compris l'ensemble de la base de connaissances directement dans l'invite, pourrait être plus efficace que l'utilisation de systèmes de récupération. De plus, l'utilisation de la mise en cache rapide (disponible avec Claude) peut réduire considérablement les coûts et améliorer les temps de réponse.

Conclusion

La récupération contextuelle d'Anthropic offre une méthode simple mais puissante pour améliorer les systèmes de chiffon. La combinaison des intérêts contextuels, BM25 et RERANKING améliore considérablement la précision. Une exploration plus approfondie des autres techniques de récupération est recommandée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn