工具类基类:BaseTool
被其他10个子类工具类继承:
bash工具类
核心逻辑是一个基于asyncio.subprocess.Process
实现的/bin/bash命令的工具类:
asyncio.subprocess.Process
是 Python 异步编程中用于管理子进程的核心类,其设计目标是提供与 subprocess.Popen
类似的接口,但完全适配异步 I/O 模型。
browser_user_tool工具类
基于browser_use库实现:
具体能力待验证;
create_chat_completion工具类
结构化聊天补全工具,其核心功能是根据用户指定的输出类型动态生成参数模式,并执行类型安全的数据转换。以下是具体功能的拆解:
一、核心功能架构
-
工具类继承与基础属性
- 继承自
BaseTool
(假设为自定义工具基类),通过name
和description
定义工具标识 type_mapping
实现 Python 类型到 JSON Schema 类型的映射(如str → "string"
),用于参数生成
- 继承自
-
动态参数模式生成
- 根据
response_type
动态构建参数模式(_build_parameters
方法):- 简单类型(如
str
):生成{"type": "string"}
的response
字段 - Pydantic 模型:提取模型的 JSON Schema(如
model_json_schema
),直接复用其属性定义 - 复杂类型(如
List
/Dict
/Union
):递归解析嵌套类型,生成符合 JSON Schema 的结构(如array
/object
/anyOf
)
- 简单类型(如
- 根据
二、关键技术实现
-
类型解析与递归处理
- 通过
get_origin
和get_args
解析泛型类型(如List[int]
拆解为list
和int
) - 支持嵌套类型处理(如
List[Dict[str, int]]
生成多层嵌套的items
定义)
- 通过
-
类型安全转换
- 在
execute
方法中,根据response_type
进行类型强制转换:- Pydantic 模型:将输入数据实例化为模型对象(如
self.response_type(**kwargs)
),实现自动验证 - 基础类型(如
int
/bool
):尝试将字符串结果转换为目标类型(如int("42")
),失败时回退原始值
- Pydantic 模型:将输入数据实例化为模型对象(如
- 在
三、应用场景与设计优势
-
适用场景
- API 集成:与 OpenAI ChatCompletion API 对接时,生成符合模型要求的参数结构
- 函数调用(Function Calling):通过动态生成的 JSON Schema 描述外部函数参数,支持
function_call
参数配置 - 多格式输出:支持字符串、列表、字典及自定义模型输出,适应不同下游需求(如 CLI 文本、Web API 的 JSON 响应)
-
设计优势
- 灵活性:通过
response_type
参数可扩展支持任意输出类型(包括第三方模型)。 - 类型安全:利用 Pydantic 强制校验输入数据,减少运行时错误
- 标准化输出:生成的 JSON Schema 符合 OpenAI API 规范,避免手动定义参数结构的冗余
- 灵活性:通过
四、示例说明
假设定义 response_type
为以下 Pydantic 模型:
class WeatherResponse(BaseModel):
city: str
temperature: float
unit: Literal["Celsius", "Fahrenheit"]
代码将自动生成参数模式:
{
"type": "object",
"properties": {
"city": {"type": "string"},
"temperature": {"type": "number"},
"unit": {"enum": ["Celsius", "Fahrenheit"]}
},
"required": ["city", "temperature", "unit"]
}
执行时,若输入 {"city": "Beijing", "temperature": 25.5, "unit": "Celsius"}
,会被自动转换为 WeatherResponse
实例。
该代码通过动态参数生成与