Skip to main content

工具执行器

构建通用的工具执行器​

当智能体需要使用多种工具时(例如,除了搜索,还可能需要计算、查询数据库等),我们需要一个统一的管理器来注册和调度这些工具。为此,我们创建一个 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:工具的实际执行函数

流程:

  1. 检查这个名字的工具是否已存在 → 如果存在就提醒会被覆盖
  2. 把工具信息存进self.tools字典里
  3. 打印注册成功的消息

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教程") # 调用搜索