ToolRegistry
Oaklight/ToolRegistry加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:你让 Claude 帮你查一个技术问题,它不仅给你答案,还直接打开浏览器搜索、抓取网页内容、调用 API 获取最新数据,甚至帮你把结果整理成 Markdown 文档保存到本地——整个过程无需你手动复制粘贴。这就是 Programmatic Tool-Calling(PTC) 的魅力,而 ToolRegistry 就是管理这些"AI 工具"的瑞士军刀。
随着 GPT-4、Claude 3.5、Gemini 等大模型陆续支持函数调用(Function Calling),AI Agent 的能力边界正在快速扩展。但现实问题是:每个大模型厂商定义的"工具Schema"格式都不一样——OpenAI 用 tools 数组,Anthropic 用 tools,Google 用 function_declarations,MCP 协议又有自己的规范。如果你要做一个同时支持多个大模型的 AI Agent,光是适配每家厂商的 Schema 就够喝一壶的。ToolRegistry 正是为了解决这个"Schema 地狱"而诞生的。
ToolRegistry 由独立开发者 Oaklight 于 2025 年 3 月创建。项目的起源颇具代表性——作者在开发 AI Agent 应用时,发现自己在不同大模型之间迁移时,需要为同一个"网页搜索"工具重复写 3-4 份不同的 Schema 定义。更痛苦的是,当工具参数变更时,所有适配层都要同步修改,稍有不慎就会导致运行时错误。
这种"重复劳动+维护噩梦"的体验,促使作者开发了 ToolRegistry。核心理念很简单:注册一次工具,自动生成所有主流大模型所需的 Schema 格式。 背后依赖的核心依赖是 llm-rosetta,负责做不同 LLM Provider 之间的 Schema 转换层。
项目目前处于活跃开发状态,最新版本 v0.15.0 发布于 2026 年 8 月 6 日,不到半年时间已迭代 15 个版本。Star 数 60,Forks 8,在函数调用工具管理这个细分领域积累了一定影响力。
ToolRegistry 的核心能力:无论你的工具是原生 Python 函数、MCP 服务器、OpenAPI 规范,还是 LangChain 工具,都可以统一注册到同一个 ToolRegistry 中,自动获得跨平台的 Schema 生成能力。
这是最基础的用法——用 @registry.register 装饰器直接把任意 Python 函数注册为工具:
from toolregistry import ToolRegistry
registry = ToolRegistry()
@registry.register
def add(a: int, b: int) -> int:
return a + b
@registry.register
def web_search(query: str) -> str:
# 实际调用搜索 API
...
注册后,ToolRegistry 自动从函数签名和 docstring 中提取参数信息,生成符合目标 LLM 格式的 Schema。
Model Context Protocol(MCP)是 Anthropic 主导的 AI 工具协议标准。ToolRegistry 支持直接连接 MCP 服务器,将远程工具导入本地注册表:
registry.connect_mcp_tools("my-mcp-server", "http://localhost:8080")
这样,你就可以在一个 Agent 中同时使用本地函数和远程 MCP 工具,无需关心它们来自哪里。
如果你的后端已经有 OpenAPI(Swagger)文档,ToolRegistry 可以直接解析并注册为可用工具:
registry.register_openapi_tools("https://api.example.com/openapi.json")
这对于已有 REST API 的项目来说简直是神器——无需手动编写工具包装器,ToolRegistry 自动处理参数映射和请求构造。
已有 LangChain 工具资产?通过 LangChain 集成层,可以无缝迁移到 ToolRegistry:
from langchain.tools import WikipediaQueryRun
from toolregistry.integrations.langchain import register_langchain_tool
register_langchain_tool(registry, WikipediaQueryRun())
ToolRegistry 的架构设计颇为讲究。核心类 ToolRegistry 由 7 个正交 Mixin 组合而成,每个 Mixin 职责单一,通过组合模式构建出完整能力:
| Mixin | 职责 |
|---|---|
| RegistrationMixin | 注册/注销工具(函数、类、MCP、OpenAPI) |
| EnableDisableMixin | 动态启用/禁用工具,带原因追踪 |
| NamespaceMixin | 命名空间前缀、子注册表合并/分离 |
| PermissionsMixin | 基于标签的权限策略(同步/异步) |
| ToolDiscoveryMixin | 自动发现和注册工具 |
| ExecutionMixin | 工具执行(线程池/进程池) |
| SchemaMixin | 跨 Provider Schema 生成 |
这种设计的好处是高度解耦——每个 Mixin 都可以独立测试、替换和扩展。执行后端支持 ThreadPoolBackend 和 ProcessPoolBackend 两种模式,前者适合 IO 密集型工具,后者适合 CPU 密集型工具。
ToolRegistry 不只是一个 Python 库,而是一个三包生态:
这条链路意味着你不仅可以用 ToolRegistry 管理工具,还可以通过 server 包把它变成一个远程工具服务,供多个 Agent 共享。
安装只需一行:
pip install toolregistry
快速启动一个带管理面板的本地工具服务:
python examples/admin_demo.py
这会启动一个 Web 管理界面(基于 FastAPI),显示所有已注册工具的执行日志、统计信息和实时状态。这个 admin panel 是 ToolRegistry 的一大亮点——对于调试和监控 AI Agent 的工具调用行为非常有用。
但需要注意:ToolRegistry 对用户有一定要求。文档主要面向有 Python 基础和 LLM 开发经验的开发者。项目依赖 Python 3.10+,不支持更早版本。
代码质量是 ToolRegistry 的一大亮点。项目使用 ty 做类型检查,ruff 做代码风格检查,complexipy 做复杂度检查,测试框架为 pytest。tests 目录下有 35+ 个测试文件,覆盖工具注册、命名空间、权限策略、MCP/OpenAPI/LangChain 集成、异步执行路径、Schema 生成与裁剪、参数校验等核心模块。每次 commit 都跑 CI,类型检查和 lint 是发布流程的一部分。这种工程严谨度在个人项目中相当难得。
当然,ToolRegistry 也有自己的局限:
ToolRegistry 反映了一个更大的行业趋势:随着 AI Agent 从实验室走向生产环境,工具调用的标准化和互操作性将成为刚需。 Anthropic 主导的 MCP 协议、Google 的 A2A 协议,都在试图解决"AI 工具互联"的问题。ToolRegistry 处于这一浪潮的前沿位置,通过统一接口连接多种协议和 Provider,为开发者提供了在多个标准之间无缝切换的能力。对于需要同时支持 OpenAI、Anthropic、Gemini 或自托管模型的应用开发者来说,值得关注和试用。