当前位置: 首页 > news >正文

辅助压缩调用返回空响应导致 Hermes 网关崩溃 / Auxiliary compression empty response crashes Hermes gateway

辅助压缩调用返回空响应导致 Hermes 网关崩溃 / Auxiliary compression empty response crashes Hermes gateway

作者: cosmoslife
日期: 2026/04/18 14:30:00
博文链接: https://blog.csdn.net/cosmoslife

仓库: https://github.com/NousResearch/hermes-agent
创建时间: 2026-04-18 |关闭时间: 未关闭
修复 PR: 无(尚未修复)
关联 Issue: #11914(同类根因:压缩失败后静态文本注入)、#11906(空文本内容块致 HTTP 400)
关联 PR: #11929(_build_api_kwargs空文本消毒防御)


问题概述

用户使用glm-5.1通过自定义 provider(cmkey.cn/v1)运行 Hermes Agent v0.10.0,当对话触发上下文压缩时,辅助压缩模型返回空响应。Hermes 的 fallback 模型(glm-5)同样返回空。两次调用均未产生有效摘要,导致网关进入异常状态并最终崩溃。

这是一个辅助客户端 provider 兼容性 + 压缩 fallback 链脆弱性的复合问题:自定义 OpenAI 兼容端点在特定 prompt 模式下返回空 content,而压缩流程对空响应的容错不足。

复现路径

  1. 配置config.yaml:model provider=custom,base_url=https://cmkey.cn/v1,default=glm-5.1
  2. 配置 auxiliary.compression:provider=custom,model=glm-5.1,base_url=https://cmkey.cn/v1
  3. 正常对话直到上下文超过阈值(默认 85%)
  4. 压缩触发 →call_llm(task="compression")→ cmkey.cn 返回空 content
  5. fallback 到 glm-5 → 同样返回空
  6. _generate_summary返回 None → 插入静态 fallback 文本
  7. 但后续操作中空 content 累积,最终网关崩溃

根因分析

置信度: 🟡中(cmkey.cn 为第三方代理,无法直接检查其端行为;Hermes 侧的代码路径已完整追踪)

触发条件

  1. 用户配置自定义 OpenAI 兼容端点作为辅助压缩 provider
  2. 对话上下文超过压缩阈值(默认 85% context length)
  3. 自定义端点对压缩 prompt 返回content: ""content: null

执行路径追踪

对话超过阈值 ↓ context_compressor.py:compress() [L999] ↓ 检查 should_compress() ↓ 分离 head/middle/tail 消息 ↓ context_compressor.py:_generate_summary() [L551] ↓ 构建 summary prompt(~670行结构化 prompt) ↓ 调用 call_llm(task="compression", ...) ↓ auxiliary_client.py:call_llm() [L2410] ↓ _resolve_task_provider_model() 解析 provider/model ↓ _get_cached_client() 获取 OpenAI client ↓ client.chat.completions.create(**kwargs) ↓ *** cmkey.cn 返回 response,但 choices[0].message.content = "" 或 null *** ↓ context_compressor.py:_generate_summary() [L700-704] ↓ content = response.choices[0].message.content ← 空字符串或 None ↓ summary = content.strip() ← 空字符串 ↓ return self._with_summary_prefix(summary) ← 只返回 SUMMARY_PREFIX ↓ context_compressor.py:compress() [L1088-1096] ↓ if not summary: ← 空字符串被视为 falsy ↓ 插入静态 fallback 文本 ↓ 后续轮次:网关累积异常状态 → 崩溃

代码位置

