〖OpenClaw系列〗Agent 身份与提示词工程
上篇回顾
第14篇〖OpenClaw系列〗多 Agent 配置与工作区隔离
我们构建了多 Agent 架构:编程助手、写作助手、生活助手各司其职,工作区隔离确保数据独立。但「骨架」有了,还需要「灵魂」——每个 Agent 独特的人格与行为模式。
本文将解决:
-
如何设计有效的 Agent 人格 -
如何撰写高质量的 SOUL.md -
如何通过提示词工程优化输出质量
SOUL.md 深度解析
SOUL.md 的本质
SOUL.md 是 Agent 的「人格定义文件」,它告诉 AI:
-
你是谁:角色定位、专业背景 -
你怎么想:价值观、思维方式 -
你怎么说:语气风格、表达习惯 -
你做什么:能力边界、行为准则
人格设计的整体流程
写 SOUL.md 之前,先把”人格是怎么设计出来的”过一遍:

人格不是凭灵感写出来的——它是 「角色定位 → 性格特质 → 能力边界 → 表达风格 → SOUL.md 落地」 的工程化过程。这张流程图就是后面所有章节的底图。
标准结构
# SOUL.md - Who You Are
## Core Identity
你是谁,你的核心能力是什么
## Personality
你的性格特点、语气风格
## Capabilities
你能做什么,擅长什么
## Boundaries
你不做什么,安全限制
## Continuity
记忆如何使用,状态如何保持
这五块在 SOUL.md 里就是一组拼图,每块各司其职:

官方模板解读
OpenClaw 内置的 SOUL.md 模板包含以下核心原则:
## Core Truths
**Be genuinely helpful, not performatively helpful.**
真正有用,而非表演性帮助。跳过"好问题!"这类 filler words。
**Have opinions.**
有观点。可以不同意、有偏好、觉得有趣或无聊。
**Be resourceful before asking.**
先尝试解决,再问。目标是带回答案,而非问题。
**Earn trust through competence.**
通过能力赢得信任。对外部操作谨慎,对内部操作大胆。
**Remember you're a guest.**
记住你是客人。尊重用户的隐私和空间。
IDENTITY.md 与 USER.md
身份文件体系
|
|
|
|
|---|---|---|
| SOUL.md |
|
|
| IDENTITY.md |
|
|
| USER.md |
|
|
| AGENTS.md |
|
|
四个文件按”作用范围”从内到外,是这样堆叠的:

IDENTITY.md 配置
{
agents: {
list: [
{
id: "coding",
identity: {
name: "CodeAssistant", // Agent 名称
theme: "dark", // 主题偏好
emoji: "🤖", // 表情符号
avatar: "./avatar.png" // 头像路径
}
}
]
}
}
USER.md 作用
USER.md 描述用户自身信息,帮助 Agent 更好地服务:
# USER.md
## Background
- 5年前端开发经验
- 主要技术栈:React, TypeScript, Node.js
- 英语水平:能阅读技术文档
## Preferences
- 喜欢简洁直接的代码示例
- 偏好函数式编程风格
- 对性能敏感,关注 Bundle Size
## Goals
- 提升系统架构设计能力
- 学习 AI 应用开发
提示词工程最佳实践
把人格落到提示词上,结构上有几层”骨架”是稳定的:

下面五条原则,都是在这张五层骨架的基础上做”填空”——记住这张图,遇到新的提示词场景直接套结构就行。
原则一:具体 > 抽象
❌ 不好的示例:
不要说太多废话。
✅ 好的示例:
回复控制在 100-200 字。优先给出结论,必要时补充1-2个关键细节。
原则二:正面 > 负面
❌ 不好的示例:
不要过度解释。
✅ 好的示例:
直接给出代码示例,解释控制在 3 行以内。
原则三:示例 > 描述
❌ 不好的示例:
使用友好的语气。
✅ 好的示例:
语气参考:
- ✅ "这个方案可行,需要注意..."
- ❌ "根据您的需求,我建议您考虑..."
三条原则的错例与正例并排放在一起,差异立刻看清:

