上周 OpenClaw 的 Skills 生态突然爆了,掘金热榜上快三成文章都在聊这个。我本来只是想给自己的微信 Bot 接个 GLM5 玩玩,结果一头扎进去才发现坑比想象的多得多。折腾了两天,总算把 GPT-5、Claude Opus 4.6、GLM5 这几个主流模型全跑通了,今天把完整流程和踩坑记录一起写出来。

接入大模型 API 的核心步骤:安装 OpenClaw CLI → 创建 Skill 项目 → 配置 API Provider → 编写调用逻辑 → 注册到 Skills 市场。最关键的一步是 API Provider 的配置,选对方案能省掉 80% 的麻烦。

先说结论

方案 接入难度 模型覆盖 延迟表现 适合场景
各厂商官方 API 直连 高(每家鉴权不同) 单一 看运气 只用一个模型
聚合 API 平台 低(改个 base_url) 50+ 模型 约 300ms 多模型切换/Skill 开发
本地部署(Ollama) 开源模型 快但吃显卡 隐私敏感场景

我最终选了聚合 API,原因后面细说。

环境准备

首先确保开发环境就绪:

# Node.js >= 18(OpenClaw CLI 硬性要求)
node -v

# 安装 OpenClaw CLI
npm install -g @openclaw/cli@latest

# 验证安装
openclaw --version
# 输出类似:openclaw/2.3.x

然后初始化一个 Skill 项目:

openclaw skill init my-llm-skill
cd my-llm-skill

生成的目录结构:

my-llm-skill/
├── skill.yaml # Skill 元数据和配置
├── src/
│ └── index.ts # 主逻辑
├── tests/
│ └── index.test.ts
└── package.json

方案一:官方 API 直连(以 GLM5 为例)

最近 GLM5 在 OpenClaw 社区里特别火,好多人拿它接微信 Bot。直连的写法:

// src/index.ts
import { defineSkill } from '@openclaw/sdk'

const skill = defineSkill({
 name: 'glm5-chat',
 description: '基于 GLM5 的对话 Skill',
 async execute(input: { message: string }) {
 const response = await fetch('https://open.bigmodel.cn/api/paas/v4/chat/completions', {
 method: 'POST',
 headers: {
 'Content-Type': 'application/json',
 'Authorization': `Bearer ${process.env.GLM_API_KEY}`
 },
 body: JSON.stringify({
 model: 'glm-5',
 messages: [
 { role: 'system', content: '你是一个有帮助的助手' },
 { role: 'user', content: input.message }
 ]
 })
 })

 const data = await response.json()
 return { reply: data.choices[0].message.content }
 }
})

export default skill

能跑,但有个问题:如果你的 Skill 要支持多个模型让用户选,就得给每家厂商写一套鉴权逻辑。GLM 用 JWT,OpenAI 用 Bearer Token,Anthropic 又是另一套 header——光适配层就够写半天。

方案二:聚合 API 一个 base_url 搞定(推荐)

这是我最后采用的方案。用一个兼容 OpenAI 协议的聚合接口,所有模型统一调用格式,Skill 代码只写一份。

我用的是 ofox.ai,一个 AI 模型聚合平台,一个 API Key 可以调用 GPT-5、Claude Opus 4.6、GLM5、Gemini 3、DeepSeek V3 等 50+ 模型,兼容 OpenAI/Anthropic/Gemini 三大协议,支持支付宝付款,按量计费。

// src/index.ts
import { defineSkill } from '@openclaw/sdk'
import OpenAI from 'openai'

const client = new OpenAI({
 apiKey: process.env.OFOX_API_KEY,
 baseURL: 'https://api.ofox.ai/v1' // 聚合接口,一个 Key 用所有模型
})

