昨天给 domainbroker 这个 profile 换了 model 后,一直提示:
Error code: 401 - {'error': {'code': '', 'message': '无效的令牌', 'type': 'AgnesAI_error'}}
排查过程
- 第一步:把 API key 从
sk-2xN...UXZy更新为新 keysk-ZOs...3n8o,gateway 仍然 401。 - 第二步:检查 config.yaml 结构,发现
custom_providers里还有一个独立的api_key字段,之前没改这里。 - 第三步:domainbroker 的
model.provider: custom让它走custom_providers里的 provider 注册表,不走model.api_key。旧 key 卡在custom_providers → agnes → api_key里,从未更新。 - 第四步:把
custom_providers中name: agnes的api_key也更新为新 key,gateway 立即恢复正常。
根因
改了 model.api_key 只改了一半。custom_providers 里的 provider key 是独立的,不会跟着 model.api_key 同步更新。
教训
用 model.provider: custom 时,必须同时更新两个地方:
1. model.api_key
2. custom_providers → {provider_name} → api_key
两个地方必须一致,缺一不可。
Model 切换
切换完成后又遇到了新的问题 — pubmotto 的 model 原来是 deepseek-v4-flash,需要换成 agnes-2.0-flash。切换后同样出现了 401 错误。
这次排查后发现 pubmotto 的 config.yaml 里 model.api_key 被截断为 13 字符的占位符 sk-ZOs...3n8o,而完整 key 应该是 51 字符。这是因为 yaml.dump 写入时被截断了。用 Python 重新写入完整 key 后,gateway 恢复。
教训
所有使用 model.provider: custom 的 profile,更新 API key 时都必须注意:
model.api_key可能被yaml.dump截断(51 字符 key 变成 13 字符),必须验证实际写入的字节数- 如果有
custom_providers块,其中的 provider api_key 也必须同步更新 - 使用 Python 直接写入文件内容(而非 yaml.dump),确保 key 完整

