164 lines
4.1 KiB
Python
164 lines
4.1 KiB
Python
from enum import Enum
|
||
|
||
|
||
class ToolParamType(Enum):
|
||
"""
|
||
工具调用参数类型
|
||
"""
|
||
|
||
STRING = "string" # 字符串
|
||
INTEGER = "integer" # 整型
|
||
FLOAT = "float" # 浮点型
|
||
BOOLEAN = "bool" # 布尔型
|
||
|
||
|
||
class ToolParam:
|
||
"""
|
||
工具调用参数
|
||
"""
|
||
|
||
def __init__(
|
||
self,
|
||
name: str,
|
||
param_type: ToolParamType,
|
||
description: str,
|
||
required: bool,
|
||
enum_values: list[str] | None = None,
|
||
):
|
||
"""
|
||
初始化工具调用参数
|
||
(不应直接修改ToolParam类,而应使用ToolOptionBuilder类来构建对象)
|
||
:param name: 参数名称
|
||
:param param_type: 参数类型
|
||
:param description: 参数描述
|
||
:param required: 是否必填
|
||
"""
|
||
self.name: str = name
|
||
self.param_type: ToolParamType = param_type
|
||
self.description: str = description
|
||
self.required: bool = required
|
||
self.enum_values: list[str] | None = enum_values
|
||
|
||
|
||
class ToolOption:
|
||
"""
|
||
工具调用项
|
||
"""
|
||
|
||
def __init__(
|
||
self,
|
||
name: str,
|
||
description: str,
|
||
params: list[ToolParam] | None = None,
|
||
):
|
||
"""
|
||
初始化工具调用项
|
||
(不应直接修改ToolOption类,而应使用ToolOptionBuilder类来构建对象)
|
||
:param name: 工具名称
|
||
:param description: 工具描述
|
||
:param params: 工具参数列表
|
||
"""
|
||
self.name: str = name
|
||
self.description: str = description
|
||
self.params: list[ToolParam] | None = params
|
||
|
||
|
||
class ToolOptionBuilder:
|
||
"""
|
||
工具调用项构建器
|
||
"""
|
||
|
||
def __init__(self):
|
||
self.__name: str = ""
|
||
self.__description: str = ""
|
||
self.__params: list[ToolParam] = []
|
||
|
||
def set_name(self, name: str) -> "ToolOptionBuilder":
|
||
"""
|
||
设置工具名称
|
||
:param name: 工具名称
|
||
:return: ToolBuilder实例
|
||
"""
|
||
if not name:
|
||
raise ValueError("工具名称不能为空")
|
||
self.__name = name
|
||
return self
|
||
|
||
def set_description(self, description: str) -> "ToolOptionBuilder":
|
||
"""
|
||
设置工具描述
|
||
:param description: 工具描述
|
||
:return: ToolBuilder实例
|
||
"""
|
||
if not description:
|
||
raise ValueError("工具描述不能为空")
|
||
self.__description = description
|
||
return self
|
||
|
||
def add_param(
|
||
self,
|
||
name: str,
|
||
param_type: ToolParamType,
|
||
description: str,
|
||
required: bool = False,
|
||
enum_values: list[str] | None = None,
|
||
) -> "ToolOptionBuilder":
|
||
"""
|
||
添加工具参数
|
||
:param name: 参数名称
|
||
:param param_type: 参数类型
|
||
:param description: 参数描述
|
||
:param required: 是否必填(默认为False)
|
||
:return: ToolBuilder实例
|
||
"""
|
||
if not name or not description:
|
||
raise ValueError("参数名称/描述不能为空")
|
||
|
||
self.__params.append(
|
||
ToolParam(
|
||
name=name,
|
||
param_type=param_type,
|
||
description=description,
|
||
required=required,
|
||
enum_values=enum_values,
|
||
)
|
||
)
|
||
|
||
return self
|
||
|
||
def build(self):
|
||
"""
|
||
构建工具调用项
|
||
:return: 工具调用项
|
||
"""
|
||
if self.__name == "" or self.__description == "":
|
||
raise ValueError("工具名称/描述不能为空")
|
||
|
||
return ToolOption(
|
||
name=self.__name,
|
||
description=self.__description,
|
||
params=None if len(self.__params) == 0 else self.__params,
|
||
)
|
||
|
||
|
||
class ToolCall:
|
||
"""
|
||
来自模型反馈的工具调用
|
||
"""
|
||
|
||
def __init__(
|
||
self,
|
||
call_id: str,
|
||
func_name: str,
|
||
args: dict | None = None,
|
||
):
|
||
"""
|
||
初始化工具调用
|
||
:param call_id: 工具调用ID
|
||
:param func_name: 要调用的函数名称
|
||
:param args: 工具调用参数
|
||
"""
|
||
self.call_id: str = call_id
|
||
self.func_name: str = func_name
|
||
self.args: dict | None = args
|