之前分享了OpenClaw Skill的基础开发和功能扩展,有很多小伙伴留言问:“怎么让我的Skill调用外部API呀?”“需要API密钥的接口,在Skill里怎么配置?”

其实答案超级简单——Skill调用API,本质就是在Python脚本里发个网络请求,不用懂复杂的接口原理,不用写高深的代码,只要掌握一个万能模板,任何第三方API(免费的、需要密钥的、自己开发的)都能轻松集成到Skill里,让你的Skill功能直接翻倍!

今天就把这份新手友好型教程分享给大家,从核心原理到实战案例,从免费API到带密钥的接口,全程实操,跟着走就能学会,哪怕是零代码基础也能轻松上手~

一、先搞懂:Skill调用API,到底是什么意思?

用一句大白话解释:API就像是“别人做好的功能接口”,比如查天气、查文案、查热搜、查快递,这些功能不用我们自己从零开发,只要调用别人做好的API,就能直接拿到数据。

而OpenClaw的Skill,就是一个“桥梁”——把API的功能,变成AI能调用的工具。简单说:

Skill调用API = 让AI通过你的脚本,去“问”API要数据,再把数据整理好返回给你。

比如我们之前做的天气查询Skill,就是调用了免费的天气API;今天我们做一个更简单的实战案例——调用“一言”API,让AI返回一句随机文案,全程零复杂操作,帮你吃透核心逻辑。

二、核心准备:3步搞定前置工作(超简单)

在开始之前,只需要做好3件事,不用装额外的复杂工具,有电脑、有OpenClaw就够:

  1. 安装requests库(发网络请求的核心工具):打开终端,输入一句命令即可,复制粘贴就能执行:pip install requests(只需要安装一次,后续所有API调用都能用);

  2. 找一个API接口(新手推荐免费公开API,不用密钥,避免踩坑);

  3. 准备好Skill的基础文件结构(还是熟悉的SKILL.md + scripts文件夹,不用新建额外文件)。

这里给新手推荐几个免费公开API(直接能用,不用密钥),方便大家测试:

  • 一言API:https://v1.hitokoto.cn/(返回随机文案、语录);

  • 天气API:https://cn.apihz.cn/api/tianqi/tqybip.php在这里插入图片描述

三、实操实战:开发一个“随机文案Skill”(调用一言API)

我们以“一言API”为例,开发一个能返回随机文案的Skill,全程分4步,每一步都有现成代码,复制粘贴就能搞定,建议边看边操作,印象更深刻。

步骤1:创建Skill目录(固定结构)

和之前开发Skill一样,先在你的OpenClaw项目目录下,新建一个Skill文件夹,命名为“quote-skill”(名字可自定义,建议英文),然后创建以下结构:

quote-skill/
├─ SKILL.md           # 技能配置文件(AI识别用)
└─ scripts/
   └─ quote.py        # 核心脚本(调用API的逻辑)

这个结构和我们之前做的hello-skill、weather-skill完全一致,新手不用记新规则,沿用之前的逻辑即可。

步骤2:编写SKILL.md(告诉AI怎么用)

SKILL.md还是老样子,相当于技能的“说明书”,告诉AI这个Skill是什么、什么时候用、需要传什么参数。因为我们调用的一言API不需要参数,所以args为空,直接复制下面的内容粘贴即可:

---
name: quote-skill
description: 获取一句随机文案、励志语录、短句,无需传入参数
version: 1.0.0
author: 你的名字
type: script
scope: local
command: python3 scripts/quote.py
args: []  # 无需参数,为空即可
---

# 技能使用说明
当用户需要随机文案、励志语录、短句,或者想要一句治愈文案时,自动调用此技能。
无需传入任何参数,直接调用即可返回结果。

这里重点说明:如果你的API需要参数(比如天气API需要城市名),就在args里添加对应的参数,和我们之前天气Skill的写法完全一样,后面会详细讲。

步骤3:编写quote.py(核心!调用API的代码)

这一步是核心,但代码超级简单,全程套用“万能模板”,只需要替换API地址和数据提取逻辑即可。直接复制下面的代码,粘贴到scripts/quote.py里,我会逐行解释,帮你理解每一步的作用:

import requests  # 导入发网络请求的库(之前安装的)

# 1. 定义要调用的API地址(一言API,免费公开,不用密钥)
api_url = "https://v1.hitokoto.cn/"

try:
    # 2. 发送GET请求,调用API(timeout=10表示超时时间10秒,避免卡壳)
    response = requests.get(api_url, timeout=10)
    
    # 3. 将API返回的结果转换成JSON格式(方便提取数据)
    data = response.json()
    
    # 4. 从JSON数据中提取我们需要的内容(文案和来源)
    # 可以先打印data,查看API返回的所有数据,再提取对应字段
    quote_content = data["hitokoto"]  # 文案内容
    quote_source = data["from"]       # 文案来源
    
    # 5. 输出结果(必须用print,AI才能读取并返回给用户)
    print(f"📝 随机文案:{quote_content}")
    print(f"✍️ 文案来源:{quote_source}")

# 捕获异常(避免网络不稳、API失效导致Skill崩溃)
except Exception as e:
    print(f"调用API失败啦,原因:{str(e)}")

