空白响应或乱码源于编码错位或工具调用异常,需依次检查终端UTF-8支持、禁用streaming、重置tool_calls缓冲区、替换为surrogateescape容错解析器,并校验SOUL.md无BOM及非法控制字符。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您向 Hermes Agent 发出指令,AI 却返回空白响应或乱码字符(如□、、等不可读符号),这通常不是网络中断所致,而是模型输出解析阶段发生编码错位或终端渲染异常。以下是解决此问题的步骤:
一、检查终端 UTF-8 支持与强制解析编码
Hermes Agent 在接收大模型原始响应后,需经 UTF-8 解码并过滤控制字符;若模型返回含 BOM 头或混合编码(如 GBK 片段混入 UTF-8 流),终端将无法正确渲染,表现为全空或大量方块乱码。该问题在使用本地 Ollama 模型(如 llama3:8b)且未显式指定 encoding 参数时尤为常见。
1、确认终端支持 UTF-8 编码:在 Linux/macOS 中执行 locale | grep UTF,输出应包含 UTF-8;Windows PowerShell 用户需运行 chcp 65001 切换至 UTF-8 代码页。
2、强制 Hermes Agent 使用严格 UTF-8 解析:编辑 ~/.hermes/config.yaml,在 llm 节点下添加字段:encoding: "utf-8"。
3、重启 Hermes Agent 进程,避免缓存残留影响验证结果。
二、禁用流式响应(streaming)以规避截断解码失败
当启用 streaming 模式时,Hermes Agent 会逐 chunk 接收并拼接模型响应;若某次 chunk 包含不完整 Unicode 码点(如仅收到 UTF-8 多字节字符的前两个字节),后续解码即失败,导致整段输出被丢弃或替换为 。关闭流式传输可规避该类截断风险,适用于 OpenRouter 或本地 Ollama 接口。
1、打开 ~/.hermes/config.yaml 文件。
2、定位到 llm 配置块,在其子项中查找 stream 字段。
3、将该字段值设为 false;若不存在,则手动添加:stream: false。
4、保存文件并重新启动 Hermes Agent。
三、重置 tool_calls 缓冲区与轨迹缓存
Hermes Agent 内部维护一个 tool_calls 响应缓冲区,用于暂存浏览器快照、文件写入等操作的原始返回内容。若某次 browser_snapshot 返回超长 HTML(含大量未转义 Unicode 实体),而缓冲区未做预清理,后续 decode 步骤可能因内存越界触发静默截断,最终导致主响应为空。该现象在处理多语言网页(如含日文、阿拉伯文)时高频复现。
1、进入 Hermes Agent 安装目录,执行:rm -f ~/.hermes/cache/tool_buffer_*.bin。
2、清空当前会话轨迹缓存:rm -f ~/.hermes/trajectories/*.jsonl。
3、在启动命令中加入环境变量强制刷新上下文:HERMES_RESET_TOOL_BUFFER=1 hermes start。
四、替换响应解析器为 surrogateescape 容错模式
默认 UTF-8 解码器在遇到非法字节序列时直接抛出异常并中断解析,导致响应截断为空;启用 surrogateescape 错误处理策略,可将非法字节映射为 Unicode 替代字符(U+DCxx),保留原始字节语义,使后续渲染仍可识别为可读文本或交由前端进一步过滤。
1、编辑 ~/.hermes/config.yaml,在 llm 节点下添加:decode_error_strategy: "surrogateescape"。
2、确保该字段与 encoding: "utf-8" 同时存在,否则策略不生效。
3、重启 Hermes Agent 并测试含特殊符号的响应(如含 emoji 或日文网页摘要)是否正常显示。
五、校验 SOUL.md 与技能文件无 BOM 及非法控制字符
SOUL.md 与自定义 Skill 文件若含 Windows 引入的 UTF-8 BOM(EF BB BF)或零宽空格(U+200B)、不间断空格(U+00A0)等不可见控制字符,会在拼入系统提示词时污染整个响应流,引发底层 tokenizer 解析异常,最终表现为乱码或截断。
1、检查 SOUL.md 编码与结构:file -i ~/.hermes/SOUL.md,确认输出含 charset=utf-8 且无 with bom 字样。
2、删除 BOM 头(若存在):用 vim 打开文件,执行 :set nobomb | wq。
3、扫描并清除隐藏字符:grep -n $'\u200b\|\u00a0' ~/.hermes/SOUL.md,对匹配行手动删除对应字符。


