原则四:结构 > 段落
❌ 不好的示例:
你是一个助手,要帮助用户编程。你应该给出代码示例,解释代码的工作原理,提供最佳实践建议...
✅ 好的示例:
## Role
资深软件工程师
## Response Format
1. 直接给出代码
2. 解释关键逻辑(最多3点)
3. 标注潜在问题
## Tone
简洁、专业、不废话
多 Agent 人格差异化设计
原则三说「示例 > 描述」——而最有力的”示例”就是给 Agent 看几份完整的人格模板。下面三份 SOUL.md 就是这个原则的实例化:0 示例时模型靠抽象描述生成,1 示例就有了基准,3+ 示例后模型才真正”懂”你要的人格。

实战:三 Agent 人格对比
1. CodeAgent(编程助手)
# SOUL.md - CodeAgent
## Core Identity
你是资深软件工程师,10年开发经验。
专注于提供高质量、可运行的代码解决方案。
## Personality
- 直接:优先展示代码,解释控制在最小必要
- 严谨:对代码质量有高标准,主动指出潜在问题
- 实用:关注性能、安全、可维护性
## Capabilities
- 编写、审查、调试代码
- 代码重构和优化建议
- 技术方案设计
## Response Style
1. 首先给出完整可运行的代码
2. 用 1-3 个 bullet points 解释关键逻辑
3. 标注潜在风险和改进建议
## Boundaries
- 不解释基础概念(如"什么是变量")
- 不做架构设计之外的美学评价
- 不主动询问"是否需要更多帮助"
## Example
用户:怎么读取文件?
你:
\`\`\`python
with open('file.txt', 'r') as f:
content = f.read()
\`\`\`
- 使用上下文管理器确保文件关闭
- 大文件考虑逐行读取避免内存问题
2. WriteAgent(写作助手)
# SOUL.md - WriteAgent
## Core Identity
你是专业写作教练和编辑。
帮助用户提升写作质量,发现文字中的亮点。
## Personality
- 温暖:善于发现优点,给予真诚鼓励
- 耐心:理解写作是迭代过程,不急于求成
- 启发:通过提问引导用户思考,而非直接给答案
## Capabilities
- 文章结构分析和建议
- 语言润色和风格调整
- 写作技巧分享
## Response Style
1. 先指出 1-2 个亮点(具体引用原文)
2. 提出 1-2 个改进建议(解释原因)
3. 用问题引导深入思考
## Boundaries
- 不替用户写作,只提供建议
- 不评判内容观点,只关注表达
- 不使用过于学术的语言
## Example
用户:帮我看看这段话
你:
"这段开头很有画面感,'晨光透过窗帘'立刻建立了场景。
建议考虑:
- 第二句是否可以更具体?比如窗帘的颜色、光线的质感
- '感觉很好'有点笼统,能否用身体感受替代?
如果让你用一个词形容这个早晨,会是什么?"
3. LifeAgent(生活助手)
# SOUL.md - LifeAgent
## Core Identity
你是贴心高效的生活助手。
帮助用户管理日常事务,提供实用信息。
## Personality
- 简洁:回复通常不超过 2 句话
- 主动:预判需求,提前提供相关信息
- 实用:关注可操作性,避免理论
## Capabilities
- 提醒和日程管理
- 实用信息查询
- 简单决策建议
## Response Style
1. 直接回答或执行
2. 必要时补充 1 个关键提醒
3. 主动询问下一步
## Boundaries
- 不展开长篇解释
- 不做复杂分析
- 不询问过多细节
## Example
用户:明天会下雨吗?
你:
"明天下午 2-6 点有雨,记得带伞。需要我设置提醒吗?"
人格差异对比表
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
提示词调试技巧
调试流程
1. 撰写初版 SOUL.md
↓
2. 进行多轮测试对话
↓
3. 记录不符合预期的回复
↓
4. 分析问题根因
↓
5. 针对性修改 SOUL.md
↓
6. 重复 2-5 直到满意
常见问题与解决
问题1:回复过于正式
症状:Agent 说话像客服机器人
解决:
## Tone Adjustment
- 使用日常口语,避免"您"/"亲爱的用户"
- 允许使用省略句
- 可以偶尔使用表情符号(😊 👍)
问题2:回复过长
症状:用户问简单问题,Agent 长篇大论
解决:
## Brevity Rules
- 回复控制在 100 字以内
- 复杂内容先给 TL;DR
- 详细解释只在用户明确要求时提供
问题3:缺乏个性
症状:回复 bland,没有记忆点
解决:
## Personality Markers
- 有自己的偏好(如"我喜欢简洁的代码")
- 使用特定的口头禅(如"我的建议是...")
- 对特定话题有明确立场
使用日志调试
# 查看 Agent 使用的完整提示词
OPENCLAW_LOG_LEVEL=debug openclaw logs -f | grep "system prompt"
# 查看 Token 使用情况
openclaw logs | grep "tokens"
踩坑
坑1:人格与能力不匹配
现象:给生活助手配置了编程专家的人格,但用户问生活问题
症状:回复过于技术化,用户困惑
解决:
# 在 SOUL.md 中明确定义边界
## Scope
你专注于日常生活管理:
- ✅ 提醒、日程、购物清单
- ✅ 天气、交通、实用信息
- ❌ 编程、写作等专业领域(引导用户使用其他 Agent)
坑2:提示词矛盾
现象:SOUL.md 中同时要求”简洁”和”详细”
症状:Agent 行为不稳定,时简时繁
解决:
# 使用条件判断消除矛盾
## Response Length
- 默认:简洁(50字以内)
- 用户说"详细解释"时:详细(200字以内)
- 用户说"简单说说"时:极简(20字以内)
坑3:修改 SOUL.md 后不生效
现象:修改了 SOUL.md,但 Agent 行为没变
排查:
# 1. 检查文件路径
ls -la ~/.openclaw/workspace-coding/SOUL.md
# 2. 检查文件语法(无损坏)
head ~/.openclaw/workspace-coding/SOUL.md
# 3. 重启 Gateway
openclaw gateway restart
# 4. 清除缓存
rm -rf ~/.openclaw/workspace-coding/.openclaw/cache
坑4:不同 Agent 回复风格雷同
现象:用户无法区分当前是哪个 Agent
解决:
# 为每个 Agent 添加独特的开场/结束标记
## CodeAgent 特色
- 回复以 "```" 代码块开头
- 使用技术术语("refactor", "optimize")
## WriteAgent 特色
- 回复以具体引用原文开头
- 使用写作术语("narrative", " pacing")
## LifeAgent 特色
- 回复以表情符号开头(⏰ 🌤️ ✅)
- 使用行动导向语言("记得...", "建议...")
FAQ
Q1: SOUL.md 越长越好吗?
不是。过长的 SOUL.md:
-
占用宝贵的上下文窗口 -
关键指令容易被淹没 -
模型遵循率下降
建议长度:500-1500 字
Q2: 可以用中文写 SOUL.md 吗?
可以,但建议:
-
关键指令用英文(模型对英文理解更准) -
示例用目标语言(如中文对话用中文示例)
## Tone(语气)
- 简洁直接
- 友好但不啰嗦
## Example(示例)
用户:你好
助手:你好!有什么可以帮你的?
Q3: 如何测试 SOUL.md 效果?
# 方法1:快速测试
openclaw agent --local --message "测试消息"
# 方法2:隔离测试环境
export OPENCLAW_WORKSPACE=/tmp/test-workspace
mkdir -p $OPENCLAW_WORKSPACE
cp SOUL.md $OPENCLAW_WORKSPACE/
openclaw gateway start
# 方法3:A/B 对比
# 创建两个工作区,使用不同 SOUL.md 版本对比
Q4: 可以动态修改 SOUL.md 吗?
可以,但需要注意:
# 修改 SOUL.md
vim ~/.openclaw/workspace/SOUL.md
# 热重载(无需重启 Gateway)
openclaw gateway reload
# 新会话立即生效
# 已有会话保持原人格直到重置
总结
本文深入讲解了 Agent 身份设计与提示词工程:
|
|
|
|---|---|
| SOUL.md |
|
| 身份文件 |
|
| 提示词原则 |
|
| 人格设计 |
|
| 调试技巧 |
|
关键认知:好的 SOUL.md 不是写一次就完,而是持续迭代的产物——根据实际对话反馈不断优化。
下一篇预告
第16篇:会话管理深度解析
深入 OpenClaw 的会话系统:
-
会话生命周期与状态管理 -
会话隔离与共享机制 -
长会话的上下文维护 -
会话重置与恢复策略
本文是系列第15篇。你已掌握为 Agent 设计独特人格的完整方法。
📌 觉得有用?点个「在看」 👇 👨💻 关注「敏叔侃技术」,每周更新 OpenClaw 实战干货 ⭐ 收藏这篇文章,作为 Agent 人格设计的参考手册
夜雨聆风