Direkt zum Inhalt

Anthropic's Contextual Retrieval: Ein Leitfaden mit Umsetzung

Erfahre, wie das kontextbezogene Retrieval von Anthropic die Genauigkeit von Retrievalsystemen verbessert und wie du es Schritt für Schritt implementierst.
Aktualisierte 29. Nov. 2024  · 8 Min. Lesezeit

Retrieval-augmented generation (RAG) hilft KI-Modellen, zusätzliches Wissen aus externen Quellen einzubeziehen. Allerdings gehen bei diesen Systemen oft wichtige Zusammenhänge verloren, was zu ungenauen Ergebnissen führen kann.

Anthropic hat das kontextbezogene Retrievalentwickelt , eine einfache, aber effektive Methode zur Verbesserung der Informationsbeschaffung. Wenn du für jeden Chunk den richtigen Kontext kennst, werden Abruffehler um bis zu 67% reduziert, was zu einer deutlich besseren Leistung bei nachgelagerten Aufgaben führt.

In diesem Artikel erkläre ich dir die kontextbezogene Suche und wie du sie in deinen Anwendungen nutzen kannst.

Was ist Contextual Retrieval?

Herkömmliche RAG-Systeme sind zwar effektiv, haben aber einen großen Fehler: Sie teilen die Dokumente oft in kleine Teile auf, um das Auffinden zu erleichtern, aber dadurch kann wichtiger Kontext verloren gehen.

Zum Beispiel könnte es heißen : "Mit mehr als 3,85 Millionen Einwohnern ist sie die bevölkerungsreichste Stadt der Europäischen Union", ohne zu erwähnen, welche Stadt oder welches Land gemeint ist. Dieser fehlende Kontext kann zu unvollständigen oder irrelevanten Ergebnissen führen, vor allem wenn spezifische Details benötigt werden.

Standard-RAG-Diagramm

Quelle: Introducing Contextual Retrieval

Die kontextbezogene Suche behebt dieses Problem, indem sie eine kurze, kontextspezifische Erklärung zu jedem Chunk erstellt und hinzufügt, bevor sie ihn einbettet. Im obigen Beispiel würde der Chunk wie folgt umgewandelt werden:

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

contextual retrieval RAG diagram

Quelle: Introducing Contextual Retrieval

Insgesamt zeigen die internen Tests von Anthropic in verschiedenen Bereichen, darunter Codebases, wissenschaftliche Arbeiten und Belletristik, dass die kontextuelle Suche die Suchfehler um 49 % reduziert, wenn sie mit kontextuellen Einbettungsmodellen und Contextual BM25 verwendet wird.

contextual retrieval performance

Quelle: Introducing Contextual Retrieval

Implementierung des kontextuellen Retrievals

Ich erkläre dir jetzt Schritt für Schritt, wie du die kontextbezogene Suche implementierst. Wir verwenden das folgende Beispieldokument als Beispiel:

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

Schritt 1: Unterteile das Dokument in einzelne Abschnitte

Der erste Schritt besteht darin, das Musterdokument in kleinere, unabhängige Teile zu zerlegen. In diesem Fall werden wir ihn in einzelne Sätze aufteilen.

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

Schritt 2: Definiere die Prompt-Vorlage

Als Nächstes richten wir die Eingabeaufforderung ein, die unser Modell verwenden wird, um Kontext für jeden Chunk zu erzeugen. Anthropic hat dafür eine nützliche Vorlage geliefert. Die Eingabeaufforderung nimmt zwei Eingaben entgegen: das gesamte Dokument und den bestimmten Textabschnitt, den wir einordnen wollen.

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

Schritt 3: Initialisiere dein bevorzugtes Sprachmodell

Hier kannst du ein beliebiges LLM auswählen, um Kontext für jeden Chunk zu erzeugen. Für unser Beispiel werden wir die OpenAI's GPT-4o Modell.

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

Schritt 4: Alles zusammenfügen

Wir werden die Prompt-Vorlage mit dem Sprachmodell verbinden, um eine LLM-Kette zu erstellen, die bereit ist, die zuvor erstellten Chunks zu verarbeiten.

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

Schritt 5: Jedes Stückchen verarbeiten

Wir werden nun eine Schleife durch unsere Chunks ziehen, die Kontextinformationen für jeden einzelnen generieren und die Ergebnisse mit der contextual_chunk_creation LLM-Kette ausdrucken.

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

Verbesserung durch Reranking

Das kontextbezogene Retrieval erhöht zwar die Abrufgenauigkeit, aber du kannst noch weiter gehen mit reranking. Diese Filtertechnik stellt sicher, dass nur die relevantesten Chunks an das Modell gesendet werden, was die Antwortqualität verbessert und die Kosten und die Bearbeitungszeit senkt.

Beim Reranking werden die im ersten Schritt gefundenen Chunks bewertet und nur die besten behalten. In unseren Tests reduzierte das Reranking die Suchfehler von 5,7 % auf nur 1,9 % und verbesserte die Genauigkeit um 67 % im Vergleich zu herkömmlichen Methoden.

kontextbezogene Suche mit Reranking-Leistung

Quelle: Introducing Contextual Retrieval

Zusätzliche Überlegungen

Die anthropologische Forschung hat herausgefunden, dass nicht jede Situation die Komplexität des Kontextabrufs erfordert. Bei kleineren Wissensdatenbanken mit weniger als 200.000 Token (ca. 500 Seiten) könnte es besser sein, die gesamte Wissensdatenbank direkt in die Eingabeaufforderung des Modells einzubeziehen und auf Retrievalsysteme zu verzichten.

Sie empfehlen außerdem, die Vorteile des Prompt-Cachingzu nutzen, eine Funktion, die für Claude eingeführt wurde. Durch das Zwischenspeichern häufig genutzter Prompts zwischen API-Aufrufen können Entwickler die Kosten um bis zu 90 % senken und die Antwortzeiten um mehr als das Doppelte beschleunigen. Dieses Prompt-Caching-Kochbuch bietet eine Schritt-für-Schritt-Anleitung für die Implementierung.

Fazit

Das kontextbezogene Retrieval von Anthropic ist eine einfache, aber effektive Methode zur Verbesserung von Retrievalsystemen. Die Kombination von kontextuellen Einbettungen, BM25 und Reranking verbessert die Genauigkeit dieser Systeme erheblich.

Um mehr über verschiedene Suchtechniken zu erfahren, empfehle ich die folgenden Blogs:

  1. Corrective RAG (CRAG) Implementierung mit LangGraph
  2. Rekursiver Abruf für RAG: Implementierung mit LlamaIndex

Ryan Ong's photo
Author
Ryan Ong
LinkedIn
Twitter

Ryan ist ein führender Datenwissenschaftler, der sich auf die Entwicklung von KI-Anwendungen mit LLMs spezialisiert hat. Er ist Doktorand für natürliche Sprachverarbeitung und Wissensgraphen am Imperial College London, wo er auch seinen Master in Informatik gemacht hat. Außerhalb der Datenwissenschaft schreibt er einen wöchentlichen Substack-Newsletter, The Limitless Playbook, in dem er eine umsetzbare Idee von den besten Denkern der Welt teilt und gelegentlich über zentrale KI-Konzepte schreibt.

Themen

Lerne KI mit diesen Kursen!

Kurs

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.
Siehe DetailsRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

See MoreSee More