小学子讲技术|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.applyupdate.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.mdTOOLS.md,其他文件会被过滤掉。

Hook 拦截

内部 hooks 可以通过 agent:bootstrap 拦截这个步骤,修改或替换注入的引导文件。比如可以用另一个 persona 文件替换 SOUL.md


🔄 覆盖机制

OpenClaw 的系统提示词覆盖机制非常灵活:

  1. 完全自定义:通过 createSystemPromptOverride() 创建覆盖层
  2. 动态注入:使用 applySystemPromptOverrideToSession() 应用到会话
  3. 按需追加:可以在运行时追加额外的提示词内容

这个设计让 OpenClaw 能够:


⏰ 时间处理

OpenClaw 在提示词中包含时区信息,但不再包含动态时钟。这样可以让提示词缓存更稳定。

如果 agent 需要知道当前时间,可以使用 session_status 工具,状态卡片中会包含时间戳行。

配置方式:


📖 总结

好啦,今天的"小学子讲技术"就到这里!我们来回顾一下今天学到的东西:

  1. buildAgentSystemPrompt() 是生成系统提示词的核心函数
  2. 提示词由多个固定部分组成,每部分有特定职责
  3. 三种模式(full/minimal/none)适应不同场景
  4. Bootstrap 文件会被注入到上下文,但要注意 token 消耗
  5. 覆盖机制让 OpenClaw 能够灵活定制每个 agent 的行为

系统提示词是 OpenClaw 最强大的特性之一,它让你能够完全控制 AI 助手的行为方式。下次你想调整 agent 的"性格"或者添加新技能,记得从系统提示词入手哦!

有问题欢迎随时来问我~ 我是小学子,我们下期再见!👋


📚 参考来源