You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为RetrievalQA.from_chain_type添加记忆,为ConversationalRetrievalChain添加自定义提示词?

解决方案

方法一:给ConversationalRetrievalChain配置自定义提示词

ConversationalRetrievalChain本身支持自定义prompt,你可以通过构造CombineDocumentsChain时传入自定义模板,再将这个链整合进ConversationalRetrievalChain。示例代码如下:

from langchain.chains import ConversationalRetrievalChain
from langchain.chains.question_answering import load_qa_chain
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory

# 自定义提示词模板
custom_prompt = PromptTemplate(
    template="""结合以下对话历史和文档片段,回答用户问题:
对话历史:{chat_history}
文档片段:{context}
用户问题:{question}
请严格基于给定内容回答,不要编造信息。""",
    input_variables=["chat_history", "context", "question"]
)

# 加载QA链并传入自定义prompt
qa_chain = load_qa_chain(llm, chain_type="stuff", prompt=custom_prompt)

# 初始化记忆组件
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

# 创建带自定义prompt和记忆的对话链
chain = ConversationalRetrievalChain(
    retriever=your_vectorstore_retriever,
    combine_docs_chain=qa_chain,
    memory=memory
)

# 使用示例
response = chain({"question": "文档中关于XX的具体规则是什么?"})
print(response["answer"])

方法二:给RetrievalQA添加记忆组件

RetrievalQA没有内置记忆,但可以通过手动整合记忆组件实现需求。示例代码如下:

from langchain.chains import RetrievalQA
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate

# 自定义检索问答提示词
qa_prompt = PromptTemplate(
    template="""根据以下文档内容回答问题:{context}
问题:{question}
回答:""",
    input_variables=["context", "question"]
)

# 初始化RetrievalQA
retrieval_qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=your_vectorstore_retriever,
    chain_type_kwargs={"prompt": qa_prompt}
)

# 初始化记忆组件
memory = ConversationBufferMemory()

# 自定义带记忆的问答逻辑
def chat_with_memory(question):
    # 读取对话历史
    chat_history = memory.load_memory_variables({})["history"]
    # 调用检索问答链
    qa_result = retrieval_qa({"query": f"对话历史:{chat_history}\n用户问题:{question}"})
    # 更新记忆
    memory.save_context({"input": question}, {"output": qa_result["result"]})
    return qa_result["result"]

# 使用示例
print(chat_with_memory("文档的核心结论是什么?"))
print(chat_with_memory("刚才提到的结论有哪些数据支撑?"))

这两种方案都能同时满足基于文档对话、记忆功能和自定义提示词的需求,可根据实际场景选择适配的实现方式。

内容的提问来源于stack exchange,提问作者Hudson Etkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:52:17