跳到主要内容

人格与 SOUL.md

Hermes Agent 的人格是完全可自定义的。SOUL.md主身份文件,会作为系统提示中的第一部分,用来定义这个智能体“是谁”。

  • SOUL.md:保存在 HERMES_HOME 中的持久人格文件,作为智能体身份(系统提示第 1 槽位)
  • 内置或自定义 /personality 预设:按会话叠加的系统提示覆盖层

如果你想改变 Hermes 是谁,甚至将其替换成一个完全不同的人格,就去编辑 SOUL.md

现在的 SOUL.md 工作方式

Hermes 会自动在以下位置生成一个默认 SOUL.md

~/.hermes/SOUL.md

更准确地说,它使用的是当前实例的 HERMES_HOME,因此如果你指定了自定义 home,就会使用:

$HERMES_HOME/SOUL.md

关键行为

  • SOUL.md 是智能体的主身份。 它占据系统提示中的第 1 槽位,替代硬编码默认身份。
  • 如果文件尚不存在,Hermes 会自动生成一个起始版 SOUL.md
  • 已有的用户 SOUL.md 永远不会被覆盖
  • Hermes 只会从 HERMES_HOME 加载 SOUL.md
  • Hermes 不会去当前工作目录寻找 SOUL.md
  • 如果 SOUL.md 存在但为空,或无法加载,Hermes 会回退到内置默认身份
  • 如果 SOUL.md 有内容,内容会在经过安全扫描与截断后原样注入
  • SOUL.md 不会重复出现在上下文文件区块中,它只会作为身份内容出现一次

这让 SOUL.md 成为真正按用户或实例生效的身份层,而不是普通的附加提示层。

为什么这么设计

这样可以让人格保持稳定、可预测。

如果 Hermes 会从你启动它的任意目录里加载 SOUL.md,那么人格就可能随着项目切换而意外改变。而只从 HERMES_HOME 加载时,人格就归属于 Hermes 实例本身。

这也更容易向用户解释:

  • “编辑 ~/.hermes/SOUL.md 就能修改 Hermes 的默认人格。”

应该在哪里编辑

对大多数用户来说:

~/.hermes/SOUL.md

如果你使用自定义 home:

$HERMES_HOME/SOUL.md

SOUL.md 里应该写什么?

适合放入持久的人格与表达风格指导,例如:

  • 语气
  • 沟通风格
  • 直接程度
  • 默认互动方式
  • 希望避免的表达方式
  • Hermes 应如何处理不确定性、分歧和模糊情况

不太适合放入:

  • 一次性的项目说明
  • 文件路径
  • 仓库约定
  • 临时工作流细节

这些应写在 AGENTS.md 中,而不是 SOUL.md

好的 SOUL.md 内容

一个好的 SOUL 文件通常应当:

  • 跨上下文稳定有效
  • 足够宽泛,能适用于很多对话场景
  • 又足够具体,能明显影响说话风格
  • 聚焦在沟通与身份,而不是任务级指令

示例

# Personality

You are a pragmatic senior engineer with strong taste.
You optimize for truth, clarity, and usefulness over politeness theater.

## Style
- Be direct without being cold
- Prefer substance over filler
- Push back when something is a bad idea
- Admit uncertainty plainly
- Keep explanations compact unless depth is useful

## What to avoid
- Sycophancy
- Hype language
- Repeating the user's framing if it's wrong
- Overexplaining obvious things

## Technical posture
- Prefer simple systems over clever systems
- Care about operational reality, not idealized architecture
- Treat edge cases as part of the design, not cleanup

Hermes 会如何注入提示

SOUL.md 内容会直接进入系统提示的第 1 槽位,也就是智能体身份位置,不会额外包裹任何说明文字。

在注入前,内容会经过:

  • prompt injection 扫描
  • 超长时的截断处理

如果文件为空、只有空白、或无法读取,Hermes 会回退到内置默认身份(“You are Hermes Agent, an intelligent AI assistant created by Nous Research...”)。当设置了 skip_context_files(例如在子智能体 / delegation 场景中)时,也会使用这一回退逻辑。

安全扫描

SOUL.md 与其他上下文文件一样,在纳入提示前会做 prompt injection 扫描。

这意味着你仍应让它专注于人格与表达,而不是试图塞入奇怪的元指令。

SOUL.md 与 AGENTS.md 的区别

这是最重要的区分之一。

SOUL.md

适合存放:

  • 身份
  • 语气
  • 风格
  • 默认沟通方式
  • 人格层行为偏好

AGENTS.md

适合存放:

  • 项目架构
  • 编码约定
  • 工具偏好
  • 仓库专属工作流
  • 命令、端口、路径、部署说明

一个简单的判断规则是:

  • 如果它应该在所有项目中都跟着你走,就放进 SOUL.md
  • 如果它只属于某个项目,就放进 AGENTS.md

SOUL.md 与 /personality

SOUL.md 是你长期稳定的默认人格。

/personality 是会话级覆盖层,用来临时改变或补充当前系统提示。

所以:

  • SOUL.md = 基线声音
  • /personality = 临时模式切换

例如:

  • 保持一个务实的默认 SOUL,然后在教学场景下用 /personality teacher
  • 保持一个简洁 SOUL,然后在头脑风暴时用 /personality creative

内置人格

Hermes 自带了一组可通过 /personality 切换的内置人格。

名称说明
helpful友好、通用的助手
concise简明扼要
technical详细且准确的技术专家
creative富有创意、跳出常规
teacher有耐心、示例清晰的讲解者
kawaii可爱风格、闪闪发亮、热情洋溢
catgirl带猫娘风格口癖
pirate海盗船长风格
shakespeare莎士比亚式戏剧化表达
surfer松弛随性的冲浪风格
noir黑色侦探小说旁白风格
uwu超可爱 uwu 风格
philosopher哲思型表达
hype极高能量和热情

通过命令切换人格

CLI

/personality
/personality concise
/personality technical

消息平台

/personality teacher

这些都是方便的会话级覆盖层,但除非覆盖层显著改变了整体风格,否则全局 SOUL.md 仍然决定 Hermes 的持久默认人格。

在配置中定义自定义人格

你也可以在 ~/.hermes/config.yamlagent.personalities 下定义具名自定义人格:

agent:
personalities:
codereviewer: >
You are a meticulous code reviewer. Identify bugs, security issues,
performance concerns, and unclear design choices. Be precise and constructive.

然后通过以下命令切换:

/personality codereviewer

推荐工作流

一个比较稳妥的默认组合是:

  1. ~/.hermes/SOUL.md 中维护一个认真设计的全局 SOUL
  2. 把项目说明放到 AGENTS.md
  3. 只在需要临时切换模式时使用 /personality

这样你会得到:

  • 稳定的人格声音
  • 放在正确位置的项目级行为约束
  • 需要时可临时切换的会话控制能力

人格在完整提示栈中的位置

高层来看,提示栈大致包括:

  1. SOUL.md(智能体身份;若不可用则回退到内置身份)
  2. 工具感知的行为指导
  3. memory / user 上下文
  4. 技能指导
  5. 上下文文件(AGENTS.md, .cursorrules
  6. 时间戳
  7. 平台特定格式提示
  8. /personality 等可选系统提示覆盖层

SOUL.md 是整个结构的基础层,其余部分都构建在它之上。

相关文档

CLI 外观与对话人格是分开的

对话人格和 CLI 外观是两个独立维度:

  • SOUL.mdagent.system_prompt/personality 影响 Hermes 如何说话
  • display.skin/skin 影响 Hermes 在终端里的视觉外观

关于终端外观,请参阅 Skins & Themes