这里写目录标题
- 利用元数据与自我查询检索器
- 元数据作为上下文信息
- 初始化环境并定义元数据
- 导入必要的模块
- 定义元数据属性
- 配置自我查询检索器
- 执行带有自动元数据推断的查询
- 实现上下文压缩
- 设置环境
- 导入必要的类
- 初始化压缩工具
- 创建上下文压缩检索器
- 检索压缩文档
利用元数据与自我查询检索器
元数据作为上下文信息
元数据作为上下文信息,可以显著地细化搜索结果。当与自我查询检索器的能力相结合时,可以从单一输入查询自动提取查询字符串和相关的元数据过滤器。这种方法消除了手动指定元数据的需求,使搜索过程既高效又直观。
初始化环境并定义元数据
在我们可以执行基于元数据的搜索之前,我们需要设置环境并定义我们打算使用的元数据属性。
导入必要的模块
# 导入 langchain 库中的必要模块
from langchain.llms import OpenAI
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain.chains.query_constructor.base import AttributeInfo
定义元数据属性
# 定义元数据属性及其详细描述
metadata_attributes = [
AttributeInfo(
name="source",
description="指定讲座文档,限于 `docs/cs229_lectures` 目录中的特定文件。",
type="string",
),
AttributeInfo(
name="page",
description="讲座文档中的页码。",
type="integer",
),
]
# 注意:由于先前默认模型的废弃,现在转向使用 OpenAI 的 gpt-3.5-turbo-instruct 模型。
document_content_description = "详细的讲座笔记"
language_model = OpenAI(model='gpt-3.5-turbo-instruct', temperature=0)
配置自我查询检索器
下一步涉及使用语言模型、向量数据库和定义的元数据属性来配置自我查询检索器。
# 初始化自我查询检索器,使用语言模型、向量数据库和元数据属性
self_query_retriever = SelfQueryRetriever.from_llm(
language_model,
vector_database,
document_content_description,
metadata_attributes,
verbose=True
)
执行带有自动元数据推断的查询
现在,让我们执行一个搜索,该搜索能从查询本身自动推断出相关的元数据。
# 定义一个指定查询上下文的查询
specific_query = "第三讲中提供了哪些关于回归分析的见解?"
# 注意:首次执行可能会触发 `predict_and_parse` 的废弃警告,可以忽略。
# 根据特定查询检索相关文档,利用推断的元数据提高精确度
relevant_documents = self_query_retriever.get_relevant_documents(specific_query)
# 显示检索到的文档的元数据,以证明搜索的特定性
for document in relevant_documents:
print(document.metadata)
实现上下文压缩
上下文压缩通过提取文档中最相关的段落来工作。这种方法不仅减少了对语言模型的计算负担,而且还通过专注于最相关的信息提高了响应的质量。
设置环境
在深入上下文压缩的具体细节之前,请确保您的环境已经使用了必要的库进行了适当的配置。
导入必要的类
# 导入用于上下文压缩和文档检索的必要类
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain.llms import OpenAI
初始化压缩工具
下一步涉及使用预训练的语言模型初始化压缩机制,该模型将用于识别和提取文档的相关部分。
# 使用特定配置初始化语言模型以确保确定性行为
language_model = OpenAI(temperature=0, model="gpt-3.5-turbo-instruct")
# 使用语言模型创建一个压缩器来提取相关文本段落
document_compressor = LLMChainExtractor.from_llm(language_model)
创建上下文压缩检索器
有了压缩器之后,我们现在可以设置一个集成上下文压缩的检索器。
# 结合文档压缩器与现有的向量数据库检索器
compression_retriever = ContextualCompressionRetriever(
base_compressor=document_compressor,
base_retriever=vector_database.as_retriever()
)
检索压缩文档
让我们执行一个查询并观察上下文压缩检索器如何返回一个更集中的文档集。
# 定义一个查询,寻找相关文档段落
query_text = "有关数据分析工具的见解有哪些?"
# 根据查询检索相关文档,自动压缩以提高相关性
compressed_documents = compression_retriever.get_relevant_documents(query_text)
# 函数用于以美观的方式格式化并打印压缩文档的内容
def pretty_print_documents(documents):
print(f"\n{'-' * 100}\n".join([f"文档 {index + 1}:\n\n" + doc.page_content for index, doc in enumerate(documents)]))
# 显示压缩后的文档
pretty_print_documents(compressed_documents)