LlamaIndex中应用自定义提示词提升回答质量
在 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