乐于分享
好东西不私藏

OpenClaw 对话提示词长啥模样?

OpenClaw 对话提示词长啥模样?

大模型本身是无状态的——每次对话都是”从零开始”。OpenClaw 每次发消息时,把所有上下文组装成一个超长 prompt 发送。


Prompt 构造流程图

下面介绍下 Prompt 中各部分内容作用。

构造 System Prompt-静态信息

基础身份: “You are a personal assistant running inside OpenClaw.”,让模型知道自己是在 OpenClaw 环境中运行的助手。

工具告诉模型有哪些工具可用(read, write, exec, grep, browser 等)。

安全规则明确禁止自我保护、复制、资源获取、权力寻求等行为;安全优先于任务完成,冲突时暂停并询问。

CLI提供 OpenClaw CLI 命令的快速参考指南。

技能引导 AI 识别和使用已注册的技能,避免盲目读取技能文件。

内存指导让 AI 正确使用内存工具进行信息检索,控制内存召回的质量和性能。

工作空间确保 AI 正确理解文件路径的解析规则,防止在沙箱环境中混淆宿主路径和容器路径。

文档:引导 AI 正确查找 OpenClaw 相关信息。

沙箱让 AI 理解沙箱环境的限制,正确处理路径映射和权限问题。

用户身份让 AI 知道哪些用户有权限与它交互,防止未授权用户获取敏感信息或执行危险操作。

时间让 AI 知道用户的时区,便于处理时间相关的任务。

静态项目上下文

Order
文件
作用
注入时机
10

AGENTS.md

Agent 工作规范
始终
20

SOUL.md

Agent 个性风格
始终
30

IDENTITY.md

Agent 身份定义
始终
40

USER.md

用户信息
始终
50

TOOLS.md

工具说明
始终
60

BOOTSTRAP.md

首次引导
仅首次对话
70

MEMORY.md

长期记忆
如果存在

缓存边界的作用

SYSTEM_PROMPT_CACHE_BOUNDARY 是一个重要的分界线:

  • 之前(Stable)
    :不常变化的内容,适合缓存
  • 之后(Dynamic)
    :每次对话都可能变化,必须每次重新生成

对支持 Prompt Caching 的提供商(如 Anthropic),在 API 层面添加正确的缓存控制参数,最终发送给大模型的内容中,这个标记会被移除或转换为 API 特定的格式。边界标记不会减少发送给模型的 Token 数量,而是利用 Prompt Caching 来降低计费成本

构造 System Prompt-动态信息

HEARTBEAT.md是一个用于周期性任务检查和自动化提醒的工作区文件,是让 Agent 在无人主动交互时也能自主执行任务的机制。

Webchat/Messaging/Voice/Reactions 指导

指导
作用
适用场景
Webchat/Canvas

嵌入式内容渲染规则

仅 Webchat 渠道

Messaging

消息发送、会话管理、子代理协调

所有渠道

Voice(TTS)

语音合成指导

配置了 TTS 时

Reactions

表情反应使用策略

Discord/Signal 等支持反应的渠道

 Runtime Context:是指 host, os, arch, node, model 等信息,让 Agent 能够根据当前实际环境做出正确决策,而不是依赖静态假设。

注入 Session History

加载历史信息加载的历史消息包含当前会话的完整对话记录,是 Agent 保持对话连续性的核心机制。

处理孤立信息:孤立信息是指 Session 历史记录末尾存在用户消息,但这些消息没有对应的 Agent 回复,因上一次对话异常终止造成。若不处理,Agent 可能会”回复”一个已经过时的用户问题。

过滤 heartbeatHeartbeat 是后台轮询,不包含有价值的信息。

注入当前用户信息

合并用户输入发送给模型的信息可能包含用户不可见的内容。比如:用户发送消息,系统检测到上次工具调用失败,自动添加重试指令。合并逻辑:用户可见部分(记录在历史中)+ 系统添加的隐藏部分(不记录在历史中)。

检测并加载图片检测到图片后,将其转换为可传输的 Base64 格式,随消息一起发送给大模型。

发送大模型信息

组装 → 发送给大模型:使用 pi-embedded-runner 执行时框架组装 prompt,向大模型发送消息。


看来一次会话向大模型发送的信息很多,但对于现在大模型支持上下文长度 1M Token,也是小菜一碟。