如何在LangChain链中为LLM与模板分配对应输入参数?
问题分析
你遇到的核心问题是:链不会自动将传入的变量池参数覆盖LLM组件的初始化配置。你初始化ChatOpenAI时硬编码了max_tokens=1,后续invoke传入的max_tokens=100只会被PromptTemplate读取(但模板里未用到该变量),并不会传递给LLM的配置项。
简便解决方案
直接使用bind方法结合lambda表达式,将输入中的max_tokens动态绑定到LLM的参数上,代码如下:
from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI # 定义Prompt模板 prompt = PromptTemplate.from_template("write a joke about: {input_text}") # 动态绑定max_tokens为输入中的对应值 llm = ChatOpenAI(model_name="gpt-4o").bind(max_tokens=lambda x: x["max_tokens"]) # 构建链 chain = prompt | llm # 调用链,传入两个参数 result = chain.invoke({"max_tokens": 100, "input_text": "programming!"}) print(result.content)
原理说明
bind方法允许为LLM动态绑定参数,这里用lambda表达式从输入字典中提取max_tokens值,替代初始化时的固定配置。- 链执行时,
prompt会先消费input_text生成完整提示词,随后LLM会读取输入中的max_tokens参数应用到生成配置中。
内容的提问来源于stack exchange,提问作者Michael T
相关产品推荐
相关产品推荐

