OpenClaw System Prompt 九层架构:从“能用”到“可控”
为什么要理解“九层架构”
很多人把 Agent 的行为理解为“一个 System Prompt 决定一切”。
但在 OpenClaw 里,System Prompt 更像是一个 动态组装系统: 它不是单文件,而是由多个层级在运行时拼接而成。
理解这件事的价值在于:
- 你会知道哪里可以改,哪里不该改
- 你会明白为什么“同样一句话,不同会话表现不一样”
- 你能把“玄学调参”变成“工程化配置”
九层结构(工程视角)
Layer 1~6:框架自动层(稳定性优先)
这部分通常由框架自动注入,目标是保证一致性与安全边界:
- Framework Core(框架核心规则)
- Tool Definitions(工具定义与参数约束)
- Skills Registry(技能注册与可用性)
- Model Aliases(模型别名)
- Protocol Specs(协议规范,如 Reply Tags / Heartbeat)
- Runtime Info(运行时信息,如 agent、host、model、channel)
这 6 层通常不建议“硬改”,而是通过配置间接影响。
Layer 7:静态可控层(Workspace Files)
这是最直接、最稳定的个性化入口。常见文件包括:
AGENTS.mdSOUL.mdUSER.mdIDENTITY.mdTOOLS.mdHEARTBEAT.mdMEMORY.md/memory/*.md
适合放:
- 角色定位
- 长期偏好
- 工作规范
- 可复用决策
Layer 8:动态可控层(Hooks)
这是“按场景注入”的关键能力。比如:
- 根据会话类型加载不同文档
- 在 prompt 构建前注入实时上下文
- 按条件追加 bootstrap 文件
适合放:
- 会变的内容
- 上下文相关内容
- 自动化拼装逻辑
Layer 9:入站上下文层(Inbound Context)
每次请求都会带上:
- 发送者信息
- 渠道元信息
- 会话上下文
- 当前消息特征
它解释了为什么同样 prompt,在不同渠道/会话里会出现不同响应倾向。
真正的“控制面”在哪?
结论很简单:
- 长期稳定行为:放 Layer 7
- 动态场景行为:放 Layer 8
- 会话差异影响:理解 Layer 9
也就是说,真正可控的核心不是“改一段神奇 prompt”,而是:
Layer 7 + Layer 8 的协同设计。
常见误区
误区 1:只盯着系统提示词文本
问题:你看到的只是结果,不是组装过程。
建议:先弄清“由谁、在何时、按什么规则”拼装。
误区 2:把所有需求都塞进一个文件
问题:静态内容和动态内容混在一起,后期维护灾难。
建议:
- 稳定规则写 Layer 7
- 动态逻辑写 Layer 8
误区 3:忽视上下文噪声
问题:Layer 9 带来的对话历史噪声会让输出漂移。
建议:定期收敛上下文,保持任务边界清晰。
一套可落地的优化方法
- 先清理 Layer 7:删重复、删修辞、留规则
- 再约束 Layer 8:只注入必要内容,避免重依赖
- 观察 Layer 9:排查“历史消息污染”
- 逐步迭代:每次只改一个变量,便于回归验证
总结
OpenClaw 的 System Prompt 不是“写作题”,是“系统工程题”。
当你把九层看成一个组装管线,而不是一段固定文本时, 你就从“会用 Agent”走到了“能设计 Agent”。
下一步最值得做的,不是继续堆提示词,而是把你的 Layer 7/8 做成可维护、可迭代、可验证的配置体系。