🐛 问题现象
在使用 OpenClaw 可视化界面(Chat 界面)与 GLM 大模型进行对话时,系统弹出错误提示,无法正常进行推理调用。
错误信息 OpenClaw requires working inference: No API key found for provider "glm". Auth store: C:\Users\***.openclaw\agents\main\agent\openclaw-agent.sqlite (agentDir: C:\Users\***.openclaw\agents\main\agent). Configure an API key (openclaw models auth paste-api-key --provider glm; add --agent <id> for a non‑default agent) or copy only portable static auth profiles from the main agentDir.
尽管已经在 .env 文件中配置了 ZAI_API_KEY,系统仍然提示找不到 glm provider 的 API Key。
🔍 问题原因分析
经过对 OpenClaw 配置文件的详细排查,发现问题出在 API Key 的存储位置与读取方式不匹配 上。
1. 配置结构分析
OpenClaw 的主配置文件 openclaw.json 中,自定义了一个名为 glm 的 provider:
"providers": {
"glm": {
"baseUrl": "[https://open.bigmodel.cn/api/paas/v4](https://open.bigmodel.cn/api/paas/v4)",
"api": "openai‑completions",
"models": [
{ "id": "glm‑4.5‑air", "name": "glm‑4.5‑air" },
{ "id": "glm‑5.3‑flash", "name": "glm‑5.3‑flash" }
]
}
}
2. 关键发现:两种认证机制
OpenClaw 实际上存在两套 API Key 存储机制:
A. 环境变量方式 .env 文件中的 ZAI_API_KEY → 系统内置的 zai provider 使用
B. Agent 认证存储方式 SQLite 数据库 (openclaw‑agent.sqlite) → 自定义 provider(如 glm)使用
核心问题 当使用 自定义 provider 名称(如
glm)时,OpenClaw 不会自动从环境变量中读取对应的 API Key,而是要求通过 CLI 命令将密钥显式保存到 Agent 的 SQLite 认证存储中。
3. 环境变量命名陷阱
虽然 .env 中配置了 ZAI_API_KEY,但系统内置的 zai provider 与自定义的 glm provider 是两个不同的配置体系。对于自定义 provider,OpenClaw 默认会按照 {PROVIDER_NAME}_API_KEY 的规则查找环境变量,即期望找到 GLM_API_KEY 而非 ZAI_API_KEY。
| 配置项 | 值 | 说明 |
|---|---|---|
| Provider 名称 | glm | 用户自定义,非系统内置 |
| 环境变量名 | ZAI_API_KEY | 与 provider 名不匹配,无法被 glm provider 识别 |
| 期望的环境变量名 | GLM_API_KEY | 或需通过 CLI 存入 SQLite |
| 实际读取位置 | openclaw‑agent.sqlite | Agent 级认证存储 |
✅ 解决方法
解决该问题的核心思路是:将 API Key 通过 OpenClaw CLI 正确写入到 glm provider 的认证存储中。
步骤一:确认 openclaw 命令可用
where.exe openclaw
输出示例:
C:\Users\***\AppData\Roaming\npm\openclaw
C:\Users\***\AppData\Roaming\npm\openclaw.cmd
步骤二:使用 paste‑api‑key 命令写入密钥
这是最关键的一步。使用 OpenClaw 提供的 models auth paste‑api‑key 命令,将 API Key 保存到 glm provider 的认证配置中:
# PowerShell 方式
$apiKey = "your‑api‑key‑here"
$apiKey | openclaw.cmd models auth paste‑api‑key --provider glm
成功输出 Auth profile: glm:manual (glm/api_key)
步骤三:验证配置
配置完成后,可以查看已保存的认证配置列表:
openclaw.cmd models auth list
注意:如果 Gateway 正在运行,可能会提示需要独占状态所有权。此时需要先停止 Gateway,或在非运行时查看。
步骤四:重启 OpenClaw 并测试
完成上述配置后,重新打开 OpenClaw 可视化界面,进入 Chat 界面即可正常与 GLM 模型对话。
💡 经验总结与建议
1. 内置 Provider vs 自定义 Provider
- 内置 Provider(如
zai、openai、anthropic):通常支持从环境变量直接读取 API Key - 自定义 Provider(如本文的
glm):需要通过 CLI 命令显式配置认证信息到 Agent 的 SQLite 存储中
2. 推荐配置方式
对于智谱AI(GLM)模型,建议采用以下任一方式:
方案 A:使用内置 zai provider(推荐) OpenClaw 内置了
zaiprovider,与智谱AI的 Z.AI 平台对应。直接使用内置 provider 可以省去很多配置麻烦,且环境变量ZAI_API_KEY能被自动识别。
方案 B:使用自定义 glm provider 如果确实需要自定义 provider 名称(如区分不同环境),务必通过
openclaw models auth paste‑api‑key --provider glm命令配置密钥,而不是仅依赖环境变量。
3. 排错检查清单
- ✓ 确认
openclaw.json中的 provider 名称与 API Key 配置方式匹配 - ✓ 检查环境变量名是否符合
{PROVIDER_NAME}_API_KEY规则 - ✓ 对于自定义 provider,使用
openclaw models auth paste‑api‑key显式配置 - ✓ 确认模型 ID 在智谱AI平台真实存在(如 glm‑4.5‑air、glm‑5.3‑flash 等)
- ✓ 配置完成后重启 Gateway 或 OpenClaw 客户端
4. 相关配置文件位置
| 文件 | 路径 | 作用 |
|---|---|---|
| 主配置 | ~/.openclaw/openclaw.json | 定义 provider、模型列表、默认模型等 |
| 环境变量 | ~/.openclaw/.env | 存储 API Key(适用于内置 provider) |
| 认证存储 | ~/.openclaw/agents/main/agent/openclaw‑agent.sqlite | Agent 级认证信息(适用于自定义 provider) |
最终效果 通过
openclaw models auth paste‑api‑key --provider glm命令成功配置 API Key 后,OpenClaw Chat 界面恢复正常,可以顺畅地与 GLM 大模型进行对话。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/Aman1984/article/details/81395445





