LangChain / RAG / vektordatabaser · Lektion

Kontekstuel komprimering med LLM'er

Optimér den kontekst, der sendes til LLM'en, ved dynamisk at filtrere og komprimere hentede dokumenter, så fokus rettes mod det relevante.

Lektion 2 af 412 trin

Kontekstuel komprimering med LLM'er er en gratis LangChain / RAG / vektordatabaser-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i LangChain / RAG / vektordatabaser, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. LangChain / RAG / vektordatabaser-kurset indeholder 4 lektioner i alt.

Hvorfor komprimere kontekst?

Når du bygger RAG-systemer (Retrieval Augmented Generation), har Large Language Models (LLM'er) et begrænset kontekstvindue. Hvis du giver dem for meget irrelevant information, kan det føre til flere problemer:

  • Problemer med ydeevnen: LLM'er kan blive forvirrede af støj.
  • Højere omkostninger: Flere tokens betyder højere API-regninger.
  • Langsommere svar: Det tager længere tid at behandle mere tekst.

Det er her, kontekstkomprimering kommer ind i billedet!

Hvad er kontekstkomprimering?

Kontekstkomprimering er en teknik, der bruges til at forfine de dokumenter, som dit RAG-system henter, før de sendes til LLM'en. Den fungerer som et intelligent filter og en udtrækker.

  • Filtrer: Fjern hele dokumenter, der er mindre relevante.
  • Udtræk: Find og behold kun de mest relevante sætninger eller afsnit fra de resterende dokumenter, som vedrører brugerens forespørgsel.

Tænk på det som at fremhæve de vigtigste dele af en lang artikel.

Basis-retrieverens rolle

Kontekstkomprimering erstatter ikke din oprindelige hentemekanisme. I stedet fungerer den oven på den.

  • Du har stadig brug for en basis-retriever (f.eks. en retriever til et vektorlager) til at hente et indledende sæt potentielt relevante dokumenter.
  • Komprimeringskomponenten tager derefter disse dokumenter og anvender sin logik til at indsnævre eller komprimere deres indhold.

Det er et forfiningstrin, ikke en erstatning for at finde de indledende oplysninger.

Introduktion til LangChains værktøjer

LangChain leverer fremragende værktøjer til implementering af kontekstkomprimering:

  • ContextualCompressionRetriever er hovedkomponenten. Den omslutter din basis-retriever og en dokumentkomprimeringskomponent.
  • En dokumentkomprimeringskomponent (f.eks. en LLM-baseret) indeholder den faktiske logik, der filtrerer eller udtrækker oplysninger fra dokumenterne.

Lad os først se, hvordan du konfigurerer en simpel basis-retriever.

Konfiguration af en basis-retriever

Her er en simpel dummy-retriever. I en rigtig applikation vil den typisk oprette forbindelse til en vektordatabase som Pinecone eller Chroma.

from langchain_core.documents import Document

class SimpleBaseRetriever:
    def get_relevant_documents(self, query: str):
        if "programming" in query.lower() or "python" in query.lower():
            return [
                Document(page_content="Python is a versatile programming language. Used in AI & web dev."),
                Document(page_content="Java is popular for enterprise apps."),
                Document(page_content="Data science uses Python for analysis & ML."),
                Document(page_content="History of programming languages dates back centuries.")
            ]
        return [
            Document(page_content="The quick brown fox jumps over the lazy dog."),
            Document(page_content="Cats enjoy napping in sunny spots, especially in the sun."),
            Document(page_content="A computer processes data very quickly and efficiently.")
        ]

base_retriever = SimpleBaseRetriever()
print("Base retriever initialized.")
# Example usage:
# docs = base_retriever.get_relevant_documents("python")
# for doc in docs: print(doc.page_content)

LLM'er som dokumentkomprimeringskomponenter

En af de mest effektive måder at komprimere kontekst på er at bruge endnu en LLM! En LLM kan intelligent forstå forespørgslen og de hentede dokumenter og derefter kun udtrække de mest relevante sætninger.

  • Det går videre end simpel søgning efter nøgleord.
  • Det udnytter LLM'ens forståelse af semantik.

LangChain leverer specifikke komprimeringskomponenter, der bruger LLM'er til denne opgave.

Brug af LLMChainExtractor (kode)

LLMChainExtractor bruger en LLM til at udtrække relevante afsnit fra dokumenter. Sådan konfigurerer du den sammen med ContextualCompressionRetriever.

from langchain_core.documents import Document
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain.retrievers import ContextualCompressionRetriever
from langchain_openai import OpenAI # pip install langchain-openai

# --- Dummy Base Retriever (for standalone runnable) ---
class SimpleBaseRetriever:
    def get_relevant_documents(self, query: str):
        if "programming" in query.lower() or "python" in query.lower():
            return [
                Document(page_content="Python is a versatile programming language. Used in AI & web dev."),
                Document(page_content="Java is popular for enterprise apps."),
                Document(page_content="Data science uses Python for analysis & ML."),
                Document(page_content="History of programming languages dates back centuries.")
            ]
        return [
            Document(page_content="The quick brown fox jumps over the lazy dog."),
            Document(page_content="Cats enjoy napping in sunny spots, especially in the sun."),
            Document(page_content="A computer processes data very quickly and efficiently.")
        ]
base_retriever = SimpleBaseRetriever()

# --- LLM for Compression ---
# NOTE: You need to set your OpenAI API key as an environment variable
# e.g., import os; os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
# Ensure 'langchain-openai' is installed (pip install langchain-openai).
llm = OpenAI(temperature=0.1) # Low temp for focused extraction

# --- Create the Extractor and Compression Retriever ---
compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=base_retriever
)
print("LLMChainExtractor and ContextualCompressionRetriever initialized!")

