核心發(fā)現(xiàn)
在 OpenClaw 中,Skills 和 HTTP/API 工具定義是兩個獨立的機制:
- Skills(基于文檔的方式)
Skills 是 Markdown 文件(skills/*/SKILL.md),它們不直接定義 HTTP 工具。
模型讀取 skill 文檔后,使用 exec 工具運行 curl 命令。HTTP 調(diào)用是由 exec 工具完成的,而不是由專用的 HTTP 工具定義完成的。
- Plugin Tools(編程式 HTTP 工具)
Extensions(如 feishu)通過插件系統(tǒng)注冊實際可執(zhí)行的工具:
extensions/feishu/src/doc-schema.ts → 定義工具 schema
extensions/feishu/src/docx.ts → 實現(xiàn) HTTP 調(diào)用邏輯
extensions/feishu/index.ts → 通過 api.registerTool() 注冊
工具轉(zhuǎn)換管道
Plugin Tool 注冊流程:
─────────────────────
extensions/*/index.ts → api.registerTool() → Registry.tools[]
↓
resolvePluginTools() → factory(context) → AgentTool[]
↓
toToolDefinitions() → ToolDefinition[] → Agent 執(zhí)行
關(guān)鍵文件
┌────────────────────────┬──────────────────────────────────────────┐
│ 用途 │ 文件路徑 │
├────────────────────────┼──────────────────────────────────────────┤
│ Skill 加載 │ src/agents/skills/workspace.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ Plugin tool 注冊 │ src/plugins/registry.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ Plugin tool 解析 │ src/plugins/tools.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ Tool definition 適配器 │ src/agents/pi-tool-definition-adapter.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ HTTP tool 示例 │ extensions/feishu/src/doc-schema.ts │
└────────────────────────┴──────────────────────────────────────────┘
結(jié)論
Skills 不直接定義 HTTP 工具。它們是文檔文件,指導(dǎo)模型如何使用現(xiàn)有工具。
Plugin Tools 才是定義可執(zhí)行 HTTP 工具的機制。Extension 作者需要編寫 TypeScript 代碼來定義 schema、實現(xiàn)邏輯,然后注冊工具