逐行解释(新手必看):

  • import requests:导入我们之前安装的库,没有这个库,就无法发送网络请求;

  • api_url:就是我们要调用的API地址,换成其他API,只需要改这里;

  • requests.get():发送GET请求(最常用的请求方式,查数据都用这个);

  • response.json():把API返回的内容转换成JSON格式,就像“整理好的字典”,方便我们提取需要的数据;

  • print():必须打印结果,AI才能读取到,然后返回给用户,这一步不能少;

  • try...except:捕获错误,比如网络不好、API地址写错,都会提示错误信息,不会让Skill直接崩溃,新手一定要加上。

步骤4:部署并测试Skill(30秒搞定)

和之前部署Skill的方法完全一样,不用额外操作:

  1. 把“quote-skill”文件夹,放到你的OpenClaw项目目录下的“skills”文件夹里(没有skills就新建一个);

  2. 重启OpenClaw会话(关闭再重新打开);

  3. 测试调用:输入“给我一句随机文案”,AI会自动调用quote-skill,返回类似这样的结果:

📝 随机文案:人生没有白走的路,每一步都算数。
✍️ 文案来源:未知

到这里,你就成功在Skill里调用了第三方API!是不是超级简单?第一次成功的时候,我特意多调用了几次,看着不同的文案弹出,成就感拉满~

四、进阶:API需要密钥(API Key)怎么办?

上面我们用的是免费公开API,不用密钥,但大部分实用API(比如高德地图、百度AI、开放天气)都需要API Key(密钥),用来验证身份,避免接口被滥用。

其实用法和免费API差不多,只是多了一步“传入密钥”,给大家一个标准写法(复制就能用),以“开放天气API”为例:

import requests

# 1. 配置API密钥和参数
API_KEY = "你的API密钥"  # 替换成你自己的密钥
city = "北京"           # 要查询的城市

# 2. API地址(带参数占位符)
api_url = "https://api.openweathermap.org/data/2.5/weather"

# 3. 传入参数(把密钥和城市名放进去)
params = {
    "q": city,          # 城市参数
    "appid": API_KEY,   # 密钥参数
    "lang": "zh_cn",    # 中文返回
    "units": "metric"   # 摄氏度
}

try:
    response = requests.get(api_url, params=params, timeout=10)
    data = response.json()
    # 提取数据并打印(根据API返回的字段调整)
    print(f"🌤️ {city} 实时天气:{data['weather'][0]['description']}")
    print(f"温度:{data['main']['temp']}℃")
except Exception as e:
    print(f"调用失败:{str(e)}")

重点提醒:API Key一定要妥善保存,不要泄露,最好不要直接写在脚本里(可以用环境变量,新手暂时先直接写,后续再优化)。

五、Skill调用API的3种常见方式(全掌握,应对所有场景)

不同的API,可能需要不同的请求方式,这里给大家总结3种最常用的方式,覆盖99%的场景,新手记好这3种,不管什么API都能搞定:

1. GET请求(最常用)

适用场景:查数据(天气、文案、热搜、快递),参数直接拼在URL里,或者用params传入,就像我们上面做的两个案例:

# 方式1:参数拼在URL里
requests.get("https://api.qinmingyu.com/api/weather?city=北京")

# 方式2:用params传入参数(更规范,推荐)
params = {"city": "北京"}
requests.get("https://api.qinmingyu.com/api/weather", params=params)

2. POST请求(提交数据)

适用场景:提交数据(比如发送消息、提交表单),参数放在请求体里,用法如下:

import requests

url = "https://xxx-api.com/submit"
data = {"name": "小明", "content": "测试内容"}  # 要提交的数据

# 发送POST请求,传入JSON格式的数据
response = requests.post(url, json=data, timeout=10)
print(response.json())

3. 请求头带Token/Key(进阶)

适用场景:部分API会要求把密钥放在请求头里,而不是参数里,用法如下:

import requests

url = "https://xxx-api.com/data"
headers = {
    "Authorization": "Bearer 你的Token",  # 替换成你的Token/Key
    "Content-Type": "application/json"
}

response = requests.get(url, headers=headers, timeout=10)
print(response.json())

六、新手必看:4个避坑要点(我踩过的坑,你别再踩)

1. 忘记安装requests库:调用API时会报错“no module named requests”,解决方法:终端输入pip install requests,重新运行即可;

2. API地址写错:一定要复制完整的API地址,注意http和https的区别,写错会提示“请求失败”;

3. 没有捕获异常:网络不稳、API失效时,Skill会直接崩溃,一定要加上try...except,让错误信息更友好;

4. 忘记print结果:AI无法读取脚本的返回值,哪怕API调用成功,也不会返回给用户,这一步是新手最容易忘的!

七、总结:Skill调用API,本质就是“3步走”

其实不管是免费API、带密钥的API,还是不同的请求方式,核心逻辑都是一样的,总结下来就是3步:

  1. 导入requests库,准备好API地址和参数(密钥);

  2. 发送请求,获取API返回的数据;

  3. 提取需要的数据,用print输出,让AI能读取。

而且一个Skill里,完全可以调用多个API——比如做一个“全能工具Skill”,同时调用天气API、文案API、笑话API,只需要在脚本里加多个函数,用参数控制切换功能,和我们之前讲的Skill功能扩展完全一致。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