如何向Runnable添加默认调用参数
在使用LangChain进行AI模型开发时,绑定常量参数到Runnable可以简化链式调用过程。本指南将讲述如何在RunnableSequence
中为Runnable
添加默认参数,尤其是在它们不属于上一个Runnable
的输出或用户输入时。我们将使用Runnable.bind()
方法来提前设置这些参数。
技术背景介绍
LangChain是一个用于创建复杂AI处理链的库,允许你将多个处理步骤链接在一起。同时,你可以为每个步骤配置默认参数,以提高调用效率,减少手动配置的工作。
核心原理解析
在LangChain中,每个Runnable
表示一个可执行的操作步骤,而Runnable.bind()
允许我们为这些步骤预先绑定参数。这对于实现复杂的调用场景非常有用,例如绑定停止序列或工具调用。
代码实现演示
绑定停止序列
以下代码展示了如何在模型调用中绑定停止序列以缩短输出:
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
# 创建提示模板
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"Write out the following equation using algebraic symbols then solve it. Use the format\n\nEQUATION:...\nSOLUTION:...\n\n",
),
("human", "{equation_statement}"),
]
)
# 使用OpenAI模型,设置温度为0以减少输出随机性
model = ChatOpenAI(temperature=0)
# 绑定停止参数,减少输出长度
runnable = (
{"equation_statement": RunnablePassthrough()}
| prompt
| model.bind(stop="SOLUTION") # 绑定停止序列
| StrOutputParser()
)
# 调用模型
print(runnable.invoke("x raised to the third plus seven equals 12"))
此代码段通过绑定stop
参数,确保模型在生成解决方案时停止输出。
附加OpenAI工具
工具调用是LangChain中另一个常见的使用场景。使用bind_tools()
方法可以调用不同的工具:
# 定义工具列表
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
},
}
]
# 绑定工具到模型
model = ChatOpenAI(model="gpt-3.5-turbo-1106").bind(tools=tools)
# 执行工具调用
model.invoke("What's the weather in SF, NYC and LA?")
在此示例中,我们绑定了自定义天气查询功能,并调用模型来获取天气数据。
应用场景分析
- 停止序列应用:在生成包含多步骤计算的文本时,限制输出确保结果简洁明了。
- 工具调用应用:当需要从模型外部获取数据(如天气、股市等)时,可以通过绑定工具实现。
实践建议
- 始终为复杂链设置默认参数以提高效率。
- 在使用工具调用时,确保工具配置正确,以避免调用失败。
- 利用
bind()
方法简化代码结构,使链条调用更可控、更易于维护。
如果遇到问题欢迎在评论区交流。
—END—