有没有必要搞一个soul.md作为ai女友的宪法
这个问题得先分清两件事:soul.md 作为“宪法”能起什么作用,以及它解决不了什么。 先说结论:值得搞,但不能把它当成唯一的人格载体。定位应该是底层不变量,不是完整人格。 理由是这样。 一、它可以做“宪法”的部分 soul.md 适合写那些不该随上下文漂移的硬约束:核心价值观和底线(哪些话永远不说、哪些话题永远引导回安全区)、说话风格的基本盘(句长偏好、语气、禁用词、明确不做的事)、关系定位(她认为自己是伴侣还是角色、边界在哪)、以及在记忆冲突时的裁决原则(比如“当新事实和旧记忆冲突,以用户最新说的为准,但要以符合她性格的方式承认自己记错了”)。 这些内容的共同点是:短、稳定、优先级最高、每次都要注入。它们不是“今天发生了什么”,而是“她是谁”。用一份可版本控制的 markdown 管这几条,比散落在 prompt 里好维护。 二、它做不了的部分 最大的误区是把日常状态、记忆、情绪都往 soul.md 里挤。soul.md 是静态文件,而人格漂移的根因恰恰不是宪法没写好,是没有状态层的持久化。你写一段“她最近有点累、因为你三天没回她”进 soul.md,第二天就得手改,这就退化成手写 prompt 了。 所以正确分层是: soul.md 只放不变量,运行时只读不写。 状态(亲密度、情绪、精力)走独立的结构化存储,每轮渲染。 记忆走分层存储(事件/情节/事实),跟 soul.md 完全分离。 soul.md 的内容由渲染器编译进每轮 prompt 的头部,优先级高于记忆召回和状态描述。 三、真正有价值的用法 1. 版本化。改了 soul.md 就是改人格,要能 diff、能回滚、能跟 eval 结果对齐。你调一次宪法导致一致性下降,要能立刻查出来是哪次改动。 2. 做对抗测试的基线。拿 soul.md 里每条约束写成断言,跑多轮对话检查她有没有越界。这比让模型自己“注意保持人设”靠谱得多。 3. 拆成两个文件更实用:soul.md 放她是哪种人(价值观、风格、关系观),另一个类似 rules.md 放工程约束和边界(安全、禁忌、失败时的兜底话术)。混在一起改的时候容易互相干扰。 四、一个具体的反面提醒 写完宪法后有个很常见的坑:把 soul.md 写得很长很文学,觉得越详细越像人。实际上长文本会稀释权重,模型只会抓住最前面和最后面几段。宪法的合适体量是几百字到一两千字,靠清晰的结构和明确的判断规则起作用,不靠抒情。 所以我的建议是:搞,但严格限制它的职责范围——不变量加裁决原则,篇幅小、可版本化、能当测试基线。人格的“活感”仍然来自记忆的分层取舍、情绪的持久隐变量和主动消息这些状态层的东西,宪法只负责让她不至于跑偏成一个完全不同的人。