Install
openclaw skills install oc-llm-toolsUniversal Tool Definition System for LLM function calling. Define tools once, use with any LLM provider (OpenAI, Anthropic, Gemini, etc.). JSON Schema validation and automatic format conversion.
openclaw skills install oc-llm-tools基于 Bytebot Tool Definition 模式实现的 LLM 函数调用工具定义系统。
Version: 1.0.0
Features: JSON Schema 定义、多 LLM 格式转换、工具注册中心、参数验证
让 OpenClaw 能够:
from llm_tools import ToolRegistry, Tool
# 创建工具注册表
registry = ToolRegistry()
# 定义工具
@registry.register(
name="get_weather",
description="Get current weather for a location",
parameters={
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"default": "celsius"
}
},
"required": ["location"]
}
)
def get_weather(location: str, unit: str = "celsius"):
return {"temperature": 22, "unit": unit}
# OpenAI format
openai_tools = registry.to_openai()
# Anthropic format
anthropic_tools = registry.to_anthropic()
# Google Gemini format
gemini_tools = registry.to_gemini()
# Ollama format
ollama_tools = registry.to_ollama()
# 验证参数
is_valid, error = registry.validate_call(
"get_weather",
{"location": "Beijing", "unit": "celsius"}
)
# 执行工具
result = registry.execute("get_weather", {"location": "Beijing"})
# 从 JSON 定义转换
python3 scripts/main.py convert --input tools.json --format openai
python3 scripts/main.py convert --input tools.json --format anthropic
# 验证工具定义
python3 scripts/main.py validate --input tools.json
# 列出所有工具
python3 scripts/main.py list --input tools.json
{
"tools": [
{
"name": "search_web",
"description": "Search the web for information",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query"
},
"limit": {
"type": "integer",
"default": 10
}
},
"required": ["query"]
}
}
]
}
| Provider | Format | Features |
|---|---|---|
| OpenAI | Function Calling | tools / functions |
| Anthropic | Tool Use | computer_* 命名空间 |
| Function Calling | function_declarations | |
| Ollama | Tools | Native tool support |
| Mistral | Function Calling | OpenAI-compatible |
| Cohere | Tool Use | Custom format |
pip3 install -r requirements.txt
from llm_tools import ToolRegistry
registry = ToolRegistry()
# 注册工具
registry.register_tool(tool_definition)
# 装饰器方式
@registry.register(name="...", description="...", parameters={...})
def my_tool():
pass
# 批量注册
registry.register_from_dict({"tools": [...]})
registry.register_from_json_file("tools.json")
# 导出格式
openai_format = registry.to_openai()
anthropic_format = registry.to_anthropic()
gemini_format = registry.to_gemini()
ollama_format = registry.to_ollama()
# 验证和执行
registry.validate_call(name, arguments)
registry.execute(name, arguments)
from llm_tools import Tool
tool = Tool(
name="calculate",
description="Perform mathematical calculation",
parameters={
"type": "object",
"properties": {
"expression": {"type": "string"}
},
"required": ["expression"]
},
handler=lambda expr: eval(expr) # 可选
)
在 Skill 中使用:
from llm_tools import ToolRegistry
class MySkill:
def __init__(self):
self.tools = ToolRegistry()
@self.tools.register(name="read_file", ...)
def read_file(path: str):
return Path(path).read_text()
def get_llm_tools(self, provider: str):
if provider == "openai":
return self.tools.to_openai()
elif provider == "anthropic":
return self.tools.to_anthropic()
llm-tools/
├── SKILL.md
├── requirements.txt
├── lib/
│ ├── __init__.py
│ ├── registry.py # ToolRegistry 核心
│ ├── tool.py # Tool 类定义
│ ├── formats/
│ │ ├── __init__.py
│ │ ├── openai.py # OpenAI 格式转换
│ │ ├── anthropic.py # Anthropic 格式转换
│ │ ├── gemini.py # Google Gemini 格式
│ │ └── ollama.py # Ollama 格式
│ └── validators.py # JSON Schema 验证
├── scripts/
│ └── main.py # CLI 入口
└── examples/
├── tools.json # 示例工具定义
└── registry_example.py # 注册表示例
MIT License - 基于 Bytebot Tool Definition 模式实现