如何为Langchain的ConversationalRetrievalChain添加提示词(带对话历史)
如何在ConversationalRetrievalChain中传入自定义提示词?
要给ConversationalRetrievalChain传入自定义指令提示词,你可以通过以下两种方式修改代码:
方法一:通过chain_type_kwargs直接传递提示模板
这是最简洁的方式,适用于使用默认文档合并类型(如stuff)的场景:
- 先定义自定义提示模板,需包含
chat_history、question、context三个必要输入变量:
from langchain.prompts import PromptTemplate custom_prompt = PromptTemplate( input_variables=["chat_history", "question", "context"], template="""参考以下对话历史和文档内容,回答用户的问题: 对话历史:{chat_history} 文档信息:{context} 用户问题:{question} 请给出准确、简洁的回答:""" )
- 创建
ConversationalRetrievalChain时,通过chain_type_kwargs参数传入提示模板:
qa = ConversationalRetrievalChain.from_llm( OpenAI(temperature=0), vectorstore.as_retriever(), memory=memory, chain_type="stuff", # 可选stuff/map_reduce等文档合并方式 chain_type_kwargs={"prompt": custom_prompt} )
方法二:自定义CombineDocumentsChain
如果需要更灵活地控制文档合并逻辑,可以手动构建CombineDocumentsChain并传入:
- 导入所需模块并定义提示模板:
from langchain.chains import ConversationalRetrievalChain, StuffDocumentsChain from langchain.chains.llm import LLMChain from langchain.prompts import PromptTemplate from langchain.llms import OpenAI custom_prompt = PromptTemplate( input_variables=["chat_history", "question", "context"], template="""基于对话历史和文档内容回答问题: 对话历史:{chat_history} 文档内容:{context} 问题:{question} 回答:""" )
- 构建LLMChain和CombineDocumentsChain:
llm_chain = LLMChain(llm=OpenAI(temperature=0), prompt=custom_prompt) combine_docs_chain = StuffDocumentsChain(llm_chain=llm_chain, document_variable_name="context")
- 将自定义的
combine_docs_chain传入ConversationalRetrievalChain:
qa = ConversationalRetrievalChain.from_llm( OpenAI(temperature=0), vectorstore.as_retriever(), memory=memory, combine_docs_chain=combine_docs_chain )
注意:提示模板必须包含chat_history(对话历史)、question(当前问题)、context(检索到的文档内容)三个变量,否则链条无法正常获取对应数据。
内容的提问来源于stack exchange,提问作者Masked Attention
相关产品推荐
相关产品推荐

