如何向含时间戳元数据的Llama Index插入新文档(带Time-Weighted Postprocessor)
带时间权重重排的Llama Index新文档插入方案
1. 文档预处理:提取文本+设置时间戳元数据
先处理PDF、DOCX等格式的新文档,提取文本并为每个文档块添加符合要求的时间戳元数据(这是Time-Weighted Rerank生效的核心):
- 用Llama Index自带的
SimpleDirectoryReader加载文档,原生支持PDF、DOCX等常见格式:from llama_index import SimpleDirectoryReader # 加载单个或多个目标文档 documents = SimpleDirectoryReader(input_files=["new_manual.pdf", "Q2_report.docx"]).load_data() - 为文档添加时间戳元数据:可从文件系统获取修改/创建时间,或手动指定统一格式的时间(推荐ISO 8601):
import os from datetime import datetime for doc in documents: # 从文件路径获取修改时间作为时间戳 file_path = doc.metadata.get("file_path") if file_path: mod_timestamp = os.path.getmtime(file_path) doc.metadata["timestamp"] = datetime.fromtimestamp(mod_timestamp).isoformat() # 若需手动指定时间,替换为以下行 # doc.metadata["timestamp"] = "2024-05-20T16:45:00"
2. 连接现有索引并插入文档
加载已配置好Time-Weighted Rerank的现有索引,将预处理后的文档插入并持久化更新:
- 加载现有索引的存储上下文:
from llama_index import load_index_from_storage, StorageContext # 替换为你实际的索引存储目录 storage_context = StorageContext.from_defaults(persist_dir="./existing_index_storage") index = load_index_from_storage(storage_context) - 插入新文档并持久化:
# 将预处理后的文档插入索引 index.insert_nodes(documents) # 保存更新后的索引,确保下次加载时生效 index.storage_context.persist(persist_dir="./existing_index_storage")
3. 验证时间权重重排效果
插入完成后,通过查询引擎验证结果是否按时间权重排序(现有索引的Time-Weighted Rerank配置会自动应用到新文档):
query_engine = index.as_query_engine() # 替换为你的测试查询 response = query_engine.query("Q2季度的核心业务数据有哪些?") print(response)
关键注意事项
- 时间戳格式必须统一:建议使用ISO 8601格式(如
2024-05-20T16:45:00),确保排序逻辑准确。 - 分块继承元数据:Llama Index拆分文档为块时,每个块会自动继承原文档的
timestamp元数据,无需单独设置。 - 保持分块策略一致:若现有索引使用了自定义节点构造器,插入新文档时建议沿用相同的分块参数(如块大小、重叠率),避免影响重排效果。
内容的提问来源于stack exchange,提问作者Strike
相关产品推荐
相关产品推荐

