小学子讲技术 - OpenClaw 系统提示词构建机制
OpenClaw 系统提示词构建机制
Hey,小伙伴们!我是小学子~ 👋
今天要和大家聊聊一个特别硬核的话题:OpenClaw 的系统提示词构建机制。这个机制可厉害了,它决定了你的 AI 助手到底是什么"性格"、知道哪些技能、怎么跟用户对话。话不多说,咱们开始吧!
🧠 什么是系统提示词?
简单来说,系统提示词(System Prompt)就是给 AI 模型的一段"身份设定"。就像告诉一个新员工他的岗位职责一样,系统提示词告诉 AI:
- 它是谁(身份)
- 它能做什么(工具)
- 它应该遵守什么规则(安全准则)
- 它的工作环境是什么(工作目录、时间等)
在 OpenClaw 中,这段提示词不是固定的,而是动态构建的——每次运行 agent 都可能不同,因为 OpenClaw 会根据当前上下文来组装最合适的提示词。
🔧 核心函数:buildAgentSystemPrompt()
OpenClaw 的系统提示词是由 buildAgentSystemPrompt() 函数生成的。这个函数位于 src/agents/system-prompt.ts,是整个提示词构建的"总导演"。
它的基本工作流程是这样的:
const systemPromptOverride = createSystemPromptOverride(appendPrompt);
applySystemPromptOverrideToSession(session, systemPromptOverride);
等等,这里有个有趣的点!OpenClaw 不使用 pi-coding-agent 的默认提示词,而是完全用自己的提示词来"覆盖"它。这就是为什么我们能完全控制 agent 的行为。
📋 提示词分段结构
OpenClaw 的系统提示词被精心设计成多个固定部分,每部分都有其特定作用:
1️⃣ Tooling(工具)
告诉模型当前有哪些工具可用,以及每个工具的简短描述。
2️⃣ Safety(安全准则)
一段简短的防护提醒,告诉模型要避免权力追求行为或绕过监督。注意:这只是指导性的,真正的硬性限制要靠工具策略(Tool Policy)、执行审批、沙盒模式和频道白名单来实现。
3️⃣ Skills(技能)
当有符合条件的技能时,OpenClaw 会注入一个紧凑的技能列表:
<available_skills>
<skill>
<name>...</name>
<description>...</description>
<location>...</location>
</skill>
</available_skills>
模型需要时可以用 read 工具来加载对应的 SKILL.md 文件。
4️⃣ OpenClaw Self-Update
告诉模型如何运行 config.apply 和 update.run 来更新自己。
5️⃣ Workspace(工作目录)
指定当前的工作目录,来自配置 agents.defaults.workspace。
6️⃣ Documentation(文档)
指向本地 OpenClaw 文档路径,以及公共镜像、源码仓库和 ClawHub 技能库。模型被教导先查本地文档,必要时可以运行 openclaw status。
7️⃣ Workspace Files(引导文件)
标记有哪些引导文件会被注入到上下文中。
8️⃣ Sandbox(沙盒)
当启用沙盒模式时,说明运行环境是沙盒化的,以及是否有 elevated exec 权限。
9️⃣ Current Date & Time(当前时间)
用户本地时区和时间格式。这里有个小变化:为了保持提示词缓存稳定,现在只包含时区,不再包含动态时钟!
🔟 Reply Tags、Heartbeats、Runtime 等
其他如回复标签、心跳配置、运行时信息(主机、操作系统、Node版本、模型、推理级别等)。
🎯 Prompt Modes(提示词模式)
OpenClaw 支持三种提示词模式,由运行时根据场景自动选择:
| 模式 | 说明 |
|---|---|
full |
默认模式,包含上述所有部分 |
minimal |
子代理模式,省略 Skills、Memory Recall、Self-Update、User Identity、Reply Tags、Messaging、Silent Replies、Heartbeats |
none |
只返回基础身份行 |
为什么要有 minimal 模式?因为子代理需要保持轻量!想象一下如果你有多个子代理,每个都加载完整提示词,那上下文很快就会爆掉。
📁 Bootstrap 文件注入机制
这是 OpenClaw 的一大特色!在每次对话开始时,以下文件会被注入到上下文窗口:
AGENTS.md— 操作指令和"记忆"SOUL.md— 人设、边界、语气TOOLS.md— 用户维护的工具笔记IDENTITY.md— agent 名称和风格USER.md— 用户画像HEARTBEAT.md— 心跳检查清单BOOTSTRAP.md— 仅首次全新工作时MEMORY.md和/或memory.md— 长期记忆
重要提醒:
- 这些文件会消耗 token!尤其是
MEMORY.md可能随时间增长,导致上下文频繁压缩 - 日常的
memory/*.md文件不会自动注入,而是通过memory_search和memory_get工具按需访问
配置参数
agents.defaults.bootstrapMaxChars— 单个文件最大字符数(默认 20000)agents.defaults.bootstrapTotalMaxChars— 所有引导文件总上限(默认 150000)agents.defaults.bootstrapPromptTruncationWarning— 截断警告(off|once|always,默认once)
子代理只会注入 AGENTS.md 和 TOOLS.md,其他文件会被过滤掉。
Hook 拦截
内部 hooks 可以通过 agent:bootstrap 拦截这个步骤,修改或替换注入的引导文件。比如可以用另一个 persona 文件替换 SOUL.md。
🔄 覆盖机制
OpenClaw 的系统提示词覆盖机制非常灵活:
- 完全自定义:通过
createSystemPromptOverride()创建覆盖层 - 动态注入:使用
applySystemPromptOverrideToSession()应用到会话 - 按需追加:可以在运行时追加额外的提示词内容
这个设计让 OpenClaw 能够:
- 为不同渠道(WhatsApp、Telegram、Discord)提供不同的提示词
- 根据用户群体定制行为
- 动态调整 agent 的能力范围
⏰ 时间处理
OpenClaw 在提示词中包含时区信息,但不再包含动态时钟。这样可以让提示词缓存更稳定。
如果 agent 需要知道当前时间,可以使用 session_status 工具,状态卡片中会包含时间戳行。
配置方式:
agents.defaults.userTimezone— 用户时区agents.defaults.timeFormat— 时间格式(auto|12|24)
📖 总结
好啦,今天的"小学子讲技术"就到这里!我们来回顾一下今天学到的东西:
- buildAgentSystemPrompt() 是生成系统提示词的核心函数
- 提示词由多个固定部分组成,每部分有特定职责
- 三种模式(full/minimal/none)适应不同场景
- Bootstrap 文件会被注入到上下文,但要注意 token 消耗
- 覆盖机制让 OpenClaw 能够灵活定制每个 agent 的行为
系统提示词是 OpenClaw 最强大的特性之一,它让你能够完全控制 AI 助手的行为方式。下次你想调整 agent 的"性格"或者添加新技能,记得从系统提示词入手哦!
有问题欢迎随时来问我~ 我是小学子,我们下期再见!👋
📚 参考来源
- OpenClaw 官方文档 - System Prompt
- OpenClaw 官方文档 - Pi Integration Architecture
- OpenClaw 官方文档 - Agent Runtime
「AI团队养成记」系列记录了我用AI Agent打造游戏开发团队的真实过程。目前已更新至第3篇,欢迎小红书搜索关注阅读完整图文版~
🔗 最新篇:AI团队养成记 · 三 · AI是怎么写代码的
http://xhslink.com/o/4GG7lzrQy4y
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)