有时候,我们希望在RunnableSequence
中的Runnable
使用一些不是前一个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",
"使用代数符号写出下面的方程,然后解它。使用格式\n\nEQUATION:...\nSOLUTION:...\n\n",
),
("human", "{equation_statement}"),
])
model = ChatOpenAI(temperature=0)
runnable = (
{"equation_statement": RunnablePassthrough()}
| prompt
| model
| StrOutputParser()
)
print(runnable.invoke("x raised to the third plus seven equals 12"))
EQUATION: x^3 + 7 = 12
SOLUTION:
两边同时减去7:
x^3 = 5
两边同时取立方根:
x = ∛5
如果我们想用某些stop
词调用模型,以便在某些提示技术中缩短输出。虽然我们可以在构造函数中传递一些参数,但其他运行时参数使用.bind()
方法如下:
runnable = (
{"equation_statement": RunnablePassthrough()}
| prompt
| model.bind(stop="SOLUTION")
| StrOutputParser()
)
print(runnable.invoke("x raised to the third plus seven equals 12"))
您可以绑定到Runnable
的内容取决于在调用时可以传递的额外参数。
附加 OpenAI 工具
另一个常见的用例是工具调用。虽然您通常应该使用.bind_tools()
方法来调用工具模型,但如果您想要更低级别的控制,也可以直接绑定特定于提供者的参数:
tools = [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "获取给定位置的当前天气",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市和州,例如 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?")
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_z0OU2CytqENVrRTI6T8DkI3u', 'function': {'arguments': '{"location": "San Francisco, CA", "unit": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function'}, {'id': 'call_ft96IJBh0cMKkQWrZjNg4bsw', 'function': {'arguments': '{"location": "New York, NY", "unit": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function'}, {'id': 'call_tfbtGgCLmuBuWgZLvpPwvUMH', 'function': {'arguments': '{"location": "Los Angeles, CA", "unit": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 84, 'prompt_tokens': 85, 'total_tokens': 169}, 'model_name': 'gpt-3.5-turbo-1106', 'system_fingerprint': 'fp_77a673219d', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-d57ad5fa-b52a-4822-bc3e-74f838697e18-0', tool_calls=[{'name': 'get_current_weather', 'args': {'location': 'San Francisco, CA', 'unit': 'celsius'}, 'id': 'call_z0OU2CytqENVrRTI6T8DkI3u'}, {'name': 'get_current_weather', 'args': {'location': 'New York, NY', 'unit': 'celsius'}, 'id': 'call_ft96IJBh0cMKkQWrZjNg4bsw'}, {'name': 'get_current_weather', 'args': {'location': 'Los Angeles, CA', 'unit': 'celsius'}, 'id': 'call_tfbtGgCLmuBuWgZLvpPwvUMH'}]})
总结:本文介绍了如何在Python中使用Runnable
和RunnableSequence
进行参数绑定,包括如何使用Runnable.bind()
方法设置常量参数,以及如何进行工具调用。通过示例代码,我们学习了如何构建一个简单的提示+模型链,并展示了如何通过绑定参数来控制模型的输出。此外,还提供了关于如何使用工具调用和如何使用.bind_tools()
方法的示例。
扩展知识:在本文中,我们使用了langchain_core
和langchain_openai
库,这些库是构建和运行复杂的语言模型链的框架。Runnable
和RunnableSequence
是该框架中用于构建和执行模型链的基本组件。通过学习本文,读者可以更深入地理解如何在实际应用中使用这些组件来实现更高级的自动化和集成功能。
请注意,由于原文中包含的图片链接无法直接翻译,我保留了原链接中的图片引用。如果您需要进一步的帮助或有其他文件需要翻译,请随时告知。