Runnable组件 bind 函数
是什么
bind() 是 LangChain 中 Runnable 组件的方法,用于动态添加默认调用参数,在创建 Runnable 实例时预设部分参数值。
有什么用
- 简化调用:提前绑定固定参数,调用时只需传入变化参数
- 参数复用:避免每次 invoke 都重复传相同参数
- 多参场景:解决 RunnableLambda 只能接收单参的问题,通过 bind 预设部分参数
- 动态覆盖:在链式调用中动态修改 LLM 参数(如 model、temperature 等)
代码示例
示例1:RunnableLambda 预设默认参数
python
from langchain_core.runnables import RunnableLambda
def get_weather(location: str, unit: str, name: str) -> str:
return f"{name}你好,查询到{location}的天气是25度{unit}"
# 绑定 unit 和 name,调用时只需传 location
get_weather_runnable = RunnableLambda(get_weather).bind(unit="摄氏度", name="muxiaoke")
res = get_weather_runnable.invoke("广州")
# 输出: muxiaoke你好,查询到广州的天气是25度摄氏度
示例2:LLM 链式调用中动态覆盖模型参数
python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_messages([("human", "{query}")])
llm = ChatOpenAI(model="moonshot-v1-8k")
# 使用 bind 动态覆盖 model 参数,从 8k 切换到 32k
chain = prompt | llm.bind(model="moonshot-v1-32k") | StrOutputParser()
content = chain.invoke({"query": "你好,你是什么模型,版本号是多少"})
# 实际使用的是 moonshot-v1-32k 模型