LlamaIndex中的元数据替换与节点句子窗口
检索用原来的句子,检索的节点再拓展到句子窗口
在本文中,我们将介绍如何使用SentenceWindowNodeParser将文档解
析为每个节点包含单个句子的结构,并且每个节点还包含节点句子两侧的“窗口”句子。然后,在检索之后,在将检索到的句子传递给LLM之前,使用MetadataReplacementNodePostProcessor将单个句子替换为包含周围句子的窗口。
设置环境
首先,确保你已经安装了必要的库并设置了OpenAI API密钥:
import os
import openai
os.environ["OPENAI_API_KEY"] = "sk-..."
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core.node_parser import SentenceWindowNodeParser
from llama_index.core.node_parser import SentenceSplitter
# 创建句子窗口节点解析器
node_parser = SentenceWindowNodeParser.from_defaults(
window_size=3,
window_metadata_key="window",
original_text_metadata_key="original_text",
)
# 基础节点解析器是一个句子分割器
text_splitter = SentenceSplitter()
llm = OpenAI(model="gpt-3.5-turbo", temperature=0.1)
embed_model = HuggingFaceEmbedding(
model_name="sentence-transformers/all-mpnet-base-v2", max_length=512
)
加载数据并构建索引
加载数据
我们使用IPCC气候报告的第三章作为示例数据:
from llama_index.core import SimpleDirectoryReader
documents = SimpleDirectoryReader(
input_files=["./IPCC_AR6_WGII_Chapter03.pdf"]
).load_data(