🔧 Tool 开发
⚠️ 关键安全警告
Workspace Tools 会在你的服务器上执行任意 Python 代码。 只应从可信来源安装,导入前必须审阅代码,并且只能把 Workspace 访问权限交给可信管理员。允许用户创建或导入 Tool,基本等同于给了他们服务器 shell 权限。完整背景见 Plugin Security Warning。
编写自定义 Toolkit
Toolkit 通常定义在一个 Python 文件中,包含顶部 metadata docstring 和一个 Tools 类。
为未来兼容性优先使用
asyncTool 方法通常都应该定义成 async。 OPL 数据空间后端正逐步向全异步执行迁移;同步函数未来可能阻塞执行,甚至失效。
顶部 docstring 示例
"""
title: String Inverse
author: Your Name
author_url: https://website.com
git_url: https://github.com/username/string-reverse.git
description: This tool calculates the inverse of a string
required_open_webui_version: 0.4.0
requirements: langchain-openai, langgraph, ollama, langchain_ollama
version: 0.4.0
licence: MIT
"""Tools 类
所有 Tool 方法都必须定义在名为 Tools 的类里。你也可以添加可选的 Valves 和 UserValves 子类:
class Tools:
def __init__(self):
self.valves = self.Valves()
class Valves(BaseModel):
api_key: str = Field("", description="Your API key here")
async def reverse_string(self, string: str) -> str:
"""
Reverses the input string.
:param string: The string to reverse
"""
if self.valves.api_key != "42":
return "Wrong API key"
return string[::-1]类型标注
每个 Tool 参数都应该有类型标注。 OPL 数据空间会用这些标注来生成发送给模型的 JSON Schema。没有类型标注的 Tool 虽然也可能运行,但一致性会明显变差。
外部依赖
如果你的 Tool 依赖第三方 Python 包,请通过顶部 frontmatter 里的 requirements 显式声明它们,并优先选择稳定、轻量且维护活跃的依赖。对于重量级依赖,要评估安装时间、镜像体积与多副本环境下的一致性成本。