如何查看Langchain中RetrievalQA.from_chain_type运行后的完整Prompt
查看RetrievalQA完整Prompt的三种方法
1. 开启verbose模式直接打印
初始化RetrievalQA时添加verbose=True参数,运行后控制台会自动输出完整的prompt内容,其中包含检索到的上下文和输入的问题。
qa_chain = RetrievalQA.from_chain_type( llm, retriever=vectordb.as_retriever(), verbose=True # 开启 verbose 模式 ) result = qa_chain({"query": question})
运行后,控制台会打印出构建好的完整prompt,包括retrieved_relevant_context和question的具体内容。
2. 手动构建并输出Prompt
先手动检索上下文,再结合自定义或默认的prompt模板生成完整prompt并打印。这种方式适合需要保存或进一步处理prompt内容的场景。
from langchain.prompts import PromptTemplate # 复用RetrievalQA默认的prompt模板 template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. {context} Question: {question} Helpful Answer:""" prompt_template = PromptTemplate(template=template, input_variables=["context", "question"]) # 手动检索相关上下文 retrieved_docs = vectordb.as_retriever().get_relevant_documents(question) context_content = "\n\n".join([doc.page_content for doc in retrieved_docs]) # 生成并打印完整prompt full_prompt = prompt_template.format(context=context_content, question=question) print("完整Prompt:") print(full_prompt) # 正常初始化并运行问答链 qa_chain = RetrievalQA.from_chain_type( llm, retriever=vectordb.as_retriever(), chain_type_kwargs={"prompt": prompt_template} ) result = qa_chain({"query": question})
3. 自定义回调函数捕获Prompt
通过LangChain的回调机制,在prompt发送给大模型前捕获并输出内容,适合需要在链运行过程中监控prompt的场景。
from langchain.callbacks.base import BaseCallbackHandler class PromptCaptureCallback(BaseCallbackHandler): def on_chain_start(self, serialized, inputs, **kwargs): # 针对stuff类型的chain,拼接完整prompt if "context" in inputs and "question" in inputs: prompt_template = """Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. {context} Question: {question} Helpful Answer:""" full_prompt = prompt_template.format( context=inputs["context"], question=inputs["question"] ) print("捕获到的完整Prompt:") print(full_prompt) # 初始化问答链时添加回调 qa_chain = RetrievalQA.from_chain_type( llm, retriever=vectordb.as_retriever(), callbacks=[PromptCaptureCallback()] ) result = qa_chain({"query": question})
内容的提问来源于stack exchange,提问作者Elyor
相关产品推荐
相关产品推荐

