Langchain中PromptTemplate字典类型输入的问题及报错解决咨询
解决Langchain中字典类型输入的处理问题
错误原因:Langchain的PromptTemplate默认会将单大括号{}包裹的内容识别为独立输入变量,而非从字典中取值的表达式。你写的{data['Gender']}会被系统当成一个名为data['Gender']的独立输入变量,因此提示缺少这些不存在的键。
以下是两种可行的解决方法:
方法一:使用Jinja2模板语法(推荐)
Langchain的PromptTemplate支持Jinja2语法,用双大括号{{ }}包裹字典取值表达式,系统会正确解析并从传入的data字典中提取对应键的值。
修改后的代码示例:
from langchain.prompts.prompt import PromptTemplate from langchain.llms import GooglePalm from langchain.chains import LLMChain prompt_template_advice = PromptTemplate( input_types={"data": dict}, input_variables=["data"], # 用双大括号包裹字典取值逻辑 template="...{{ data['Gender'] }}...{{ data['Age'] }}...{{ data['output'] }} (etc)" ) advisor = GooglePalm(temperature=0.9) advice_chain = LLMChain(verbose=True, llm=advisor, prompt=prompt_template_advice, output_key="main_advice") advice_chain.run(data)
方法二:将字典键作为独立输入变量
如果不想使用Jinja2语法,可以把字典的所有键都加入input_variables列表,调用run方法时用解包运算符**传入字典内容:
from langchain.prompts.prompt import PromptTemplate from langchain.llms import GooglePalm from langchain.chains import LLMChain # 提取目标字典的所有键作为输入变量 input_keys = list(data.keys()) prompt_template_advice = PromptTemplate( input_variables=input_keys, # 直接使用字典键名作为模板变量 template="...{Gender}...{Age}...{output} (etc)" ) advisor = GooglePalm(temperature=0.9) advice_chain = LLMChain(verbose=True, llm=advisor, prompt=prompt_template_advice, output_key="main_advice") advice_chain.run(**data) # 用**解包字典传入
内容的提问来源于stack exchange,提问作者aymen mehrez
相关产品推荐
相关产品推荐

