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,乱码应该消失。
让这个设置永久生效(每次开终端自动执行):
- 打开 PowerShell 配置文件:
notepad $PROFILE - 在文件末尾加上:
chcp 65001 | Out-Null - 保存,重开终端
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-8 | Windows: 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 选型对比