title: “提示词组装” description: “Hermes 如何把 SOUL、记忆、技能、上下文文件和平台提示组合成最终系统提示。”
提示词组装
Hermes 的系统提示不是一段固定字符串,而是由多层内容按顺序拼出来的。这样做的好处是:每一层职责明确,缓存、冻结、增量更新和平台定制都更容易处理。
可缓存的系统提示层
可以把系统提示理解为一系列固定层的叠加。常见层包括:
- Agent 身份;
- 工具使用规则;
- 可选的 Honcho 静态块;
- 外部系统消息;
- 记忆快照;
- 用户资料快照;
- 技能索引;
- 项目上下文文件;
- 时间戳与会话信息;
- 平台提示。
具体示例:组装后的系统提示
文档原文会逐层展开这些来源。阅读源码时,建议把每一层都映射回实际文件来源:
~/.hermes/SOUL.mdMEMORY.mdUSER.md- 项目目录中的
AGENTS.md/.hermes.md - 已启用技能的
SKILL.md - 当前平台的行为提示
持久记忆
记忆层一般来自记忆提供器或本地记忆文件,并以“冻结快照”的方式注入本轮提示。这避免模型在中途修改“记忆原文”,也降低多轮对话中漂移的风险。
用户资料
用户资料层与持久记忆类似,但重点是稳定的用户偏好、环境假设和约定,而不是长期事实集合。
技能(必选)
技能层不是简单拼接所有 SKILL.md 原文,而是按启用状态和上下文需要收集索引或说明。其目标是让模型知道“可调用什么能力、该在何时使用”,而不是把无关技能全部塞进 prompt。
AGENTS.md
项目上下文文件通常来自当前工作目录,用于表达仓库约定、工程限制和本地规则。它们在实际编码场景里非常重要,因为这类约束往往比通用系统提示更具体。
SOUL.md 在提示中的表现形式
SOUL.md 一般承载 agent 的人格、默认工作方式和高层行为约束,是整个系统提示最靠前的固定层之一。
上下文文件如何被注入
prompt_builder.py 会按既定规则发现上下文文件,并把它们以受控方式注入。典型规则包括:
- 优先读取当前项目附近的上下文文件;
- 对同名或多层级文件进行排序;
- 必要时对过长内容裁剪或摘要。
上下文文件发现细节
核心目标不是“把所有文件都塞进去”,而是把最相关、最稳定、最接近当前工作目录的约束注入进来。
只在 API 调用时追加的层
有些内容并不会进入持久缓存层,而是只在某次 API 调用前动态拼入,例如本轮时间戳、session 标识、平台提示等。这能减少缓存失效范围。
记忆快照
记忆以快照形式注入,而不是在多轮对话中不断原地编辑。这样便于:
- 重放;
- 调试;
- 追踪某轮对话到底看到了哪些记忆。
上下文文件
上下文文件层的主要作用是让 Agent 知道仓库局部规则,例如:
- 哪些目录不可编辑;
- 测试或格式化的约定;
- 团队自己的代码风格;
- 特定模块的实现背景。
技能索引
技能索引帮助模型知道当前有哪些技能可用、各技能适合什么场景,并避免对大型技能包做一次性全文注入。
为什么要这样拆分提示词组装
拆分后的好处包括:
- 便于缓存固定前缀;
- 某层变化时只影响局部;
- 调试更容易;
- 更适配多平台和多 provider;
- 为压缩与快照提供更稳定的边界。