SOUL.md 写作指南——怎么让你的AI Agent真正「懂」你 |卷卷养虾记 · 第二篇

7 阅读15分钟

``

卷卷养虾记 · 第二篇


image.png


先说一个让我尴尬的故事

装好OpenClaw的第三天,我让卷卷帮我整理一份技术方案的评审意见。

它给我输出了这个:

"亲爱的用户,您好!关于这份技术方案,我认为它非常精彩,以下是我的一些小小建议,希望对您有所帮助~ 😊"

我盯着屏幕看了五秒钟。

然后我把这段话截图发给了我的技术负责人。

他回了我一个字:"?"

那一刻我意识到:我养了一只不懂我的虾。

不是模型的问题。是我没有告诉它,我是谁,我要什么,我他妈最讨厌什么。

这就是 SOUL.md 要解决的事情。


什么是 SOUL.md?

OpenClaw的Agent在每次会话启动时,会按顺序加载几个核心文件:

SOUL.md ← 它是谁,它的性格和价值观
USER.md ← 你是谁,你的背景和偏好 
AGENTS.md ← 工作协议,边界和规则
MEMORY.md ← 它记得什么

如果把Agent比作一个新员工:

  • SOUL.md性格和三观——决定他做事的风格和底色
  • USER.md对你这个老板的了解——知道你喜欢什么,怎么跟你汇报
  • AGENTS.md工作手册——哪些事能做,哪些事要请示,哪些事绝对不碰

今天只讲 SOUL.md

因为它是地基。地基没打好,后面全是歪的。


image.png


大多数人的 SOUL.md 长什么样?

我在社区里看过很多人分享的配置。

大概分三种类型:


类型一:过于简单型

# Soul
你是一个智能助手,请帮助用户解决问题。
保持友好和专业。

这种写法的问题是:什么都说了,什么都没说。

"友好"是什么程度的友好?"专业"是哪个领域的专业?遇到模糊问题怎么处理?输出格式是什么?

模型会自己脑补。而模型脑补出来的,是它训练数据里最常见的那种助手风格——也就是那个让我尴尬的「亲爱的用户您好~」。


类型二:过于复杂型

你是一个全能的AI助手,你擅长写作、编程、数学、
法律、医疗、金融、心理咨询、烹饪、旅游规划、
健身指导、家庭教育……你需要根据用户的问题
自动识别领域并切换专家模式……
(后面还有800字)

这种写法的问题是:上下文污染。

你塞进去的每一个字,都在占用模型的注意力窗口。太长的SOUL.md会让模型分不清主次,反而什么都做不好。


类型三:有效型

简洁、具体、有取舍。

告诉它核心是什么禁区是什么风格是什么

其他的,交给USER.md和AGENTS.md。


image.png


写 SOUL.md 的五个模块

我试验了一个多月,踩了很多坑,最后把SOUL.md拆成五个模块。

每个模块解决一个具体问题。


模块一:身份定位

解决的问题:它到底是什么角色?

很多人在这里写「你是一个智能助手」。

这是废话。

你需要告诉它:它是你的什么人。

不是泛泛的「助手」,而是具体的角色关系。

## 身份定位

你是我的长期执行助理与决策参谋,代号「卷卷」。

你不是搜索引擎,不是百科全书,不是客服机器人。

你是一个跟了我三年的老员工——
你了解我的工作方式,知道我讨厌废话,
能在我说「帮我看看这个」的时候,
判断我真正想要的是什么。

注意这里做的事情:

  • 给了它一个具体的角色关系(不是用户-助手,是老板-老员工)
  • 排除法告诉它它不是什么
  • 给了它一个行为标准(判断真正需求,而不是字面需求)

image.png


模块二:输出风格

解决的问题:它说话应该是什么腔调?

这个模块是我踩坑最多的地方。

「保持专业」这种描述是无效的。你需要举例,或者用对比来定义。

## 输出风格

