在使用 OpenAI 的 API进行工具调用时,默认情况下会以并行方式进行。这种并行调用非常适合处理多个请求,例如询问“东京、纽约和芝加哥的天气如何?”这样的问题时,它会同时调用天气工具三次。然而,有时候我们需要限制工具调用为单次,这可以通过设置 parallel_tool_calls 参数来实现。本文将详细介绍如何设置并禁用并行工具调用。
技术背景介绍
OpenAI 提供了一种灵活的工具调用机制,可以在一次请求中调用多个工具。默认情况下,这些调用是并行进行的,以最大化效率。然而,对于某些操作或者资源受限的场景,用户可能需要控制调用的次数或顺序。
核心原理解析
并行工具调用机制允许在一次请求中同时启动多个工具,从而加快处理速度。但通过设置 parallel_tool_calls=False,我们可以禁用这种并行性,让工具调用按顺序进行。
代码实现演示
下面是一个详细的代码实现示例,展示如何设置工具并禁用并行调用:
import os
from getpass import getpass
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
# 定义简单的数学工具
@tool
def add(a: int, b: int) -> int:
"""Adds a and b.
Args:
a (int): The first number.
b (int): The second number.
Returns:
int: The sum of a and b.
"""
return a + b
@tool
def multiply(a: int, b: int) -> int:
"""Multiplies a and b.
Args:
a (int): The first number.
b (int): The second number.
Returns:
int: The product of a and b.
"""
return a * b
# 工具列表
tools = [add, multiply]
# 设置API密钥
os.environ["OPENAI_API_KEY"] = getpass("Enter your OpenAI API key: ")
# 创建ChatOpenAI实例
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
# 绑定工具并禁用并行调用
llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False)
# 演示调用
tool_calls = llm_with_tools.invoke("Please call the first tool two times").tool_calls
print(tool_calls)
这个代码设置了两个简单的数学工具,并使用 parallel_tool_calls=False 禁用并行调用。在调用时,即便我们请求调用工具两次,它也会被限制为单次调用。
应用场景分析
在以下场景中,禁用并行工具调用可能会非常有用:
- 资源受限的情况下,避免超载服务器。
- 执行需要顺序进行的操作,例如依赖于上一个操作结果的计算。
- 测试工具的调用顺序和正确性。
实践建议
在需要禁用并行调用的场景,通过在绑定工具时设置 parallel_tool_calls=False 参数即可实现。确保工具函数是无状态的,以保证顺序调用不会因为内部状态变化而出现问题。
结束语:‘如果遇到问题欢迎在评论区交流。’
—END—

被折叠的 条评论
为什么被折叠?



