configurable_fields

LangChain configurable_fields() 用法详解

configurable_fields()LCEL 中实现「运行时动态配置」 的核心方法,和 bind() 是互补关系:

  • bind():写死固定参数(编译时确定)
  • configurable_fields():定义可动态修改的参数(调用时通过 config 传入)

它的核心作用:让 Runnable 组件的参数支持运行时动态切换,比如同一个链,调用时临时改 temperature、模型名、stop 词、工具等,不用重新定义链。


一、核心语法

# 1. 为组件声明可配置字段
runnable.with_configurable_fields(
    字段名1=默认值,
    字段名2=默认值,
    # 可选:配置字段说明
    config_fields={
        "字段名1": ConfigurableField(name="显示名", description="描述")
    }
)

# 2. 调用时传入配置
runnable.invoke(
    input,
    config={"configurable": {"字段名1": 新值}}
)

二、最常用场景:大模型动态配置

1. 基础用法:动态改 temperature / 模型

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

# 1. 定义基础模型
model = ChatOpenAI(model="gpt-3.5-turbo")

# 2. 声明可配置字段:temperature、model_name
configurable_model = model.with_configurable_fields(
    temperature=0.7,       # 默认值
    model_name="gpt-3.5-turbo",
    # 可选:给配置加说明
    config_fields={
        "temperature": ConfigurableField(name="温度", description="0-2随机度"),
        "model_name": ConfigurableField(name="模型名")
    }
)

# 3. 组装链
prompt = ChatPromptTemplate.from_template("{question}")
chain = prompt | configurable_model

2. 调用时动态传配置

# 调用1:使用默认配置
chain.invoke({"question": "介绍AI"})

# 调用2:动态修改 temperature(更随机)
chain.invoke(
    {"question": "介绍AI"},
    config={"configurable": {"temperature": 1.5}}
)

# 调用3:动态切换模型
chain.invoke(
    {"question": "介绍AI"},
    config={"configurable": {"model_name": "gpt-4"}}
)

三、进阶用法

1. 多个可配置字段叠加

# 同时支持:温度、最大token、停止词
configurable_model = model.with_configurable_fields(
    temperature=0.7,
    max_tokens=512,
    stop=["\n"]
)

# 调用时一次性改多个
chain.invoke(
    input,
    config={
        "configurable": {
            "temperature": 0,
            "max_tokens": 100,
            "stop": ["结束"]
        }
    }
)

2. 与 bind() 混用

  • bind():固定不变的参数
  • configurable_fields():允许动态覆盖的参数
# 先 bind 固定参数,再声明可配置字段
model = ChatOpenAI().bind(stop=["END"])
configurable_model = model.with_configurable_fields(temperature=0.7)

3. 给链整体配置(不只是模型)

from langchain_core.output_parsers import StrOutputParser

chain = (
    prompt 
    | configurable_model 
    | StrOutputParser()
).with_configurable_fields(
    # 给整个链加配置(极少用,一般给组件加)
)

四、关键规则(必看)

  1. 优先级
    invoke(config) > configurable_fields 默认值 > bind() > 组件原始默认
    运行时传入的配置优先级最高。

  2. 必须导入依赖

# 必须导入 ConfigurableField
from langchain_core.runnables import ConfigurableField
  1. 适用所有 Runnable
    模型、提示词、解析器、RunnableLambda 都能用。

五、bind() vs configurable_fields() 对比

方法 作用 使用时机
bind() 固定参数,不可修改 全局统一配置
configurable_fields() 声明可动态修改的参数 同一链需要不同参数(如用户切换模型、温度)

一句话总结

  • 固定不变 → 用 bind()
  • 运行时要改 → 用 configurable_fields()

六、完整可运行示例

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import ConfigurableField

# 1. 定义可配置模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
configurable_llm = llm.with_configurable_fields(
    temperature=0.7,
    max_tokens=300
)

# 2. 构建链
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是专业助手"),
    ("human", "{input}")
])
chain = prompt | configurable_llm

# 3. 动态调用
response = chain.invoke(
    {"input": "什么是LCEL"},
    config={"configurable": {"temperature": 0.1, "max_tokens": 100}}
)
print(response.content)

总结

  • configurable_fields()声明组件的可动态配置参数
  • 调用时用 config={"configurable": {key: value}} 传参
  • 适合:动态切换模型、温度、最大token、停止词等场景
  • bind() 互补,共同实现 LCEL 灵活配置
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、什么是闭包?闭包有哪些实际运用场景?闭包是如何产生的?闭包产生的变量如何被回收? 二、前端错误如何捕获,pro...
    Benzic阅读 164评论 0 0
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,785评论 0 3
  • 方便起见不分parameter[形参,出现在函数定义中]和argument[实参,其值为传入函数的值],一律当作a...
    东月三二阅读 437评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,484评论 19 139
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,476评论 0 21

友情链接更多精彩内容