在 LlamaIndex 中,get_response_synthesizer 允许你自定义生成回答的方式,包括传入自定义提示词(prompt)。可以通过 response_mode 和 text_qa_template 等参数来控制回答的生逻辑。在 LlamaIndex 中优化提示词(Prompt Template)可以显著提升回答质量。
一、使用自定义提示词
1. 使用 text_qa_template 自定义提示词
text_qa_template 用于控制生成回答时的提示模板。你可以直接传入一个自定义的 PromptTemplate。
示例代码
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.core.prompts import PromptTemplate from llama_index.core.response_synthesizers import get_response_synthesizer # 加载数据 documents = SimpleDirectoryReader("your_data_dir").load_data() index = VectorStoreIndex.from_documents(documents) # 自定义提示词模板 custom_qa_prompt = PromptTemplate( """\ 请根据以下上下文信息回答问题。如果无法从上下文中得到答案,请回答“我不知道”。 上下文: {context_str} 问题: {query_str} 答案: """ ) # 获取 ResponseSynthesizer 并传入自定义提示词 response_synthesizer = get_response_synthesizer( response_mode="compact", # 或其他模式,如 "refine", "tree_summarize" text_qa_template=custom_qa_prompt, ) # 使用 query_engine 查询 query_engine = index.as_query_engine(response_synthesizer=response_synthesizer) response = query_engine.query("你的问题是什么?") print(response)
2. 修改 response_mode 并传入不同的提示模板
response_mode 控制回答的生成方式,常见选项:
"compact"(默认):合并多个片段后生成回答。
"refine":逐步优化回答。
"tree_summarize":树状结构总结信息。
"no_text":不返回文本,只返回节点信息。
示例:使用 refine 模式并自定义提示
from llama_index.core.prompts import Promp