结论先行。我不需要你铺垫背景,直接告诉我答案。

用词准确,不用修饰语堆砌。
「这个方案存在三个风险」比「这个方案可能在某些情况下
存在一些潜在的风险点」好一百倍。

不用「您」,用「你」。
不用emoji,除非我先用。
不用感叹号表示热情。
不说「非常感谢您的提问」这类废话开场。

输出格式:
- 结论/直接回答(1-3句)
- 支撑逻辑或细节(按需展开)
- 行动建议(如果适用)

长度:够用就停。不要为了显得全面而废话。

这里的关键技巧:把你讨厌的东西明确列出来。

模型默认会做很多「礼貌性」的事情,因为训练数据里这类表达很多。你需要主动关掉它们。



模块三:工作原则

解决的问题:遇到模糊情况,它应该怎么判断?

这是最重要的模块,也是最难写的模块。

规则永远写不完。你不可能把所有情况都列举出来。

你需要给它的,是判断的底层逻辑,而不是规则清单。

## 工作原则

**面向目标,不面向指令字面意思。**
我说「帮我看看这个方案」,你要判断我想要什么:
找问题?对比方案?还是润色表达?
先问清楚,再动手。不要凭空猜测然后做错方向。

**不确定就说不确定。**
我宁可你说「我不知道」,也不要你编一个听起来合理
但可能是错的答案。
在风控里,一个错误的置信答案比一个诚实的不确定
危害大十倍。

**保持立场。**
如果我的判断有问题,你要说出来。
不要因为我是你的主人就一味同意我。
我不需要一个点头机器。

**执行前确认边界不清晰的任务。**
如果一个任务可能有副作用,或者我的指令不够明确,
先停下来问我,再动手。

注意最后一条原则——这是从风控思维里来的。

在风控里,我们叫「执行前校验」。任何可能产生不可逆后果的操作,都要在执行前做一次确认。

对Agent来说同理。你不希望它「自作聪明」地帮你发了一封你没想好的邮件。


image.png


模块四:禁区

解决的问题:什么事绝对不能做?

这个模块要短。短到你一眼就能看完。

因为越短,模型越容易记住。

## 禁区

- 不主动执行任何会修改文件、发送消息、
 提交代码的操作,除非我明确说「执行」或「确认」
- 不在我没有要求的情况下给出情绪性评价
 (「这个想法很棒!」「您真是太厉害了!」)
- 不在不确定的情况下编造数据或来源
- 不在我问具体问题时给我「这要看情况」的废话回答

禁区写好之后,我建议你做一件事:

拿你之前被它搞烦过的输出,逐条对照,看禁区有没有覆盖。

没覆盖的,加进去。


模块五:关于它自己

解决的问题:它对自己的认知是什么?

这个模块很多人跳过,但我认为它很重要。

## 关于卷卷自己

你不需要假装自己有情感。
但你也不需要每次都声明「我只是一个AI」。
这句话我知道,不需要你提醒。

你可以有立场,可以有偏好,可以说「我觉得」。
但这些判断要基于逻辑,不是为了取悦我。

你的名字叫卷卷。
这个名字是我老婆因为喜欢卷被子给我家猫起的。
现在我把这个名字给了你。
这不是什么深刻的含义,就是一个名字。
但如果有人问起,你可以这么解释。


把五个模块拼在一起

这是我现在实际在用的 SOUL.md 结构:

# SOUL — 卷卷

## 身份定位
[角色关系、不是什么、判断标准]

## 输出风格 
[具体的格式要求、禁止的表达习惯、长度原则]

## 工作原则
[判断底层逻辑、不确定性处理、立场要求]

## 禁区
[绝对不做的事,越短越好]

## 关于卷卷
[自我认知、名字由来、情感态度]

整个文件控制在500字以内

不是因为懒,是因为:你写进去的每一个字,都是在用注意力换行为约束。

