Contextual compression helps reduce the size of text data while keeping its important meaning. This makes it easier and faster to process in language models.
Contextual compression in LangChain
from langchain.llms import OpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.retrievers.document_compressors import LLMChainCompressor from langchain.schema import Document # Create a language model instance llm = OpenAI(temperature=0) # Create a prompt for compression prompt = PromptTemplate( template="Compress the following text while keeping key information:\n\n{context}", input_variables=["context"] ) # Create the LLM chain for compression llm_chain = LLMChain(llm=llm, prompt=prompt) # Create the compressor compressor = LLMChainCompressor(llm_chain=llm_chain) # Compress text (as document) compressed_docs = compressor.compress_documents([Document(page_content=long_text)]) compressed_text = compressed_docs[0].page_content
The LLMChainCompressor uses a language model chain to contextually compress documents.
You need to provide an LLMChain instance (with prompt) to create the compressor.
from langchain.llms import OpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.retrievers.document_compressors import LLMChainCompressor from langchain.schema import Document llm = OpenAI(temperature=0) prompt = PromptTemplate(input_variables=["context"], template="Compress: {context}") llm_chain = LLMChain(llm=llm, prompt=prompt) compressor = LLMChainCompressor(llm_chain=llm_chain) text = "This is a long text that needs to be compressed." compressed = compressor.compress_documents([Document(page_content=text)])[0].page_content
from langchain.llms import OpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.retrievers.document_compressors import LLMChainCompressor from langchain.schema import Document llm = OpenAI(temperature=0) prompt = PromptTemplate(input_variables=["context"], template="Compress: {context}") llm_chain = LLMChain(llm=llm, prompt=prompt) compressor = LLMChainCompressor(llm_chain=llm_chain) long_text = """Here is a very long document or conversation that you want to shorten while keeping the main ideas.""" compressed_text = compressor.compress_documents([Document(page_content=long_text)])[0].page_content
This program shows how to compress a paragraph using LLMChainCompressor. It prints the original and compressed text lengths and the compressed text itself.
from langchain.llms import OpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.retrievers.document_compressors import LLMChainCompressor from langchain.schema import Document # Initialize the language model llm = OpenAI(temperature=0) # Create compression prompt prompt = PromptTemplate( input_variables=["context"], template="Compress the following text while preserving key meaning: {context}" ) # Create LLM chain llm_chain = LLMChain(llm=llm, prompt=prompt) # Create compressor compressor = LLMChainCompressor(llm_chain=llm_chain) # Original long text long_text = """LangChain helps developers build applications with language models. It provides tools to manage prompts, chains, and memory. Contextual compression reduces text size while keeping meaning.""" # Compress the text doc = Document(page_content=long_text) compressed_docs = compressor.compress_documents([doc]) compressed_text = compressed_docs[0].page_content print("Original text length:", len(long_text)) print("Compressed text:", compressed_text) print("Compressed text length:", len(compressed_text))
Contextual compression depends on the quality of the language model used.
It works best on longer texts where summarizing can reduce size significantly.
Always check the compressed output to ensure important details are kept.
Contextual compression shrinks text while keeping its main meaning.
It uses language models to summarize or compress text smartly.
Useful for saving space and speeding up text processing in language apps.
Practice
Contextual compression in langchain?Solution
Step 1: Understand the goal of contextual compression
Contextual compression aims to shrink text but keep its main meaning intact.Step 2: Compare options with this goal
Only To reduce text size while keeping its important meaning matches this goal; others describe different tasks.Final Answer:
To reduce text size while keeping its important meaning -> Option DQuick Check:
Contextual compression = reduce text size + keep meaning [OK]
- Confusing compression with translation
- Thinking it generates new text
- Assuming it checks grammar
ContextualCompressionRetriever in langchain?Solution
Step 1: Recall the constructor parameters order
The correct order isbase_retrieverfirst, thenllm.Step 2: Match options with correct order
Only ContextualCompressionRetriever(base_retriever, llm) matches this order; others have wrong order or missing arguments.Final Answer:
ContextualCompressionRetriever(base_retriever, llm) -> Option AQuick Check:
Constructor order = base_retriever, llm [OK]
- Swapping the order of parameters
- Omitting required arguments
- Using empty constructor
compressed_docs?
from langchain.retrievers import ContextualCompressionRetriever compressed_retriever = ContextualCompressionRetriever(base_retriever, llm) compressed_docs = compressed_retriever.get_relevant_documents(query)
Solution
Step 1: Understand what get_relevant_documents returns
It returns a list of Document objects relevant to the query.Step 2: Consider compression effect
ContextualCompressionRetriever compresses content inside Document objects but still returns a list of Documents.Final Answer:
A list of compressed Document objects -> Option AQuick Check:
get_relevant_documents returns list of Documents [OK]
- Expecting a single string instead of list
- Thinking it returns a dictionary
- Assuming method does not exist
TypeError: ContextualCompressionRetriever() missing 1 required positional argument. What is the likely cause?
compressed_retriever = ContextualCompressionRetriever(llm)
Solution
Step 1: Check constructor requirements
ContextualCompressionRetriever requires both base_retriever and llm arguments.Step 2: Analyze the error message and code
The code passes only llm, missing base_retriever, causing the error.Final Answer:
You forgot to pass the base retriever argument -> Option BQuick Check:
Missing base retriever causes TypeError [OK]
- Passing only one argument
- Swapping argument order
- Ignoring error message details
ContextualCompressionRetriever correctly in a langchain app?Solution
Step 1: Understand how ContextualCompressionRetriever works
It wraps an existing retriever and uses an LLM to compress retrieved documents on the fly.Step 2: Evaluate options for correct usage
Wrap your existing retriever with ContextualCompressionRetriever passing your LLM, then query it correctly wraps the retriever with compression; others either omit retriever or do manual steps outside the pattern.Final Answer:
Wrap your existing retriever with ContextualCompressionRetriever passing your LLM, then query it -> Option CQuick Check:
Wrap retriever + LLM = ContextualCompressionRetriever usage [OK]
- Skipping base retriever wrapping
- Trying to compress all docs at once without retriever
- Replacing retriever with only LLM
Ready to prove it?
Pass the test and this pattern moves unknown
