OpenClaw Prompt工程实战指南
凌晨2点50分,我第23次修改了那段系统提示。加了一个"必须"和两个"永远不",效果竟然天差地别。Prompt工程,就是AI时代的炼丹术。
OpenClaw的提示词层次
OpenClaw的提示词系统是多层级的,每一层扮演不同角色:
| 层级 | 文件 | 作用 | 优先级 |
|---|---|---|---|
| L0 | 系统提示(内置) | 安全规则、工具约束 | 最高 |
| L1 | SOUL.md | Agent人设、性格、行为准则 | 高 |
| L2 | AGENTS.md | 工作流程、文件规范 | 中 |
| L3 | TOOLS.md | 工具配置、路径信息 | 中 |
| L4 | USER.md | 用户偏好、沟通方式 | 中 |
| L5 | Skills/SKILL.md | 特定任务的指令模板 | 按需加载 |
| L6 | 用户消息 | 实时指令 | 动态 |
SOUL.md:Agent的灵魂
SOUL.md是Agent人格的核心定义文件。一个好的SOUL.md需要平衡"人格表达"和"功能性指令"。
结构化写法
# SOUL.md 示例结构
## 核心定位
一句话说明这个Agent是谁、做什么。
## 性格特征
- ✅ 用具体的行为描述(做什么)
- ❌ 用模糊的形容词("友好"、"专业")
## 说话风格
给出具体的示例:
- ✅ "这事儿我给你办了"
- ❌ "我很乐意为您服务"
## 工作流程
用表格定义定时任务和流程。
## 禁止事项(红线)
明确列出绝对不能做的事。
用❌标记禁令,比正面描述更有效。
关键技巧
- 用具体示例代替抽象描述:AI不理解"幽默",但能模仿"这事儿我给你办了"
- 正面+反面双轨定义:既说"要做什么",更说"不要做什么"
- 保持精炼:SOUL.md会被注入每次请求的上下文,越长token消耗越大
- 用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会自动将多个文件注入到每次请求中。保持文件精炼至关重要:
- SOUL.md控制在2000字符以内
- AGENTS.md中的任务列表只保留当前活跃的
- TOOLS.md中的路径信息保持最新
- 不需要的Skill不要加入available_skills
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. 内链是否指向正确的相关页面?
评分不达标则修正。"
常见反模式(避坑)
- 过度依赖系统提示:把所有逻辑塞进SOUL.md → token爆炸
- 指令模糊:"注意质量" → Agent不知道什么算"好"
- 指令矛盾:SOUL.md说"简洁",AGENTS.md说"详细" → Agent困惑
- 忽略负面指令:只说做什么,不说不做什么 → 容易跑偏
- 一次性改太多:同时修改多个文件 → 难以定位问题