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 模型
相关推荐
LEE12 小时前
前端转型全栈 03:接口失败也返回 200,OpenAPI 契约与错误码怎么定
前端·后端·全栈
SL_staff18 小时前
MQTT Topic权限越界:JVS-IOT中系统Topic与自定义Topic的权责边界与验证实践
java·物联网·全栈
SL_staff1 天前
财务系统慎用低代码?从数据模型闭环看合规落地的技术实践
java·低代码·全栈
老王以为2 天前
走进 AI Agent 第四篇(上):知识获取管道——RAG 基础
前端·人工智能·全栈
小星星_20265 天前
16 万行代码是怎么“跑”出来的?
人工智能·全栈
SL_staff5 天前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈
万敏5 天前
Vue3 全栈实战第九周:Node.js + Express 后端从零搭建实战记录
vue.js·node.js·全栈
MingQi396 天前
DevFlow Harness 全栈实践 · M1.5:用户体系、多对话与聊天分享
全栈
SL_staff6 天前
战略落地的最后一公里:从目标到个人日历的自动化链路实现
java·github·全栈
Ticnix7 天前
RAG 的坑不在检索,在"对齐":pgvector 实战手记
python·agent·全栈