OpenClaw怎么让AI调用API接口?
不少朋友在折腾OpenClaw时都会遇到一个需求:怎么让AI Agent自己跑去调用外部API,而不是每次都得手动封装函数?答案其实很直接——关键就在于一个叫
openapi-skill
get_weather()这类函数的麻烦。

要搞清楚这个流程,其实就几步:准备规范文件、安装注册插件、然后在任务中触发调用。下面逐个拆开说。
准备OpenAPI规范文件
先得拿到目标API的OpenAPI 3.0规范文档,格式可以是JSON或YAML。怎么拿?最常见的两个渠道:一是从Swagger UI页面右上角那个“Export”按钮导出openapi.json;二是直接访问API服务的/openapi.json路径下载。如果对方连这个都没提供,那这条路就走不通了——
注意,必须是标准OpenAPI 3.0格式,Swagger 2.0或Postman集合都不支持
拿到文件后,把它保存到项目本地目录,比如./skills/weather-api.yaml,这个路径后面注册时会用到。
安装并注册openapi-skill
回到OpenClaw项目根目录,执行安装命令:
pip install git+https://github.com/SKY-lv/openapi-skill.git
安装完成后,在Agent初始化配置里加上技能注册代码,大概这个样子:
from openapi_skill import OpenAPISkill
skill = OpenAPISkill.from_file('./skills/weather-api.yaml')
agent.register_skill('weather', skill)
这一步走完,Agent就相当于读懂了那个API的全部端点、参数、认证方式乃至响应结构——你不需要再写一个get_weather()函数,它自己就能搞定。
在任务中触发API调用
接下来有两种方式让Agent动手。
方法一:自然语言触发
直接告诉Agent:“查一下北京当前天气”。只要规范文档里定义了
GET /weather且包含city参数,Agent会自动匹配并填充参数发起调用。
方法二:显式调用技能
在代码里构造工具调用请求,比如:
agent.invoke_skill('weather', {
'path': '/weather',
'method': 'GET',
'params': {'city': 'Beijing'}
})
这里有个容易踩坑的地方:参数名必须与OpenAPI文档中parameters字段定义的name完全一致,大小写敏感。多一个空格或少一个字母都会导致匹配失败。
验证调用是否成功
如果调用后没反应,或者返回了意料之外的结果,别急着怀疑人生,按这套排查步骤来:
第一步:启动OpenClaw时加上调试日志,添加环境变量LOG_LEVEL=DEBUG;
第二步:在Agent输出里搜索包含[openapi-skill]前缀的日志行;
第三步:确认日志里出现了Resolved operationId=...和Calling HTTP request...这样的字样——这两个出现说明解析和请求都正常;
第四步:检查返回的observation内容是否为有效JSON,并且包含你预期的字段(比如temperature)。如果返回空或者404,大概率是OpenAPI文档里的server.url配置错了——基础路径不对,请求自然发不出去。
整个过程下来,你会发现最关键的一步其实还是规范文件本身的质量。只要文档规范、参数匹配、路径可达,AI Agent就能像调用本地函数一样调用远程API,省心又省力。