跳到主要内容

使用 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 或开始一个新的会话。

实用工作流程

  1. 从已生成的默认文件开始
  2. 删掉任何不符合你期望语调的内容
  3. 添加 4-8 行,明确定义语调和默认行为
  4. 与 Hermes 聊一会儿
  5. 根据感觉不自然的地方进行调整

这种迭代的方法,比试图一次性设计出完美的个性,效果更好。

故障排除

我编辑了 SOUL.md 但 Hermes 听起来还是老样子

检查:

  • 你是否编辑了 ~/.hermes/SOUL.md$HERMES_HOME/SOUL.md
  • 而不是某个本地的 SOUL.md
  • 文件内容是否为空
  • 你的会话是否在编辑后重启了
  • 是否有 /personality 的覆盖层在主导结果

Hermes 忽略了我 SOUL.md 的部分内容

可能的原因:

  • 优先级更高的指令正在覆盖它
  • 文件包含相互冲突的指导
  • 文件太长,被截断了
  • 文件中的某些文本类似于提示注入内容,可能被扫描器阻止或修改

我的 SOUL.md 变得过于项目特定

将项目指令移动到 AGENTS.md,保持 SOUL.md 专注于身份和风格。

相关文档