OpenClaw Docs CN

Skill 开发 / 能力连接

调用 Tools / 外部 API

这篇解决一个关键分水岭:Skill 什么时候只写流程说明,什么时候要接脚本和外部 API。你会得到一套可执行路径,从“调用内置 Tool”到“安全接入第三方 API”,一步步落地。

本章完成标准

你完成后应该能写出一个可调用 Tool、可接外部 API、并带依赖校验和失败处理的 Skill。

先分清 3 层能力来源

  1. 内置 Tools:系统已有能力,由 Skill 负责调用策略。
  2. 本地脚本:放在 scripts/,由 Skill 触发执行。
  3. 外部 API:通过环境变量和配置注入,执行真实服务调用。

核心认知:Skill 是“组织与调度层”,不是 Tool 本体。

步骤一:先从内置 Tools 跑通

如果只是要规范调用顺序,不要急着上 API。先在 SKILL.md 写清:

  • 什么时候调用哪个 Tool。
  • 调用顺序和停止条件。
  • 输出结构(结论、行动项、风险)。

这一步最稳、排障成本最低。

步骤二:有重复执行逻辑时再加脚本

满足这些条件再拆 scripts/

  • 有固定命令序列,手写容易漂移。
  • 需要稳定解析 JSON/CSV/网页结构。
  • 同一逻辑会被高频复用。

正文推荐写法:

执行 {baseDir}/scripts/fetch_and_summarize.py 处理输入。
若脚本失败,返回错误原因并提示检查依赖和 API 配置。

步骤三:接外部 API 时先补依赖门槛

在 frontmatter 里先声明依赖,再写业务逻辑。示例:

---
name: summarize_api
description: 调用外部总结服务处理长文本
metadata: {"openclaw":{"requires":{"bins":["python3"],"env":["SUMMARY_API_KEY"]},"primaryEnv":"SUMMARY_API_KEY"}}
---

# Summarize API Skill

适用场景:
- 用户提交长文档或网页内容
- 需要调用外部 API 返回结构化摘要

执行规则:
- 运行 {baseDir}/scripts/run.py
- API 失败时输出可操作错误,不暴露密钥

步骤四:在配置里注入密钥和参数

把密钥放配置,不要写进 SKILL.md。示例(JSON 结构化写法):

{
  "skills": {
    "entries": {
      "summarize_api": {
        "enabled": true,
        "env": {
          "SUMMARY_API_KEY": "YOUR_KEY"
        },
        "config": {
          "endpoint": "https://api.example.com",
          "model": "summary-v1"
        }
      }
    }
  }
}

重点:env 放密钥,config 放业务参数,职责分离。

步骤五:补齐失败处理和安全边界

  • 缺密钥:明确提示缺失变量名。
  • 超时/限流:提示重试策略或降级模型。
  • 权限不足:指出具体依赖或权限项。
  • 绝不回显 Token/API Key。

这一步决定 Skill 能否长期稳定运行。

apiKey 与 env 的使用建议

  • env:最通用,脚本直接读取,推荐默认用它。
  • apiKey:适合统一密钥入口的高级场景。

新手先用 env,维护更直观。

会影响调用方式的关键字段

  • user-invocable:允许用户手动命令触发。
  • disable-model-invocation:禁止自动调用。
  • command-dispatch + command-tool:将命令直接派发到指定 Tool。
  • command-arg-mode:控制参数传递方式。

这组字段建议在基础流程稳定后再启用。

6 个常见坑

  1. 把 Skill 当 Tool 写,缺触发条件与边界。
  2. 把 API Key 写进仓库文件。
  3. 未声明依赖,运行时才报错。
  4. 脚本路径写死本机目录。
  5. 失败处理缺失,用户拿不到可执行建议。
  6. 过早使用 command-dispatch,排障难度陡增。

下一步建议

官方参考