Kørsel af komprimeret hentning (kode)

Lad os nu køre en forespørgsel og se, hvordan ContextualCompressionRetriever (med LLMChainExtractor) behandler dokumenterne. Vær opmærksom på længden af dokumentindholdet!

from langchain_core.documents import Document
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain.retrievers import ContextualCompressionRetriever
from langchain_openai import OpenAI # pip install langchain-openai

# --- Dummy Base Retriever (re-defined for standalone runnable) ---
class SimpleBaseRetriever:
    def get_relevant_documents(self, query: str):
        if "programming" in query.lower() or "python" in query.lower():
            return [
                Document(page_content="Python is a versatile programming language. Used in AI & web dev."),
                Document(page_content="Java is popular for enterprise apps."),
                Document(page_content="Data science uses Python for analysis & ML."),
                Document(page_content="History of programming languages dates back centuries.")
            ]
        return [
            Document(page_content="The quick brown fox jumps over the lazy dog."),
            Document(page_content="Cats enjoy napping in sunny spots, especially in the sun."),
            Document(page_content="A computer processes data very quickly and efficiently.")
        ]
base_retriever = SimpleBaseRetriever()

# --- LLM for Compression (re-defined for standalone runnable) ---
# NOTE: You need to set your OpenAI API key as an environment variable
# Ensure 'langchain-openai' is installed.
llm = OpenAI(temperature=0.1)
compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=base_retriever
)

# --- Run a Query ---
query = "What is Python used for?"
print(f"Query: '{query}'\n")

print("--- Original (simulated) documents ---")
original_docs = base_retriever.get_relevant_documents(query)
for i, doc in enumerate(original_docs):
    print(f"Doc {i+1} (Chars: {len(doc.page_content)}): {doc.page_content}")
print(f"Total original documents: {len(original_docs)}\n")

print("--- Content after compression ---")
compressed_docs = compression_retriever.get_relevant_documents(query)
for i, doc in enumerate(compressed_docs):
    # The LLMChainExtractor modifies the page_content of existing docs
    print(f"Compressed Doc {i+1} (Chars: {len(doc.page_content)}): {doc.page_content}")
print(f"Total compressed documents: {len(compressed_docs)}")

Andre muligheder for komprimering

LangChain tilbyder mere end bare LLMChainExtractor:

  • LLMChainFilter: Bruger en LLM til at afgøre, om et helt dokument er tilstrækkeligt relevant til at blive beholdt, i stedet for at udtrække dele af det.
  • EmbeddingsFilter: Filtrerer dokumenter ud fra den semantiske lighed mellem deres embeddings og forespørgslen. Det er ofte hurtigere, men mindre nuanceret end LLM-baseret filtrering.
  • DocumentCompressorPipeline: Giver dig mulighed for at kæde flere komprimeringskomponenter sammen til kompleks logik!

Hvorfor komprimering er vigtig

Kontekstkomprimering er en effektiv teknik til optimering af RAG-systemer:

  • Forbedret relevans: LLM'er modtager mere fokuserede og relevante oplysninger.
  • Lavere omkostninger: Der sendes færre tokens til LLM-API'et.
  • Hurtigere svar: LLM'er behandler mindre tekst, hvilket giver hurtigere svar.
  • Bedre nøjagtighed: Mindre irrelevant støj reducerer risikoen for hallucinationer i LLM'en.

Det hjælper dig med at få mere ud af dine LLM'er og samtidig spare ressourcer!

Kontrol af komprimering

Test din forståelse af kontekstkomprimering!

Opsummering af kontekstkomprimering

Vi har undersøgt, hvordan kontekstkomprimering forfiner hentede dokumenter til LLM'er:

  • Det er et trin efter hentningen, der filtrerer og udtrækker vigtige oplysninger.
  • LangChains ContextualCompressionRetriever omslutter en basis-retriever og en dokumentkomprimeringskomponent.
  • LLMChainExtractor bruger en LLM til intelligent at udtrække relevante uddrag.
  • Fordelene omfatter forbedret relevans, lavere omkostninger, hurtigere svar og bedre nøjagtighed.

Denne teknik er afgørende for optimering af RAG-systemer, især med store vidensbaser.

Gratis at komme i gang

Lær LangChain / RAG / vektordatabaser med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Kontekstuel komprimering med LLM'er” gratis?

Ja — hele teksten til “Kontekstuel komprimering med LLM'er” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af LangChain / RAG / vektordatabaser-kurset, skal du opgradere til CoddyKit PRO. LangChain / RAG / vektordatabaser-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Kontekstuel komprimering med LLM'er”?

Optimér den kontekst, der sendes til LLM'en, ved dynamisk at filtrere og komprimere hentede dokumenter, så fokus rettes mod det relevante. Du øver dig i LangChain / RAG / vektordatabaser med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på LangChain / RAG / vektordatabaser?

Der kræves ingen tidligere erfaring. LangChain / RAG / vektordatabaser på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Kontekstuel komprimering med LLM'er”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne LangChain / RAG / vektordatabaser-lektion?

Ja. Alle LangChain / RAG / vektordatabaser-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Strategier for multi-query retrieval
  2. Kontekstuel komprimering med LLM'er
  3. Hybrid søgning og re-ranking
  4. Retrieval af overordnede dokumenter og sætningsvinduer
← Tilbage til LangChain / RAG / vektordatabaser