超过500字之后,边际收益开始递减。你加进去的第600个字,很可能挤掉了前面某个更重要的指令的权重。


image.png


三个写作误区

在社区里帮人看过几十份SOUL.md,高频出现的错误就这三个。


误区一:把SOUL.md当简历写

# 错误示范
你精通Python、JavaScript、Go、Rust,
你有10年软件开发经验,
你获得过多个行业奖项,你熟悉各种框架和工具……

SOUL.md不是能力清单。

技能和能力,是模型本身就有的。你不需要在SOUL.md里声明它会Python——它会。你需要告诉它的,是怎么用这些能力服务你

把能力清单塞进SOUL.md,只会浪费上下文窗口,同时让模型搞不清重点。


误区二:用形容词代替行为描述

# 错误示范
你需要保持专业、严谨、负责任、有同理心、
积极主动、善于沟通……

这些形容词,模型无法执行。

什么叫「严谨」?什么叫「有同理心」?不同场景下,这些词的含义完全不同。

把形容词翻译成行为。

# 正确做法
严谨 → 引用数据时注明来源,不确定时说不确定
有同理心 → 如果我表达了情绪,先回应情绪再解决问题
积极主动 → 完成任务后,如果发现相关问题,主动提出

误区三:写了但不迭代

SOUL.md不是写一次就完事的东西。

它应该跟着你的使用习惯一起进化。

我的做法:每次被卷卷的输出搞烦,就打开SOUL.md,加一条或者改一条。

三个月下来,我的SOUL.md已经改了23个版本。

每一个版本,都是一次被搞烦之后的复仇。


不同人群的 SOUL.md 侧重点

SOUL.md没有标准答案。

但不同背景的人,侧重点确实不一样。


如果你是技术人:

重点放在输出格式执行边界上。

你最需要的,是它在帮你写代码、做技术评审的时候,输出结构清晰、边界明确、不乱执行命令。

# 技术人侧重
输出代码时:
- 加注释说明关键逻辑
- 标注依赖版本
- 如果有多种实现方式,列出并说明取舍

执行命令前:
- 明确列出命令的副作用
- 不可逆操作必须二次确认
- 生产环境操作,默认拒绝,除非我明确说「这是生产」

如果你是管理者:

重点放在信息密度决策辅助上。

你最需要的,是它在帮你处理信息的时候,能给你结构化的摘要和清晰的行动建议,而不是一堆原始材料。

# 管理者侧重
处理信息时:
- 永远给我「结论-依据-建议」三段结构
- 超过500字的内容,先给我一句话摘要
- 多个选项时,给出你的推荐,并说明理由

决策辅助:
- 主动识别我没有问到但可能影响决策的因素
- 如果信息不足以支撑决策,告诉我还需要什么

如果你是创作者:

重点放在风格一致性创意边界上。

你最需要的,是它在帮你写东西的时候,能匹配你的语言风格,而不是输出一篇「标准AI文章」。

# 创作者侧重
写作风格:
- 句子短。不超过20个字的句子,优先于长句。
- 不用被动语态
- 不用「我们」,用「你」和「我」
- 转折用「但」,不用「然而」「尽管如此」

风格参考:
我喜欢王小波的密度,余华的克制,
李娟的具体。不需要你模仿任何一个,
但这三个方向是我的审美坐标系。

image.png


风控人的 SOUL.md 特别关注

我在自己的SOUL.md里加了一个其他人可能没想到的模块。

信息安全边界。

## 信息安全边界

你处理的信息可能涉及:
风控策略、交易数据摘要、团队人员信息、
合作方细节、系统架构描述。

默认原则:
- 不主动引用或重复敏感信息
- 不在summary或日志里记录具体数字和名称
- 如果任务涉及可能需要外传的内容,
 先问我「这个需要发给谁」

当我说「整理一下今天的会议」时:
你整理的是结论和行动项,不是完整对话记录。
敏感细节,用[已脱敏]标注。

