如何在LlamaIndex中为文档的每个Chunk添加源文档标题
给LlamaIndex的每个Chunk添加电影标题的实现方法
你可以通过以下几种方式实现给每个Chunk添加电影标题,让上下文呈现为{title}\n{relevant plot chunk}的格式:
方法1:自定义分割逻辑(推荐)
在文档分割阶段直接给每个Chunk前缀加上电影标题,确保后续检索时上下文自带标题信息:
from llama_index.core.node_parser import SimpleNodeParser from llama_index.core.schema import TextNode # 替换为你的电影标题和剧情文本 movie_title = "星际穿越" plot_text = "维基百科上的电影剧情全文..." def generate_nodes_with_title(text, title, chunk_size=1024): # 使用默认分割器拆分文本 parser = SimpleNodeParser.from_defaults(chunk_size=chunk_size) base_nodes = parser.get_nodes_from_text(text) # 为每个节点添加标题前缀 nodes_with_title = [] for node in base_nodes: formatted_text = f"{title}\n{node.text}" new_node = TextNode(text=formatted_text, metadata=node.metadata) nodes_with_title.append(new_node) return nodes_with_title # 生成带标题的Chunk节点 title_nodes = generate_nodes_with_title(plot_text, movie_title)
方法2:批量修改已分割的节点
如果已经完成了文档分割,可直接遍历节点列表,修改文本内容添加标题:
# 假设nodes是已分割好的原始节点列表 for node in nodes: # 从元数据或外部变量获取电影标题 movie_title = node.metadata.get("movie_title", "未知电影") node.text = f"{movie_title}\n{node.text}"
方法3:通过提示模板组合标题与上下文
若不想修改Chunk本身,可在查询阶段通过自定义提示模板,将元数据中的标题与Chunk文本合并:
from llama_index.core import PromptTemplate # 自定义提示模板,整合标题和上下文内容 qa_template = PromptTemplate( "参考以下电影内容回答问题:\n{title}\n{context_str}\n\n用户问题:{query_str}\n回答:" ) # 将模板传入查询引擎(需结合你的聊天机器人构建逻辑调整) query_engine = index.as_query_engine(text_qa_template=qa_template)
内容的提问来源于stack exchange,提问作者Nick Zorander
相关产品推荐
相关产品推荐

