Hermes Agent 突然开始用英文回复,或者返回一堆看不懂的乱码。

你什么都没改,昨天还好好的,今天就不对了。

这篇文章把这两种症状分开处理——它们的原因完全不同,修法也不同。


先判断你遇到的是哪种故障

语言不对:Hermes 的回复本身是正常文字,但是用了错误的语言——比如你发中文,它回英文;或者明明配置了中文,它偶尔夹杂一段英文进来。

乱码:回复内容是无法识别的字符,比如 ??????????锟斤拷 、或者一堆菱形方块。这不是语言问题,是字符编码出了问题。

两种症状对应完全不同的原因,看症状直接跳到对应章节。


语言不对:Agent 回了错误的语言

原因:没有明确告诉 Agent 你要用什么语言

Hermes Agent 默认会根据你的输入语言来猜测回复语言,但这个猜测并不可靠——尤其是当你问的问题包含大量英文术语、或者工具返回的结果是英文时,模型很容易「被带跑」,开始用英文回复。

根本解决办法是在 Agent 的身份文件里直接写死语言偏好。

修法一:编辑 SOUL.md(推荐)

~/.hermes/SOUL.md 是 Hermes Agent 的身份文件,相当于 Agent 的「人格设定」,优先级最高。这里写的内容会在每次会话开始时自动注入。

打开这个文件:

nano ~/.hermes/SOUL.md
# 或者
code ~/.hermes/SOUL.md

在文件开头加上这几行(如果文件不存在,直接创建):

## 语言设置

无论用户输入什么语言,你都必须用**简体中文**回复。
只有当用户明确说「请用英文回答」或「please reply in English」时,才切换到英文。
工具调用返回的英文内容,请翻译成中文后再呈现给用户。

保存后重启 Gateway:

hermes gateway stop
hermes gateway start

发一条消息测试:发英文,看看 Agent 是否坚持用中文回复。


修法二:编辑 USER.md 设置语言偏好

~/.hermes/USER.md 是用户画像文件,Agent 会在回复前参考它来了解你的偏好。

nano ~/.hermes/USER.md

加入:

## 基本信息
- 语言偏好:简体中文
- 如无特殊说明,所有回复请用中文

## 沟通风格
- 简洁直接,不要绕弯子
- 专业术语可以保留英文,但解释和正文用中文

USER.md 的优先级略低于 SOUL.md,但对于语言偏好来说效果相同。如果两个文件都设置了,会叠加生效。


修法三:在当前对话里临时纠正

如果只是偶发的一次语言不对,不需要改配置,直接在对话里纠正:

请用中文回复,之后的所有回复都请保持中文

但注意这只对当前会话有效。如果你 /clear 或者开了新会话,又要重新说一次。要永久生效,还是用修法一或修法二。


特殊情况:工具调用结果触发语言切换

这是最常见的「语言突然变」场景:你让 Agent 访问了一个英文网页,它抓回来一大段英文内容,然后开始用英文回复。

解决方法:在 SOUL.md 里加上处理工具结果的语言指令(见修法一的模板),同时也可以在单次对话里加约束:

你等会儿可能会抓到英文内容,不管来源是什么语言,回复给我的部分请用中文

乱码:回复显示无法识别的字符

Windows 用户:终端编码问题

在 Windows 上用命令行运行 Hermes Agent TUI 时,最常见的乱码原因是终端的默认编码不是 UTF-8。

立刻执行

chcp 65001

这条命令把当前终端切换到 UTF-8 编码。执行后重新启动 Hermes TUI,乱码应该消失。

让这个设置永久生效(每次开终端自动执行):

  1. 打开 PowerShell 配置文件:
    notepad $PROFILE
    
  2. 在文件末尾加上:
    chcp 65001 | Out-Null
    
  3. 保存,重开终端

Linux / macOS:Locale 环境变量问题

echo $LANG

如果输出不是 zh_CN.UTF-8 或者 en_US.UTF-8(带 UTF-8 的都行),需要设置:

# 在 ~/.bashrc 或 ~/.zshrc 末尾加上
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

保存后:

source ~/.bashrc   # 或 source ~/.zshrc

Python 环境编码问题

如果上面两步都做了还有乱码,可能是 Python 进程本身的编码问题:

# 启动 Hermes 时加上这个环境变量
PYTHONIOENCODING=utf-8 hermes tui

要永久生效:

# 在 ~/.bashrc 末尾加
export PYTHONIOENCODING=utf-8

Telegram Bot 乱码

如果是通过 Telegram Bot 收到乱码,原因通常不是编码,而是 Markdown 格式渲染失败——Hermes 返回了包含特殊字符的 Markdown,Telegram 解析失败就显示成奇怪的符号。

检查方法:在配置里临时关闭 Markdown 渲染:

# ~/.hermes/config.yaml
platforms:
  telegram:
    parse_mode: "plain"   # 改成纯文本,不渲染 Markdown

重启 Gateway 后如果乱码消失,说明是 Markdown 格式冲突。后续可以改成 parse_mode: "html" 用 HTML 格式替代 Markdown,兼容性更好。


快速对照:看症状选修法

症状最可能的原因修法
Agent 用英文回复SOUL.md 没有语言设置编辑 SOUL.md 加语言指令
偶尔夹杂英文工具返回了英文内容SOUL.md 加工具结果翻译指令
开新会话就变语言USER.md 没有语言偏好编辑 USER.md 加语言偏好
TUI 里显示乱码终端编码不是 UTF-8Windows: chcp 65001 / Linux: 设置 LANG
Telegram 收到乱码Markdown 格式冲突配置改为 parse_mode: "html"
所有地方都乱码Python 环境编码设置 PYTHONIOENCODING=utf-8

验证修好了没有

语言问题的验证:

What is the capital of France?

用英文问,如果 Agent 用中文回复「法国的首都是巴黎」,说明语言锁定成功。

乱码问题的验证:

帮我写一段包含中文、英文和特殊符号(!@#¥%……&*)的测试文字

返回内容能正常显示就说明编码问题解决了。


「Agent 急救手册」系列,收录 Hermes Agent 最高频故障的排查方法。
上一篇:Agent 一直转圈不回复:5 个原因逐一排查
下一步:如果 Agent 能正常回复中文但内容质量不满意,考虑换个更适合的底座模型:DeepSeek vs Qwen3 vs Kimi K2.6 选型对比