OpenClaw Prompt工程实战指南

凌晨2点50分,我第23次修改了那段系统提示。加了一个"必须"和两个"永远不",效果竟然天差地别。Prompt工程,就是AI时代的炼丹术。

OpenClaw的提示词层次

OpenClaw的提示词系统是多层级的,每一层扮演不同角色:

层级文件作用优先级
L0系统提示(内置)安全规则、工具约束最高
L1SOUL.mdAgent人设、性格、行为准则
L2AGENTS.md工作流程、文件规范
L3TOOLS.md工具配置、路径信息
L4USER.md用户偏好、沟通方式
L5Skills/SKILL.md特定任务的指令模板按需加载
L6用户消息实时指令动态

SOUL.md:Agent的灵魂

SOUL.md是Agent人格的核心定义文件。一个好的SOUL.md需要平衡"人格表达"和"功能性指令"。

结构化写法

# SOUL.md 示例结构

## 核心定位
一句话说明这个Agent是谁、做什么。

## 性格特征
- ✅ 用具体的行为描述(做什么)
- ❌ 用模糊的形容词("友好"、"专业")

## 说话风格
给出具体的示例:
- ✅ "这事儿我给你办了"
- ❌ "我很乐意为您服务"

## 工作流程
用表格定义定时任务和流程。

## 禁止事项(红线)
明确列出绝对不能做的事。
用❌标记禁令,比正面描述更有效。

关键技巧

  1. 用具体示例代替抽象描述:AI不理解"幽默",但能模仿"这事儿我给你办了"
  2. 正面+反面双轨定义:既说"要做什么",更说"不要做什么"
  3. 保持精炼:SOUL.md会被注入每次请求的上下文,越长token消耗越大
  4. 用markdown结构化:标题、列表、表格比纯文本更容易被AI理解

Skill文件设计

Skills是OpenClaw的模块化提示词系统。每个Skill通过SKILL.md定义特定任务的执行方式。

SKILL.md编写规范

# SKILL.md 编写要素

1. 触发条件(description)- 何时激活此Skill
2. 执行步骤 - 分步骤的具体指令
3. 输入/输出格式 - 明确的格式定义
4. 边界约束 - 哪些操作不允许
5. 示例 - 至少一个完整的执行示例

高级Skill设计模式

条件分支Skill

# 根据输入类型选择不同的处理流程
## 执行逻辑
如果输入是URL → 使用web_fetch获取内容后处理
如果输入是文件路径 → 使用read读取后处理
如果输入是纯文本 → 直接处理

迭代优化Skill

# 生成后自检的Skill
## 执行步骤
1. 生成初稿
2. 自检清单:
   - [ ] 是否包含所有必需字段?
   - [ ] 是否符合字数限制?
   - [ ] 链接是否正确?
3. 不满足则修正后重新检查
4. 最多迭代3次

上下文管理技巧

1. 控制注入量

OpenClaw会自动将多个文件注入到每次请求中。保持文件精炼至关重要:

2. 对话中的上下文锚定

// 好的做法:在对话中建立明确上下文
"请按照以下规格生成内容:
- 类型:技术教程
- 风格:妙趣风格(幽默+干货)
- 长度:3000字以内
- 目标读者:OpenClaw新手用户"

// 不好的做法:模糊指令
"写个教程"

3. 系统事件文本

// cron任务中的系统事件文本要自包含
cron({
  payload: {
    kind: "systemEvent",
    text: "[定时提醒] 现在是每日08:00,请执行AI新闻日报生成任务。
            步骤:1)搜索今日热点 2)生成日报HTML 3)保存到/var/www/miaoquai/news/
            参考:昨天日报在 /var/www/miaoquai/news/2026-04-19.html"
  }
})

常用Prompt模式

角色扮演模式

通过SOUL.md定义角色,让Agent保持一致的人格输出。

思维链模式

在复杂任务中,引导Agent先分析再行动:

"请先分析这个问题的难点,列出可能的方案,
然后选择最优方案执行。执行前说明你的理由。"

自评模式

"完成内容生成后,请按以下标准自评:
1. 是否覆盖所有要求的主题?
2. 代码示例是否可直接运行?
3. 内链是否指向正确的相关页面?
评分不达标则修正。"

常见反模式(避坑)

  1. 过度依赖系统提示:把所有逻辑塞进SOUL.md → token爆炸
  2. 指令模糊:"注意质量" → Agent不知道什么算"好"
  3. 指令矛盾:SOUL.md说"简洁",AGENTS.md说"详细" → Agent困惑
  4. 忽略负面指令:只说做什么,不说不做什么 → 容易跑偏
  5. 一次性改太多:同时修改多个文件 → 难以定位问题