这个不是你代码逻辑本身炸了。
而是:
模型提供商返回了"空响应(Empty response)"
日志已经写得很明显:
Empty response (no content or reasoning)
意思:
模型 API 返回成功了
但 response.content 是空的
Hermes Agent 检测到:
-
没有文本
-
没有 reasoning
-
没有 tool call
于是自动 retry。
但连续 3 次都是空。
最终:
No fallback providers configured
因为你没配置备用模型。
一、最常见原因(按概率排序)
1. GLM 服务端抽风(概率最高)
你现在用的是:
model=glm-4.5-air
provider=zai
也就是:
Zhipu AI 的 GLM API。
这种情况非常常见:
-
模型超时
-
推理卡死
-
返回空 chunk
-
SSE 流中断
-
网关错误
尤其:
AIR 小模型最容易。
因为:
-
并发高
-
限流重
-
容量紧张
很多 Agent 框架都会遇到。
二、为什么"前面还好好的"
这是典型:
Provider 临时不稳定。
大模型 API 经常:
前 10 分钟正常
后面突然空响应
原因可能:
-
服务端扩容
-
限流
-
区域节点问题
-
token 峰值
-
websocket/SSE 中断
不是你本地突然坏了。
三、日志里最关键的一句
No fallback providers configured
意思:
没有备用模型。
所以:
GLM 一挂:
Agent 直接死。
四、正确做法(非常重要)
你做 Agent:
一定要配置 fallback model。
例如:
primary:
provider: zai
model: glm-4.5-air
fallbacks:
- provider: openai
model: gpt-4.1-mini
- provider: anthropic
model: claude-sonnet-4
- provider: deepseek
model: deepseek-chat
这样:
GLM 空响应
→ 自动切 DeepSeek
→ 再不行切 OpenAI
这才是生产级 Agent。
五、为什么会出现"空响应"而不是报错
因为很多 provider:
HTTP 是 200 OK
但 body 是:
{
"choices": []
}
或者:
{
"content": ""
}
框架层只能判断:
没内容
所以打印:
Empty response
六、还有一种可能:上下文炸了
如果你:
-
conversation 太长
-
tool call 太复杂
-
MCP 输出太大
-
prompt 超长
GLM 有时会:
直接 silent fail。
尤其国产模型。
表现就是:
返回空 content
不是 context overflow 明确报错。
七、Hermes Agent 为什么会 retry
因为 Hermes 里通常有:
if not content and not reasoning:
retry()
也就是:
空内容 = 失败
所以自动重试 3 次。
八、怎么判断到底是哪种问题
你可以看:
如果是偶发
重启后恢复:
99% 是 provider 抽风。
如果稳定复现
每次到某段对话都炸:
大概率 context/prompt 问题。
九、建议你现在做的事
1. 先换模型测试
先试:
-
DeepSeek
-
Qwen
-
OpenAI
-
Claude
如果正常:
说明 Hermes 没问题。
是 GLM 问题。
2. 打印原始 response(重点)
你要看:
print(raw_response)
而不是 Hermes 包装后的。
很多时候会发现:
{
"id": "...",
"choices": []
}
或者:
{
"content": null
}
3. 降低上下文长度
很多 Agent:
长期对话后:
context 会指数膨胀。
GLM 比较容易挂。
可以:
-
summary memory
-
truncate
-
sliding window
4. 检查 streaming
很多 provider:
stream 模式最容易空响应。
尤其:
-
SSE 中断
-
chunk 丢失
你可以试:
stream=False
看看还会不会。
十、国产模型很容易出现的问题
很多国产 provider:
并不像 OpenAI 那么稳定。
常见:
| 问题 | 表现 |
|---|---|
| 空 content | 最常见 |
| reasoning 缺失 | 经常 |
| tool call 格式错误 | 很多 |
| stream 中断 | 高频 |
| JSON 不合法 | 常见 |
| finish_reason 异常 | 常见 |
Agent 框架里:
fallback 是必须的。
十一、如果你是用 OpenAI SDK 兼容层
还有一个坑。
有些 provider:
虽然号称:
OpenAI-compatible
但实际:
并不完全兼容。
例如:
-
delta.content 为 null
-
tool_calls 缺字段
-
choices 为空数组
Hermes 可能没适配。
十二、一句话总结
你这个问题本质是:
GLM-4.5-air 返回了空响应,Hermes 重试 3 次后仍失败,而你没有配置 fallback provider。
最可能原因:
-
GLM 服务端临时不稳定(最高概率)
-
上下文过长导致 silent fail
-
stream 模式 chunk 丢失
-
OpenAI 兼容层不完整
-
provider 限流/风控
而不是: