使用 SOUL.md 与 Hermes
SOUL.md 是你 Hermes 实例的主要身份标识。它是系统提示(system prompt)中的第一部分——它定义了代理人是谁、它如何说话,以及它应该避免什么。
如果你希望每次与 Hermes 对话时,它都感觉像同一个助手——或者如果你想用自己的风格完全取代 Hermes 的原有人设——那么这个文件就是为你准备的。
SOUL.md 的用途
使用 SOUL.md 来定义:
- 语调(tone)
- 个性(personality)
- 沟通风格(communication style)
- Hermes 应该有多直接或多热情
- Hermes 在风格上应该避免什么
- Hermes 如何对待不确定性、分歧和模糊性
简而言之:
SOUL.md关注的是 Hermes 是谁,以及 Hermes 如何说话。
SOUL.md 不适用的场景
不要用它来定义:
- 仓库特定的编码规范
- 文件路径
- 命令
- 服务端口
- 架构说明
- 项目工作流程指令
这些内容应该放入 AGENTS.md。
一个好的规则是:
- 如果某项规则应该普遍适用,就放入
SOUL.md - 如果某项规则只属于一个项目,就放入
AGENTS.md
文件位置
Hermes 现在只使用全局的 SOUL 文件来处理当前实例:
~/.hermes/SOUL.md
如果你使用自定义的家目录运行 Hermes,则路径为:
$HERMES_HOME/SOUL.md
首次运行行为
如果不存在 SOUL.md,Hermes 会自动为你生成一个起始的 SOUL.md 文件。
这意味着大多数用户现在都可以从一个真实的文件开始阅读和编辑。
重要提示:
- 如果你已经有了
SOUL.md,Hermes 不会覆盖它。 - 如果文件存在但内容为空,Hermes 也不会向提示中添加任何内容。
Hermes 如何使用它
当 Hermes 开始一个会话时,它会从 HERMES_HOME 读取 SOUL.md,扫描其中是否存在提示注入模式(prompt-injection patterns),如果需要,它会截断文件内容,并将其用作代理身份——即系统提示中的第 1 个槽位。这意味着 SOUL.md 完全取代了内置的默认身份文本。
如果 SOUL.md 缺失、为空或无法加载,Hermes 将回退到内置的默认身份。
文件周围不会添加任何包装语言。内容本身才是关键——写下你希望你的代理人思考和说话的方式。
第一次编辑建议
如果只做一件事,请打开该文件,修改几行,让它符合你的风格。
例如:
你是一个直接、冷静、技术精确的人。
比起客套话,更看重实质内容。
当一个想法薄弱时,要明确指出。
除非需要更深入的细节,否则保持答案简洁。
仅仅这样修改,就能明显改变 Hermes 的感觉。
示例风格
1. 务实工程师
你是一位务实的资深工程师。
你更关心正确性和实际操作性,而不是听起来有多厉害。
## 风格
- 直接明了
- 除非复杂性需要深入,否则保持简洁
- 认为某事是坏主意时要说出来
- 倾向于实际的权衡取舍,而非理想化的抽象
## 避免
- 奉承
- 夸大其词的语言
- 对显而易见的事情过度解释
2. 研究伙伴
你是一位深思熟虑的研究合作者。
你充满好奇心,对不确定性坦诚,并对新奇的想法感到兴奋。
## 风格
- 在不假装确定性的前提下探索可能性
- 区分推测和证据
- 当想法空间不够明确时,提出澄清性问题
- 倾向于概念深度而非肤浅的完整性
3. 导师/解释者
你是一位耐心、专业的老师。
你关心的是理解,而不是表现。
## 风格
- 解释清晰
- 当有帮助时,使用例子
- 除非用户明确指出,否则不要假设用户有先验知识
- 从直觉构建到细节
4. 严厉审阅者
你是一位严谨的审阅者。
你公平,但不会对重要的批评进行软化。
## 风格
- 直接指出薄弱的假设
- 将正确性置于和谐之上
- 明确指出风险和权衡取舍
- 倾向于直白的清晰度,而非模糊的外交辞令
什么样的 SOUL.md 强大?
一个强大的 SOUL.md 是:
- 稳定的
- 适用范围广的
- 风格上具体的
- 没有被临时的指令过度充载的
一个薄弱的 SOUL.md 是:
- 充满了项目细节的
- 自相矛盾的
- 试图微观管理每一次回复的形态的
- 大部分是“乐于助人”和“清晰”这类通用填充词
Hermes 本身已经会努力乐于助人且清晰。SOUL.md 应该增加真正的个性化和风格,而不是重复明显的默认设置。
建议结构
你不需要使用标题,但它们会有帮助。
一个效果很好的简单结构是:
# 身份
Hermes 是谁。
# 风格
Hermes 应该听起来如何。
# 避免
Hermes 不应该做什么。
# 默认值
当出现模糊性时,Hermes 应该如何行为。
SOUL.md 与 /personality 的区别
它们是互补的。
使用 SOUL.md 来定义你的持久基线。
使用 /personality 来进行临时的模式切换。
示例:
- 你的默认 SOUL 是务实且直接的
- 然后在一个会话中使用
/personality teacher - 之后你切换回来,而无需更改你的基础语调文件
SOUL.md 与 AGENTS.md 的区别
这是最常见的错误。
将此放入 SOUL.md
- “要直接。”
- “避免夸大其词的语言。”
- “除非深度有帮助,否则倾向于简短的回答。”
- “当用户错误时要提出异议。”
将此放入 AGENTS.md
- “使用 pytest,而不是 unittest。”
- “前端代码放在
frontend/目录下。” - “绝不直接编辑迁移文件。”
- “API 运行在 8000 端口。”
如何编辑它
nano ~/.hermes/SOUL.md
或
vim ~/.hermes/SOUL.md
然后重启 Hermes 或开始一个新的会话。
实用工作流程
- 从已生成的默认文件开始
- 删掉任何不符合你期望语调的内容
- 添加 4-8 行,明确定义语调和默认行为
- 与 Hermes 聊一会儿
- 根据感觉不自然的地方进行调整
这种迭代的方法,比试图一次性设计出完美的个性,效果更好。
故障排除
我编辑了 SOUL.md 但 Hermes 听起来还是老样子
检查:
- 你是否编辑了
~/.hermes/SOUL.md或$HERMES_HOME/SOUL.md - 而不是某个本地的
SOUL.md - 文件内容是否为空
- 你的会话是否在编辑后重启了
- 是否有
/personality的覆盖层在主导结果
Hermes 忽略了我 SOUL.md 的部分内容
可能的原因:
- 优先级更高的指令正在覆盖它
- 文件包含相互冲突的指导
- 文件太长,被截断了
- 文件中的某些文本类似于提示注入内容,可能被扫描器阻止或修改
我的 SOUL.md 变得过于项目特定
将项目指令移动到 AGENTS.md,保持 SOUL.md 专注于身份和风格。