如何为ConversationalRetrievalChain添加自定义提示模板以限定文档内回复?
实现基于文档内容的聊天机器人回复限制
要让你的ConversationalRetrievalChain仅从文档内容回复、不得编造答案,核心是通过自定义提示模板明确约束LLM的行为,具体实现如下:
导入必要模块
确保你已经导入PromptTemplate用于创建自定义提示:from langchain.prompts import PromptTemplate定义严格约束的提示模板
创建一个明确告知LLM只能使用检索到的文档内容回复的模板,同时指定无相关信息时的统一回复:# 自定义提示模板,核心是明确约束回复范围 custom_prompt = PromptTemplate( input_variables=["chat_history", "context", "question"], template="""你是一个严格基于文档内容回答的助手,只能使用以下提供的文档片段中的信息来回答用户的问题。如果文档中没有相关内容,请直接回复“我无法从提供的文档中找到相关答案”,绝对不能编造任何不在文档里的信息。 历史对话记录: {chat_history} 文档内容: {context} 用户当前问题:{question} 请给出你的回答:""" )将模板传入ConversationalRetrievalChain
在初始化ConversationalRetrievalChain时,通过chain_type_kwargs参数传入自定义模板:qa = ConversationalRetrievalChain.from_llm( OpenAI(temperature=0.8, model_name='gpt-3.5-turbo-16k'), db.as_retriever(), memory=memory, chain_type_kwargs={"prompt": custom_prompt} )额外优化建议
- 适当调低
temperature参数(比如设为0.1),减少LLM的随机性输出,进一步降低编造概率; - 结合文档检索阈值设置(如
db.as_retriever(search_kwargs={"k": 3, "score_threshold": 0.7})),过滤相关性低的文档片段,避免LLM基于无关内容生成回复。
- 适当调低
内容的提问来源于stack exchange,提问作者Abhiram T Babu
相关产品推荐
相关产品推荐

