ConversationalRetrievalChain与LLMChain选型及相似性搜索等问题求助
问题解决方案
一、相似性搜索InvalidRequestError: '$.input' is invalid的原因及修复
- 报错根源是Streamlit环境下,向量数据库搜索请求的输入格式不合法:
- 要么是传给
similarity_search的查询参数不是纯字符串(比如误传了Streamlit组件对象、未处理的状态变量) - 要么是向量数据库客户端在Streamlit会话中重复初始化,导致配置参数(如API密钥)丢失,请求体格式被破坏
- 要么是传给
- 修复操作:
- 强制转换查询参数为字符串:
docs = vector_store.similarity_search(str(user_query)),确保输入符合向量数据库要求 - 用
st.cache_resource缓存向量数据库客户端实例,或者把初始化代码放在if __name__ == "__main__":块内,避免重复初始化导致的配置混乱
- 强制转换查询参数为字符串:
二、ConversationalRetrievalChain自定义Prompt的ValidationError修复
- 报错提示
context未在输入变量中,是因为你自定义的Prompt没声明context变量,或者输入变量列表遗漏了它——ConversationalRetrievalChain的默认逻辑会自动传入context(检索到的文档内容),必须在Prompt中对应接收 - 正确配置自定义模板:
- 自定义Prompt必须包含
context、question,如果需要对话历史还要加chat_history,示例:from langchain.prompts import PromptTemplate custom_prompt = PromptTemplate( input_variables=["context", "question", "chat_history"], template="""基于以下上下文回答问题,若无法从上下文找到确定答案,直接回复"我无法回答这个问题"。 对话历史:{chat_history} 上下文:{context} 问题:{question} 回答:""" ) - 初始化Chain时,把自定义Prompt传入
load_qa_chain的prompt参数,再将这个qa链传给ConversationalRetrievalChain:from langchain.chains import ConversationalRetrievalChain from langchain.chains.question_answering import load_qa_chain qa_chain = load_qa_chain(llm, chain_type="stuff", prompt=custom_prompt) conversational_chain = ConversationalRetrievalChain( retriever=vector_store.as_retriever(), combine_docs_chain=qa_chain, return_source_documents=True )
- 自定义Prompt必须包含
三、实现“LLM不确定时不回答”的Chain选择
- 优先用ConversationalRetrievalChain,它原生支持对话历史管理和上下文检索,适配知识库问答场景,且容易通过Prompt和前置逻辑控制回答边界
- 实现方式:
- 在自定义Prompt中明确指令:如果上下文无匹配信息或无法确定答案,直接返回预设的拒绝语
- 增加检索结果过滤:用
similarity_search_with_score获取带相似度得分的文档,过滤掉得分低于阈值(如0.7)的内容,若剩余为空则直接返回拒绝语,无需调用LLM:docs_with_scores = vector_store.similarity_search_with_score(user_query, k=3) relevant_docs = [doc for doc, score in docs_with_scores if score > 0.7] if not relevant_docs: st.write("我无法回答这个问题") else: result = conversational_chain({"question": user_query, "chat_history": chat_history}) st.write(result["answer"])
内容的提问来源于stack exchange,提问作者Al Mahdi Bakkali
相关产品推荐
相关产品推荐

