工具执行器
构建通用的工具执行器
当智能体需要使用多种工具时(例如,除了搜索,还可能需要计算、查询数据库等),我们需要一个统一的管理器来注册和调度这些工具。为此,我们创建一个 ToolExecutor 类。
from typing import Dict, Any
class ToolExecutor:
"""
一个工具执行器,负责管理和执行工具。
"""
def __init__(self):
self.tools: Dict[str, Dict[str, Any]] = {}
def registerTool(self, name: str, description: str, func: callable):
"""
向工具箱中注册一个新工具。
"""
if name in self.tools:
print(f"警告:工具 '{name}' 已存在,将被覆盖。")
self.tools[name] = {"description": description, "func": func}
print(f"工具 '{name}' 已注册。")
def getTool(self, name: str) -> callable:
"""
根据名称获取一个工具的执行函数。
"""
return self.tools.get(name, {}).get("func")
def getAvailableTools(self) -> str:
"""
获取所有可用工具的格式化描述字符串。
"""
return "\n".join([
f"- {name}: {info['description']}"
for name, info in self.tools.items()
])
1.初始化方法
创建一个空的工具仓库。 数据结构解析:
self.tools = {
"Search": {
"description": "网页搜索工具",
"func": <搜索函数>
},
"Calculator": {
"description": "计算器工具",
"func": <计算函数>
}
}
就像一个字典,key是工具名字,value是该工具的详情(包括描述和函数)。
2.registerTool注册工具
def registerTool(self, name: str, description: str, func: callable):
if name in self.tools:
print(f"警告:工具 '{name}' 已存在,将被覆盖。")
self.tools[name] = {"description": description, "func": func}
print(f"工具 '{name}' 已注册。")
参数解析:
name:工具的名字(比如 "Search")description:工具的描述(比如 "网页搜索引擎")func:工具的实际执行函数
流程:
- 检查这个名字的工具是否已存在 → 如果存在就提醒会被覆盖
- 把工具信息存进
self.tools字典里 - 打印注册成功的消息
3.getTool获取工具
def getTool(self, name: str) -> callable:
return self.tools.get(name, {}).get("func")
代码解析:
.get(name, {})→ 从字典里查找这个工具,找不到就返回空字典.get("func")→ 从工具信息里取出函数,取不到就返回None
4.getAvailableTools列举所有工具
def getAvailableTools(self) -> str:
return "\n".join([
f"- {name}: {info['description']}"
for name, info in self.tools.items()
])
把所有已注册的工具列成一个格式化字符串。
代码解析:
for name, info in self.tools.items()→ 遍历所有工具f"- {name}: {info['description']}"→ 格式化每一行"\n".join(...)→ 用换行符把所有行连接起来
使用示例
# 1. 创建工具执行器
executor = ToolExecutor()
# 2. 注册工具
executor.registerTool("Search", "网页搜索", search_function)
executor.registerTool("Calc", "数学计算", calc_function)
# 3. 列举所有工具
print(executor.getAvailableTools())
# 输出:
# - Search: 网页搜索
# - Calc: 数学计算
# 4. 获取并使用某个工具
search_func = executor.getTool("Search")
if search_func:
result = search_func("Python教程") # 调用搜索