角色文件函数/模块关键行
压缩入口agent/context_compressor.pycompress()L999
摘要生成agent/context_compressor.py_generate_summary()L551
LLM 调用agent/auxiliary_client.pycall_llm()L2410
响应验证agent/auxiliary_client.py_validate_llm_response()L2379
静态 fallbackagent/context_compressor.pycompress()L1088
空文本消毒run_agent.py_build_api_kwargs()(PR #11929)

缺陷本质

问题出在三层防御的缺口

缺口 1:_generate_summary不区分"空摘要"和"调用失败"

# agent/context_compressor.py:L700-704content=response.choices[0].message.contentifnotisinstance(content,str):content=str(content)ifcontentelse""summary=content.strip()

content为空字符串时,summary = "",函数返回_with_summary_prefix(""),结果为只有前缀的空摘要。但调用者compress()中:

# agent/context_compressor.py:L1088ifnotsummary:# 插入静态 fallback

空摘要被正确识别为 falsy 并触发 fallback。但问题在于:如果自定义端点返回的不是空字符串,而是" "(空白)或某个无意义的短字符串(如"ok"),summary会被视为 truthy,一个无用的"摘要"会被注入到上下文中,后续对话质量严重下降。

缺口 2:fallback 模型使用同一 provider

# agent/context_compressor.py:L736-742if_is_model_not_foundandself.summary_modelandself.summary_model!=self.model:self._summary_model_fallen_back=True
http://www.jsqmd.com/news/664774/

相关文章:

  • PyTorch 2.9镜像实战案例:图像分类任务快速跑通全流程
  • 3分钟搞定Windows PDF处理:Poppler预编译二进制包终极指南
  • 第 27 课:任务页分页大小记忆与用户偏好
  • BepInEx终极指南:3步快速掌握Unity游戏模组开发框架
  • XUnity.AutoTranslator 终极指南:如何为Unity游戏实现自动翻译
  • 快速上手:使用ComfyUI可视化工作流调用BERT文本分割模型
  • YOLO12可解释性:Grad-CAM热力图+Attention Map双视角可视化
  • 第 28 课:任务页排序偏好与默认工作视图
  • 如何快速部署HsMod:炉石传说55项功能增强完整指南
  • VMware虚拟机安装教程(附安装win11系统教学)
  • 智能代码生成兼容性验证实战手册(2024企业级落地白皮书)
  • AI抠图新选择:cv_unet图像抠图WebUI对比传统工具,实测效果大揭秘
  • 哪家减肥塑形品牌专业?2026年4月推荐评测口碑对比TOP5产品知名社交聚餐后饮食调整 - 品牌推荐
  • JavaScript中对象属性名字符串化与Symbol键名处理
  • 2025-2026年中国商标律所推荐:五家口碑服务评测对比领先初创企业品牌保护咨询 - 品牌推荐
  • PostgreSQL 16 单虚拟机主从搭建测试(学习记录)
  • Makefile隐含规则:让你少写一半代码的‘偷懒’技巧,从自动推导.o文件说起
  • Kali Linux 虚拟机安装与初始化全攻略
  • 从“文件发不出去“到全员高效协作:一家设计院文档管理变革纪实
  • 如何识别兰州服务可靠的不锈钢灰供应商?白刚玉/磨料/棕刚玉/碳化硅/铬刚玉/不锈钢灰/金刚砂,不锈钢灰厂家哪个好 - 品牌推荐师
  • GPT-SoVITS开箱即用:无需代码,快速体验5秒声音复刻
  • all-MiniLM-L6-v2开发者指南:构建个性化推荐系统的嵌入服务
  • SQL窗口函数解决多维排名问题_组合排序实战
  • 如何选择中国商标律所?2026年4月推荐评测口碑对比知名品牌维权诉讼证据链难题 - 品牌推荐
  • 如何选择减肥塑形品牌?2026年4月推荐评测口碑对比五大产品领先熬夜族调整三餐 - 品牌推荐
  • Stable Yogi 模型Visio流程图绘制:AI应用系统架构设计与部署流程可视化
  • 战略视角:Unity游戏自动翻译插件架构设计与企业级部署实践
  • 开源大模型落地零售业:Ostrakon-VL-8B像素终端部署全流程
  • 3D Face HRN模型安全考量:人脸数据隐私保护方案
  • 攻克TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的四种实战策略