API call failed (attempt 1/3): AuthenticationError [HTTP 401]

 

 问题

Error: Error code: 401 - {'error': {'code': '401', 'message': '令牌已过期或验证不正确'}}

API call failed (attempt 1/3): AuthenticationError [HTTP 401]
   🔌 Provider: zai  Model: glm-4.5-air
   🌐 Endpoint: https://open.bigmodel.cn/api/paas/v4
   📝 Error: HTTP 401: 令牌已过期或验证不正确
   📋 Details: {'code': '401', 'message': '令牌已过期或验证不正确'}
⚠️ Non-retryable error (HTTP 401) — trying fallback...
❌ Non-retryable error (HTTP 401): HTTP 401: 令牌已过期或验证不正确
❌ Non-retryable client error (HTTP 401). Aborting.
   🔌 Provider: zai  Model: glm-4.5-air
   🌐 Endpoint: https://open.bigmodel.cn/api/paas/v4
   💡 Your API key was rejected by the provider. Check:
      • Is the key valid? Run: hermes setup
      • Does your account have access to glm-4.5-air?

 

 

image

 

🔍 问题分析

问题很明确:你的 API Key 还是没真正写入配置里,虽然 ​​hermes setup model​​​ 显示打勾了,但实际上配置文件里的 ​​providers​​ 还是空的,导致 Hermes 一直拿不到有效的 Key,才会反复报 401。

✅ 解决方案

第一步

打开配置文件

nano ~/.hermes/config.yaml

 

找到并修改这两行把原来的

providers: {}

替换成(把引号里的内容换成你智谱官网复制的完整 API Key):

providers:
  zai:
    api_key: "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

 

注意:引号要保留,Key 前后不能有空格、换行,直接粘贴官网复制的密钥

保存退出

  • 按 ​​Ctrl+O​​ 保存
  • 回车确认文件名
  • 按 ​​Ctrl+X​​ 退出编辑器

验证配置是否生效

如果能看到你写的 ​​api_key​​ 内容,就说明写入成功了。

cat ~/.hermes/config.yaml | grep -A3 providers

image

 

​grep​​ 输出能清楚看到:

  1. 第一个 ​​providers​​​ 里,你正确配置了 ​​zai​​​ 和 ​​api_key​
  2. 后面又出现了一个 ​​providers: {}​​,它会覆盖前面的配置,让 Hermes 以为没有配置任何 provider
  3. 所以 Hermes 还是拿不到有效的 API Key,一直报 401 错误
  • 打开配置文件
nano ~/.hermes/config.yaml

 

  • 删除重复的 providers: {}找到下面这段内容,把第二个 ​​providers: {}​​ 这一行直接删掉:
# 保留这个(你写了 api_key 的)
providers:
  zai:
    api_key: "0a475cXXXXXXXXXXXXXX..."

 

# 删掉下面这一整行!
providers: {}

 



还是会出现上面的错的话那我们继续第二步验证和修改

第二步

验证旧的key

curl https://open.bigmodel.cn/api/paas/v4/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer 你的旧API_KEY" \
  -d '{
    "model": "glm-4-flash",
    "messages": [{"role": "user", "content": "你好,测试一下"}]
  }'
 

 

​编辑解决步骤

1. 重新生成一个新的智谱 API Key
  1. 登录 ​​智谱开放平台​
  2. 进入「API Key 管理」页面
  3. 点击「生成新的 API Key」,复制完整的 Key(不要手动输入,直接全选复制)
2. 再次用 curl 测试新 Key

把下面命令里的 ​​你的新API_KEY​​ 替换成你刚生成的 Key,执行:

curl https://open.bigmodel.cn/api/paas/v4/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer 你的新API_KEY" \
  -d '{
    "model": "glm-4-flash",
    "messages": [{"role": "user", "content": "你好,测试一下"}]
  }'
 

 

  • 如果返回正常的对话内容,说明 Key 已经生效
  • 如果还是报错,检查账号是否完成实名认证、是否有可用额度​编辑
3. 把新 Key 写入 Hermes 配置

打开配置文件:

nano ~/.hermes/config.yaml

 

 

修改 ​​zai​​ 配置为:

providers:
  zai:
    api_key: "你的新API_KEY"

 

 

保存退出后,重启 Hermes:

hermes

 

 


💡 额外避坑点

  • 复制 Key 时,不要带任何前后空格、换行符,直接从平台复制完整内容
  • 确认你的账号没有欠费、没有被限制,新注册账号可能需要等待几分钟 Key 才会生效
  • 优先使用 ​​glm-4-flash​​ 模型测试,它是免费额度里可用的,不会因为权限问题报错

如果还是有问题

第三步

​curl​​ 测试完全正常,说明 Key 本身没问题,但 Hermes 读取配置时还是没有读到正确的 Key


🔍 问题分析

  1. 你的 ​​config.yaml​​​ 里 ​​providers​​ 配置是对的,但 Hermes 还是报 401,说明它没有正确读取这个配置
  2. 这是 Hermes 的一个常见坑:配置文件可能被其他地方覆盖了,或者你修改配置后,终端环境变量里还残留了旧的无效 Key

终极解决方案:用环境变量强制注入 Key(绕过配置文件问题)

既然配置文件方式不稳定,我们直接用环境变量启动 Hermes,强制让它使用你刚测试成功的 Key:

  1. 在终端执行下面的命令(一次性生效,直接启动 Hermes):​
ZAI_API_KEY="89efe60fXXXXXXXXXX.XXXXXXXXXXf" hermes

image

 

  1. 如果想永久生效,把 Key 写入 ​​~/.bashrc​​:
echo 'export ZAI_API_KEY="89efe60f1XXXXXXXXXXXXXXXXXX.XXXXXXXXXX"' >> ~/.bashrc
source ~/.bashrc

 

之后直接输入 ​​hermes​​ 就会自动读取这个 Key,不会再报错了。


💡 为什么配置文件会失效?

Hermes 读取配置的优先级是:​​环境变量 > 命令行参数 > config.yaml 文件​​之前你配置文件里的 Key 被其他地方(比如旧的环境变量)覆盖了,导致 Hermes 一直读到的是无效 Key。用环境变量直接注入,就可以绕过所有配置文件的问题,保证 Key 被正确读取。




微信图片_20260323111646_1_204

 

posted @ 2026-04-29 09:45  程序员食堂  阅读(924)  评论(0)    收藏  举报