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

LangChain对话检索链中language变量报KeyError问题求助

解决LangChain对话检索链中language变量的KeyError问题

核心原因

KeyError: 'language'意味着链在执行过程中无法找到名为language的输入变量,通常是变量未正确传递到链的某个环节导致。以下是针对性修复方案:

1. 调用链时必须显式传入language

确保调用invoke()/run()方法时,参数字典包含language键:

# 错误示例:缺少language参数
chain.invoke({"question": "如何安装Python?", "chat_history": []})

# 正确示例:传入language变量
chain.invoke({"question": "如何安装Python?", "chat_history": [], "language": "zh-CN"})

2. 确保Prompt模板正确声明language变量

定义Prompt时必须将language加入input_variables列表,模板中使用{language}占位符:

from langchain.prompts import PromptTemplate

prompt = PromptTemplate(
    input_variables=["question", "context", "language"],
    template="请用{language}回答问题:{question}\n参考上下文:{context}"
)

3. 对话检索链需显式传递额外变量到子链

使用ConversationalRetrievalChain时,默认仅传递question和chat_history到子链,需通过chain_type_kwargs指定额外变量:

from langchain.chains import ConversationalRetrievalChain
from langchain.chains.question_answering import load_qa_chain

# 构建QA子链并关联自定义prompt
qa_chain = load_qa_chain(llm, chain_type="stuff", prompt=prompt)

# 构建对话检索链时,确保变量传递到子链
retrieval_chain = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=vectorstore.as_retriever(),
    combine_docs_chain=qa_chain,
    # 显式声明子链需要的所有输入变量
    chain_type_kwargs={"input_variables": ["question", "context", "language"]}
)

4. 避免记忆组件过滤language变量

如果使用记忆组件,不要将language存入记忆(除非需要),调用时作为独立参数传入即可:

# 从记忆中获取对话历史
chat_history = memory.load_memory_variables({})["chat_history"]

# 调用链时传入language变量
response = retrieval_chain.invoke({
    "question": "你的问题",
    "chat_history": chat_history,
    "language": "en-US"
})

快速排查方法

开启LangChain的调试模式,查看变量在链各环节的传递情况:

retrieval_chain = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=vectorstore.as_retriever(),
    combine_docs_chain=qa_chain,
    debug=True  # 开启调试,输出变量流动详情
)

内容的提问来源于stack exchange,提问作者Faiq Aslam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:12:32