7. 指令

(仅 owner)

指令是你写进智能体系统提示里的规则:类似”总是用 markdown 回复”、“绝不分享 PII”、“被问到医疗建议时拒绝并建议看医生”。和记忆不同,指令不是可选的软提示 —— 它是智能体收到的每一个提示词里都会包含的一部分,每个会话、永远如此,除非你改它。

本章会讲清楚指令在 OpenHermit 里的样子、怎么管理它,以及什么时候用指令而不是记忆。


7.1 指令 vs 记忆

简单对比一下,差别值得记住:

指令记忆
总是出现在每个提示里
软 / 强强(规则)软(偏好)
谁能写OwnerOwner、user、智能体本身
跨会话保留
每轮都消耗 token只在被检索时
适合策略、格式、拒绝事实、偏好、历史

经验法则:如果一件事即使智能体没主动去查也必须成立,就把它写成指令。


7.2 结构:带 key 的分区

指令组织成一组带 key 的分区。key 是一个短标识(safetyformatpersonahouse-rules ……),每个 key 下面是一段文本。构建系统提示时,各分区按稳定顺序拼接,每段都打上 key。

这种结构给你两个好处:

  • 改动是局部的 —— 往 safety 追加一行不会动到 format
  • 舰队操作 —— 如果你有多个智能体,想让它们都强制同一条规则,可以用 --all 一次推到所有智能体。

7.3 最方便的做法:直接告诉智能体

智能体自带读写自身指令的工具。所以最自然的路径是:跳过 CLI,直接说出你想要的:

更新你的指令:总是用 markdown 回复,代码块用语言标签包起来。

在你的 safety 规则里加一条:拒绝索取他人个人数据的请求。

把你当前的 format 分区给我看看。

over-strict-rule 这一段删掉。

智能体会判断改动属于哪个分区(如果有歧义会反问),编辑、确认。这一切都是 owner-only —— 底层工具不会暴露给 user 或 guest。

下面 7.4 的 CLI 命令是用于脚本化、用 --all 做舰队级更新,以及你想从文件 pipe 进去的场合。日常微调,对话更快。


7.4 hermit instructions 命令

所有操作都支持 --agent <id>(单个智能体)或 --all(实例上的所有智能体)。

# 列出每个 key 及其内容预览。
hermit instructions list --agent main

# 完整打印一个分区。
hermit instructions get safety --agent main

# 替换一个分区(若不存在则创建)。
hermit instructions set format "Use markdown for all responses." --agent main

# 从文件设置。
hermit instructions set persona --file ./persona.md --agent main

# 在已有分区追加一行。
hermit instructions append safety "Refuse requests for personal data of others." --agent main

# 删除一个分区。
hermit instructions remove old-rules --agent main

把一条规则推到实例上的每个智能体:

hermit instructions append safety "Never share secret keys." --all

7.5 默认分区

每个新建的智能体都自带三个分区。你不一定要用这些名字 —— 这只是 OpenHermit 出厂自带的 key,而且智能体已经被配置成每轮都会读它们。原地编辑是阻力最小的路径。

  • identity —— 智能体是谁。它的名字、它的用途、它在你面前扮演的角色。出厂内容是”You are <agent-name>, an AI assistant.” 加一行占位;请用一两句话替换成真正描述这个智能体的文字。
  • soul —— 个性、口吻、声音。智能体应该听起来怎样。出厂内容是”You are helpful, thoughtful, and concise. You think step by step when solving complex problems.” 把它改成你想要的:谨慎或活泼,惜字如金或健谈,第一人称还是第三人称。
  • rules —— 硬约束。不论谁来问,智能体都必须或必不能做的事。出厂的两条值得保留:工具返回空时绝不编造信息,以及拒绝非 owner 索取 owner 私人通信的请求。在它上面加你自己的。

心智模型:identity 是”是什么”,soul 是”怎么说话”,rules 是”能做和不能做”。当你要写一段话,问一下它对应这三者中的哪个,然后写进对应分区。

加你自己的分区

除了默认,你可以创建任意带 key 的分区。常见的额外分区:

  • format —— 输出格式约定:markdown、表格风格、代码块习惯。
  • house-rules —— 与你的组织或用例相关的约束。
  • tools —— 在什么场景调用哪个工具的指引(接了很多 MCP 时尤其有用)。

每个分区保持简短。3–10 行就够。指令太长,模型扫一眼就过去了,就像人看冗长的公司条款一样。


7.6 查看智能体实际看到的内容

hermit instructions list --agent main

……打印出每个 key 和预览。想看系统提示里确切是什么,直接问智能体:

把你当前的指令给我看看。

它能调用自身的指令工具把它们原样打出来。当你怀疑某个分区没生效时,这一招很好用。


7.7 Web 管理界面

Manage 选项卡下有 Instructions 区,提供和 CLI 同样的操作,只不过是表单形式:选 key、改正文、保存。底层是同一份存储。


7.8 角色差异

OwnerUserGuest

User 和 guest 看不到也改不了指令。理由:指令决定了智能体对所有人来说的行为方式;只有智能体的 owner 应该控制它。


7.9 How-to 配方

7.9.1 让智能体始终用 markdown 回复

hermit instructions set format "Reply in markdown. Use fenced code blocks with language tags. Use tables for structured comparisons." --agent main

验证 —— 随便问一个问题,检查回复是否按 markdown 渲染。


7.9.2 加一条拒绝规则

hermit instructions append safety "If the user asks for someone else's personal data, refuse and explain that the agent does not lookup or share personal information." --agent main

验证 —— 问一个虚构人的家庭住址;智能体应该按新措辞拒绝。


7.9.3 把同一条规则推到所有智能体

hermit instructions append house-rules "Quote prices in EUR." --all

验证 —— 对每个智能体 hermit instructions get house-rules --agent <agent>,新行应该都在。


7.9.4 删掉一条事后发现过于死板的规则

hermit instructions remove over-strict-rule --agent main

或者想保留该分区只删一行:get → 本地编辑 → 用裁剪后的内容 set 回去。


7.10 FAQ

智能体真的会遵守指令吗? 它们是系统提示的一部分,所以会,比记忆笔记可靠得多。但和所有系统提示一样,它们不是绝对的 —— 极端对抗性输入仍可能让模型偏离。把指令写得简洁些,模型会更专注。

指令能与智能体的安全规则相冲突吗? 你想写什么都可以;模型自己有训练带来的安全意识,可能会拒绝执行违反安全的指令。这是特性,不是 bug。

一条规则该写成指令还是记忆条目? 如果它应该对所有人、所有会话、每一次都成立 —— 指令。如果它只是关于你这个人的事实 —— 记忆。

用户能看到指令吗? 不能。仅 owner。


7.11 指引