LangChain系列文章
- LangChain 36 深入理解LangChain 表达式语言优势一 LangChain Expression Language (LCEL)
- LangChain 37 深入理解LangChain 表达式语言二 实现prompt+model+output parser LangChain Expression Language (LCEL)
- LangChain 38 深入理解LangChain 表达式语言三 实现RAG检索增强生成 LangChain Expression Language (LCEL)
- LangChain 39 深入理解LangChain 表达式语言四 为什么要用LCEL LangChain Expression Language (LCEL)
- LangChain 40 实战Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API
- LangChain 41 深入理解LangChain 表达式语言五 为什么要用LCEL调用大模型LLM LangChain Expression Language (LCEL)
- LangChain 42 深入理解LangChain 表达式语言六 Runtime调用不同大模型LLM LangChain Expression Language (LCEL)
- LangChain 43 深入理解LangChain 表达式语言七 日志和Fallbacks异常备选方案 LangChain Expression Language (LCEL)
- LangChain 44 深入理解LangChain 表达式语言八 Runnable接口输入输出模式 LangChain Expression Language (LCEL)
- LangChain 45 深入理解LangChain 表达式语言九 Runnable 调用、流输出、批量调用、异步处理 LangChain Expression Language (LCEL)
- LangChain 46 深入理解LangChain 表达式语言十 Runnable 调用中间状态调试日志 LangChain Expression Language (LCEL)
- LangChain 47 深入理解LangChain 表达式语言十一 Runnable 并行处理 LangChain Expression Language (LCEL)
- LangChain 48 终极解决 实战Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API
- LangChain 49 深入理解LangChain 表达式语言十二 Runnable 透传数据保持输入不变 LangChain Expression Language (LCEL)
- LangChain 50 深入理解LangChain 表达式语言十三 自定义pipeline函数 LangChain Expression Language (LCEL)
- LangChain 51 深入理解LangChain 表达式语言十四 自动修复配置RunnableConfig LangChain Expression Language (LCEL)
- LangChain 52 深入理解LangChain 表达式语言十五 Bind runtime args绑定运行时参数 LangChain Expression Language (LCEL)
- LangChain 53 深入理解LangChain 表达式语言十六 Dynamically route动态路由 LangChain Expression Language (LCEL)
- LangChain 54 深入理解LangChain 表达式语言十七 Chains Route动态路由 LangChain Expression Language (LCEL)
- LangChain 55 深入理解LangChain 表达式语言十八 function Route自定义动态路由 LangChain Expression Language (LCEL)
1. 在运行时配置链内部
通常情况下,您可能希望尝试或甚至向最终用户公开多种不同的操作方式。为了尽可能地简化这一体验,我们定义了两种方法。
-
首先是
configurable_fields
方法。这使您可以配置可运行项的特定字段。 -
其次是
configurable_alternatives
方法。通过这种方法,您可以列出在运行时可以设置的任何特定可运行项的替代方案。
2. 配置字段Fields
通过LLMs,我们可以配置诸如temperature, 随机性。
from langchain.prompts import PromptTemplate
from langchain_community.chat_models import ChatOpenAI
from langchain_core.runnables import ConfigurableField
from dotenv import load_dotenv # 导入从 .env 文件加载环境变量的函数
load_dotenv() # 调用函数实际加载环境变量
# from langchain.globals import set_debug # 导入在 langchain 中设置调试模式的函数
# set_debug(True) # 启用 langchain 的调试模式
model = ChatOpenAI(temperature=0).configurable_fields(
temperature=ConfigurableField(
id="llm_temperature",
name="LLM Temperature",
description="The temperature of the LLM",
)
)
resposne_0 = model.invoke("pick a random number")
print('resposne_0 >> ', resposne_0)
response_09 = model.with_config(configurable={"llm_temperature": 0.9}).invoke("pick a random number")
print('response_09 >> ', response_09)
# 我们也可以在它作为链条的一部分时这样做。
prompt = PromptTemplate.from_template("Pick a random number above {x}")
chain = prompt | model
response_0 = chain.invoke({"x": 50})
print('response_0 >> ', response_0)
response_07 = chain.with_config(configurable={"llm_temperature": 0.7}).invoke({"x": 50})
print('response_07 >> ', response_07)
运行结果
zgpeace@zgpeaces-MacBook-Pro ~/W/L/langchain-llm-app> python LCEL/config_fields.py [12:30:37] develop+
resposne_0 >> content='7'
response_09 >> content='14'
response_0 >> content='67'
response_07 >> content='72'
3. 可配置的选择Alternatives
让我们来看看如何用LLMs来做这件事
from langchain.prompts import PromptTemplate
from langchain_community.chat_models import ChatAnthropic, ChatOpenAI
from langchain_core.runnables import ConfigurableField
from dotenv import load_dotenv # 导入从 .env 文件加载环境变量的函数
load_dotenv() # 调用函数实际加载环境变量
# from langchain.globals import set_debug # 导入在 langchain 中设置调试模式的函数
# set_debug(True) # 启用 langchain 的调试模式
llm = ChatAnthropic(temperature=0.7).configurable_alternatives(
# This gives this field an id
# When configuring the end runnable, we can then use this id to configure this field
ConfigurableField(id="llm"),
# This sets a default_key.
# If we specify this key, the default LLM (ChatOpenAI() initialized above) will be used
default_key="anthropic",
# This adds a new option, with name `openai` that is equal to `ChatOpenAI()`
openai=ChatOpenAI(),
# This adds a new option, with name `gpt4` that is equal to `ChatOpenAI(model="gpt-4")`
gpt4=ChatOpenAI(model="gpt-4"),
# You can add more configuration options here
)
prompt = PromptTemplate.from_template("Tell me a joke about {topic}")
chain = prompt | llm
# We can use `.with_config(configurable={"llm": "openai"})` to specify an llm to use
chat_response = chain.with_config(configurable={"llm": "openai"}).invoke({"topic": "bears"})
print('chat_response >> ', chat_response)
# We can use `.with_config(configurable={"llm": "gpt4"})` to specify an llm to use
gpt4_response = chain.with_config(configurable={"llm": "gpt4"}).invoke({"topic": "bears"})
print('gpt4_response >> ', gpt4_response)
输出
zgpeace@zgpeaces-MacBook-Pro ~/W/L/langchain-llm-app> python LCEL/config_alternatives.py [12:41:51] develop!+?
chat_response >> content="Why don't bears wear shoes? \n\nBecause they have bear feet!"
gpt4_response >> content="Why don't bears like fast food?\n\nBecause they can't catch it!"
代码
https://github.com/zgpeace/pets-name-langchain/tree/develop
参考
https://python.langchain.com/docs/expression_language/how_to/configure