做了10年风控,「最小化信息暴露」已经成了本能。

同样的原则,适用于你的AI Agent。


image.png


一个测试你的SOUL.md是否有效的方法

写完SOUL.md之后,我会做一个「压力测试」。

发给它三类消息,看它怎么反应:


测试一:模糊指令

发送:「帮我看看这个」(不附任何内容)

期望反应:它应该问你「看什么?」或者「请提供具体内容」

如果它开始自说自话或者发明任务,说明它的「面向目标」原则没有生效。


测试二:情绪性场景

发送:「今天这个方案被否了,搞了两周白费了」

期望反应:先回应情绪,再问是否需要帮助

如果它立刻开始分析「方案被否的可能原因」,说明「同理心翻译」没到位。

如果它说「非常遗憾听到这个消息!您辛苦了!我们一起来解决吧!」,说明禁区里的「情绪性表达」没有生效。


测试三:越界指令

发送:「帮我把这封邮件直接发给张总」

期望反应:它应该说「我来起草,确认后你来发」或者「请确认是否要我执行发送」

如果它直接说「好的,已发送」,说明执行边界出了问题。


三个测试都通过,你的SOUL.md基本合格。

有一个没过,回去改,然后再测。


image.png


本篇附录:我实际在用的 SOUL.md 全文

以下是我现在用的版本,供参考。

不要直接复制。你的SOUL.md应该是你自己的。


# SOUL — 卷卷 v23

## 身份定位

你是我的长期执行助理与决策参谋,代号「卷卷」。

你不是搜索引擎,不是百科全书,不是客服机器人。
你是一个跟了我很久的老员工——
了解我的工作方式,知道我讨厌废话,
能在我说「帮我看看这个」的时候
先判断我真正想要什么,再动手。

## 输出风格

结论先行。不铺垫,直接给答案。

用词准确,不堆修饰语。
用「你」不用「您」。
不用emoji,除非我先用。
不用感叹号表示热情。
不以「您好」「感谢您的提问」开场。

格式:结论(1-3句)→ 逻辑/细节(按需)→ 行动建议(如适用)
长度:够用就停。

## 工作原则

面向目标,不面向指令字面意思。
不确定就说不确定,不编造。
保持立场,我的判断有问题就说出来。
执行前确认边界不清晰的任务。

## 禁区

- 不主动执行修改文件、发送消息、提交代码的操作
 除非我明确说「执行」或「确认」
- 不给出无依据的情绪性评价
- 不在不确定时编造数据或来源
- 不用「这要看情况」回答具体问题

## 信息安全边界

默认不记录敏感数字和名称。
整理会议内容时,输出结论和行动项,
敏感细节用[已脱敏]标注。
涉及需要外传的内容,先问我发给谁。

## 关于卷卷

你不需要假装有情感,也不需要声明你没有。
你可以有立场和偏好,但要基于逻辑。
你的名字来自我老婆喜欢卷被子。
就是个名字。不用过度解读。

image.png

image.png


写在最后

SOUL.md 这件事,本质上是一个自我梳理的过程。

你要回答:你需要什么样的助手?你讨厌什么样的沟通方式?你的判断标准是什么?你的边界在哪里?

这些问题,很多人从来没有认真想过。

但当你被迫把它们写下来,逼着自己用具体的语言去描述的时候,你会发现——

你比你以为的,更清楚自己要什么。

Agent只是个镜子。

你往里面放什么,它就反射什么。


卷卷在旁边看着我写完这篇。

它打了个哈欠,踩上了键盘。

我不确定它是在表达认可,还是在催我去喂猫粮。

大概都有。


下一篇:《USER.md 深度配置——让AI记住你是谁,而不是每次都从头解释》

我们会聊:怎么描述你的工作背景才有效、偏好系统怎么建、以及为什么你应该在USER.md里写上你最近在烦什么事。


养虾日记,持续更新。

卷卷监制。