SuperAPI AI 工具集

tooluniverse-custom-tool

编程与开发

查看项目

更新于 10-16 01:16

技能介绍

用途:当需要访问 ToolUniverse 未覆盖的 API,或需要现有工具不提供的特定数据转换时,可创建自定义工具。推荐先尝试 JSON 配置(最简单、无需 Python),仅在需要自定义响应解析或有状态逻辑时再升级到 Python 类。

三种添加方式:JSON 配置适用于标准请求/响应的 REST API,无需编程;Python 类(工作区)用于本地/私有的自定义逻辑;插件包用于可分享、可通过 pip 安装复用。

工作区工具:.tooluniverse/tools/ 下的工具启动时自动发现,无需安装。可先执行 mkdir -p .tooluniverse/tools,再放置 JSON 配置,一个 JSON 文件可定义多个工具。Python 类用 @register_tool 装饰器注册,工作区 Python 工具使用 run(self, **named_params),参数按 input_schema 属性以关键字参数解包。

测试:可用 tu test MyAPI_search、tu test MyAPI_search '{"q": "test"}' 或 tu test --config my_tool_tests.json。tu test 会检查结果非空、依据 return_schema 校验 result["data"],并在配置中设置了 expect_status 和 expect_keys 时额外校验。注意 tu test 不验证结果非空([] 可通过 schema 校验),建议用能返回真实数据的 test_examples,并先用 urllib 手工确认 API 返回 JSON 而非 HTML,使用 2-4 个宽泛关键词。

与 MCP server 配合:.tooluniverse/tools/ 中的工具通过 tu serve 自动可用。工作区优先级为 --workspace 标志 → TOOLUNIVERSE_HOME 环境变量 → ./.tooluniverse/ → ~/.tooluniverse/。若使用其他工具目录,可在 .tooluniverse/profile.yaml 中加入 sources: [./my-custom-tools/],并以 tooluniverse --load .tooluniverse/profile.yaml 启动。

插件包:目录布局与工作区相同,另加 pyproject.toml 声明入口点。entry point 写为 [project.entry-points."tooluniverse.plugins"]、my-tools = "my_tools_package",值必须是可导入的 Python 包名。插件包工具继承 BaseTool,@register_tool("ClassName") 以类名字符串为参数,run(self, arguments: Dict) 接收单个字典参数,用 .get() 提取;init 接收 tool_config 并先调用 super().init(tool_config)。JSON 配置放在 data/ 下,type 字段须与 @register_tool 的字符串一致。init.py 保持最小(仅 docstring),插件系统会通过 _discover_entry_point_plugins() 自动导入所有 .py 文件,不要在其中加入注册逻辑或 JSON 加载。

安装验证:先 pip install -e /path/to/my_project_root,再从插件仓库目录运行 tu test MyAPI_search '{"query": "test"}';可用 tu info MyAPI_search 确认加载。

离线/纯计算工具:计算器类工具遵循插件包模式但不含 HTTP 层,可采用模块级预设查找表、单工具多 operation 的双向方程、模块级物理常量、多输出返回等模式。

限制:上述内容未提供收费、价格、平台或效果等信息;更完整的 JSON 字段与 Python 类参考见 references/json-tool.md 与 references/python-tool.md。