langchain学习总结-Runnable组件 bind 函数

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 模型
相关推荐
程序员黑豆4 小时前
深入解析Java数据类型:基本类型与引用类型的本质区别与实战选择
前端·ai编程·全栈
前端双越老师9 小时前
前端学习 Java 其实很容易:TS 和 Java 语法的 N 个相同点
java·全栈
烬羽1 天前
navigator.gpu 存在就够了?WebGPU 检测的两层陷阱
typescript·浏览器·全栈
Hamm2 天前
前端转Java+AI全栈?那我推荐几个实战开源项目给你
前端·后端·全栈
三雒2 天前
拆解 Codex:一个桌面 Agent 到底由哪些核心部分组成?
agent·全栈
烬羽3 天前
《memo 明明加了,为什么子组件还是渲染了?》
react.js·性能优化·全栈
人间凡尔赛3 天前
2026 前端全栈新范式:Server Actions + Edge Runtime,告别传统 API 路由
前端·全栈·next.js
GitLqr3 天前
Flutter 居然能直接跑在 Apple Watch 上了?玩转 flutter-watchos
flutter·全栈·apple watch
GitLqr4 天前
玩转 Flutter 项目依赖:从 pubspec.yaml 到实战包管理
flutter·面试·全栈
烬羽4 天前
useContext 用是用了,但你真的用对了吗?——把 Context 封装进自定义 Hook
前端·react.js·全栈