const skill = defineSkill({
 name: 'multi-llm-chat',
 description: '支持多模型切换的对话 Skill',
 async execute(input: { message: string; model?: string }) {
 // 用户可以在 Skill 调用时指定模型,默认用 GLM5
 const modelId = input.model || 'glm-5'

 const completion = await client.chat.completions.create({
 model: modelId,
 messages: [
 { role: 'system', content: '你是一个有帮助的助手' },
 { role: 'user', content: input.message }
 ],
 stream: false
 })

 return { 
 reply: completion.choices[0].message.content,
 model_used: modelId 
 }
 }
})

export default skill

用户调用 Skill 时传 model: "gpt-5" 就用 GPT-5,传 model: "claude-opus-4.6" 就切 Claude,代码完全不用动。

用户调用 Skill

OpenClaw Runtime

你的 Skill 代码

ofox.ai 聚合网关

GPT-5

Claude Opus 4.6

GLM5

DeepSeek V3

Gemini 3

skill.yaml 配置

别忘了在 skill.yaml 里声明环境变量和输入 schema:

name: multi-llm-chat
version: 1.0.0
description: 支持 50+ 大模型切换的对话 Skill

env:
 - name: OFOX_API_KEY
 required: true
 description: 聚合 API 密钥

input:
 type: object
 properties:
 message:
 type: string
 description: 用户输入的消息
 model:
 type: string
 description: 模型标识符,如 gpt-5、claude-opus-4.6、glm-5
 default: glm-5

output:
 type: object
 properties:
 reply:
 type: string
 model_used:
 type: string

踩坑记录

说几个我实实在在踩过的坑。

坑 1:OpenClaw CLI 2.3.x 的 TypeScript 编译问题

openclaw skill build 默认用 esbuild,但如果 src/index.ts 里用了 top-level await,会直接报错。解决方案是在 skill.yaml 里加一行:

build:
 target: es2022

坑 2:Streaming 响应在 Skill 里的处理

OpenClaw 的 Skill execute 函数期望返回一个完整对象,不支持直接返回 stream。想用流式响应的话,得用 OpenClaw 的 streamExecute 方法:

const skill = defineSkill({
 name: 'stream-chat',
 async *streamExecute(input: { message: string }) {
 const stream = await client.chat.completions.create({
 model: 'gpt-5',
 messages: [{ role: 'user', content: input.message }],
 stream: true
 })

 for await (const chunk of stream) {
 const content = chunk.choices[0]?.delta?.content
 if (content) {
 yield { partial: content }
 }
 }
 }
})

注意是 async *streamExecute,带星号的生成器函数。我一开始漏了星号,debug 了快一个小时,日志里啥报错都没有,就是不出数据。

坑 3:环境变量在本地测试和发布后的差异

本地 openclaw skill test 会读 .env 文件,但发布到 Skills 市场后,环境变量要在 OpenClaw Dashboard 里配置。我第一次发布后用户反馈 500 错误,查了半天才发现是忘了在 Dashboard 里填 API Key。

坑 4:模型名称映射

不同平台对模型的命名不一样。GLM5 在智谱官方叫 glm-5,有些聚合平台可能叫 chatglm-5。建议在代码里做一个映射表,或者直接查你用的 API 平台文档里的 model 列表。

本地测试

# 设置环境变量
echo "OFOX_API_KEY=your-key-here" > .env

# 运行测试
openclaw skill test --input '{"message": "用一句话解释量子计算", "model": "glm-5"}'

测试通过后发布:

openclaw skill publish

小结

OpenClaw 的 Skills 生态确实在起势,从这两周的热度就看得出来。接入大模型 API 这件事本身不复杂:只用一个模型就直连;想做多模型切换的 Skill(2026 年了大部分 Skill 都该支持),用聚合 API 改一个 base_url 是最省事的路子。

我现在那个微信 Bot 的 Skill 已经跑了一周多,日均调用大概 2000 次,GLM5 和 GPT-5 各占一半流量,暂时没翻车。要是你也在折腾 OpenClaw Skills,踩到什么新坑欢迎评论区交流。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