LangChain调用run方法报错:不支持多输入键问题求助
解决LangChain LLMChain.run()多输入键的ValueError问题
当你的LLMChain绑定了包含多个输入变量的PromptTemplate时,直接调用run()方法会触发ValueError: run() supports only one input key, got ['question', 'documents'],这是因为run()方法设计为仅支持单输入变量的场景。
解决方案
你可以通过以下两种方式替代run()方法来处理多输入变量的情况:
1. 使用call()方法传入字典参数
call()方法接受包含所有输入键值对的字典作为参数,返回包含输出结果的字典:
# 示例调用 result = chain.call({ "question": "你的问题内容", "documents": "你的文档内容" }) # 提取输出文本 print(result["text"])
2. 使用predict()方法直接传入命名参数
predict()方法支持直接传入与Prompt变量名对应的命名参数,返回纯输出文本:
# 示例调用 result = chain.predict( question="你的问题内容", documents="你的文档内容" ) print(result)
完整示例代码
下面是修正前后的代码对比:
错误代码(触发报错)
from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.chains import LLMChain prompt = PromptTemplate( input_variables=["question", "documents"], template="根据以下文档回答问题:\n{documents}\n问题:{question}\n答案:" ) llm = OpenAI(temperature=0) chain = LLMChain(llm=llm, prompt=prompt) # 错误调用:run()不支持多输入键 chain.run("如何优化LLM应用?", "LLM应用优化可从提示工程、模型选择等方面入手...")
修正后的代码(使用call方法)
from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.chains import LLMChain prompt = PromptTemplate( input_variables=["question", "documents"], template="根据以下文档回答问题:\n{documents}\n问题:{question}\n答案:" ) llm = OpenAI(temperature=0) chain = LLMChain(llm=llm, prompt=prompt) # 正确调用 result = chain.call({ "question": "如何优化LLM应用?", "documents": "LLM应用优化可从提示工程、模型选择等方面入手..." }) print(result["text"])
补充说明
run()方法是predict()的简化封装,仅适用于PromptTemplate只有单个输入变量的场景。当存在多个输入变量时,必须使用call()或predict()方法来传递参数。
内容的提问来源于stack exchange,提问作者Daremitsu
相关产品推荐
相关产品推荐

