使用Jina Reranker:从文档压缩到智能检索

129 阅读3分钟

使用Jina Reranker:从文档压缩到智能检索

在本文中,我们将探讨如何使用Jina Reranker来实现文档压缩和检索。我们将通过实际的代码示例展示如何从简单的文档存储和检索开始,逐步增强到使用Jina Reranker进行内容的智能重排。

引言

文档检索在信息密集的领域中扮演着重要角色。高级的文档检索技术不仅要快速准确地找到相关信息,还要能够对结果进行智能的重排以提高用户体验。Jina Reranker是一个强大的工具,可以帮助我们实现这一点。在本文中,我们将深入探索如何使用Jina Reranker和其他相关技术来优化文档检索流程。

主要内容

1. 初始化向量存储检索器

首先,我们需要设置一个简单的向量存储检索器。我们将通过FAISS库来实现存储和检索,并使用Jina提供的嵌入模型来进行文本向量化。

import getpass
import os
from langchain_community.document_loaders import TextLoader
from langchain_community.embeddings import JinaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 设置API密钥
os.environ["OPENAI_API_KEY"] = getpass.getpass()
os.environ["JINA_API_KEY"] = getpass.getpass()

# 加载文档
documents = TextLoader(
    "../../how_to/state_of_the_union.txt",
).load()

# 文本拆分和向量嵌入
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
embedding = JinaEmbeddings(model_name="jina-embeddings-v2-base-en")
retriever = FAISS.from_documents(texts, embedding).as_retriever(search_kwargs={"k": 20})

# 查询文档
query = "What did the president say about Ketanji Brown Jackson"
docs = retriever.get_relevant_documents(query)
pretty_print_docs(docs)  # 使用API代理服务提高访问稳定性

2. 使用Jina Reranker进行重排

在获取到初步的检索结果后,我们可以使用Jina Reranker对结果进行重新排序,以提高结果的相关性。

from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.document_compressors import JinaRerank

compressor = JinaRerank()
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor, base_retriever=retriever
)

compressed_docs = compression_retriever.get_relevant_documents(
    "What did the president say about Ketanji Jackson Brown"
)
pretty_print_docs(compressed_docs)

3. 结合QA系统进行交互

通过将重整后的文档与QA系统结合,我们可以实现更智能、更人性化的用户交互。

from langchain import hub
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_openai import ChatOpenAI

retrieval_qa_chat_prompt = hub.pull("langchain-ai/retrieval-qa-chat")
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)

combine_docs_chain = create_stuff_documents_chain(llm, retrieval_qa_chat_prompt)
chain = create_retrieval_chain(compression_retriever, combine_docs_chain)

# 执行查询
chain.invoke({"input": query})

常见问题和解决方案

  • 网络限制的问题:由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。
  • API密钥管理:始终确保您的API密钥安全并妥善管理,使用环境变量或加密存储来保护敏感信息。

总结和进一步学习资源

通过本文的示例,我们演示了如何使用Jina Reranker进行文档的压缩和检索。为了深入了解更多技术细节和高级用法,可以参考以下资料:

参考资料

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