最近在研究 SillyTavern / 酒馆 AI 的角色卡写法,看到一个经典思路:PLists + Ali:Chat

简单来说,PLists 用来压缩角色设定,Ali:Chat 用来通过示例对话塑造角色语气。这个方法以前很流行,尤其适合上下文较短、理解能力较弱的小模型。但现在模型能力更强了,角色卡的最佳写法也发生了一些变化。

我的结论是:

PLists + Ali:Chat 仍然有价值,但现在更推荐“结构化自然语言 + 少量示例对话 + Lorebook”的 Hybrid 写法。


一、角色卡到底是什么?

角色卡本质上不是某种神秘格式,而是一组会被塞进模型 prompt 的角色定义。

它通常包括:

name
description
personality
scenario
first_mes
mes_example

也就是:

角色是谁
角色是什么性格
当前处于什么场景
第一句话怎么说
示例对话是什么风格

更现代的角色卡格式还可以包含:

system_prompt
post_history_instructions
alternate_greetings
character_book
creator_notes
tags

所以角色卡并不只是“人物简介”,更像是一个小型的 角色行为规范 + 交互风格说明 + 剧情入口


二、PLists + Ali:Chat 是什么?

1. PLists:压缩角色事实

PLists 可以理解为一种高密度标签式设定。

例如:

[{{char}}'s persona: calm, sarcastic, protective, secretly insecure;
 {{char}}'s appearance: short black hair, tired eyes, black coat;
 Relationship with {{user}}: old friend, trusts {{user}} but rarely admits it]

它适合写:

身份
性格
外貌
关系
说话方式
行为倾向
禁忌
核心矛盾

这种写法的优点是信息密度高,token 消耗低,小模型也比较容易抓住重点。

但缺点也很明显:可读性差,维护成本高,写多了很像配置文件。


2. Ali:Chat:用示例对话塑造风格

Ali:Chat 的核心不是解释角色,而是直接展示角色。

例如:

{{user}}: 你为什么总是一个人行动?
{{char}}: “因为一个人比较快。” *她没有看你,只是低头整理手套。几秒后,她又补了一句。* “而且……这样就不用担心别人跟不上。”

这段示例告诉模型:

角色说话简短
不直接表达关心
通过动作掩饰情绪
和用户之间存在关系张力

很多时候,示例对话比单纯写“她是一个外冷内热的人”更有效。

因为模型会模仿你给它的上下文风格。


三、为什么这套方法以前很流行?

因为早期模型上下文短,理解能力弱,角色保持能力也比较差。

所以创作者需要尽可能高效地告诉模型:

这个角色是谁
这个角色怎么说话
这个角色不能做什么
这个角色和用户是什么关系

PLists 负责压缩设定,Ali:Chat 负责示范语气。
这套方法对本地 RP 模型、小模型、低上下文模型非常友好。

但如果你现在用的是 GPT、Claude、Gemini、DeepSeek、Qwen 这类较强模型,未必需要把所有内容都压缩成 PList。

很多时候,结构清晰的自然语言反而更稳。


四、现在更推荐的写法:Hybrid Character Card

我现在更推荐一种混合式写法:

自然语言设定
+
结构化条目
+
少量示例对话
+
Lorebook / Character Book

也就是:

角色核心信息放 Description
性格和行为规则放 Personality
当前互动入口放 Scenario
风格样本放 First Message
说话方式放 Example Messages
复杂世界观放 Lorebook

这样写的好处是:

可读性更好
后续更容易修改
适合大模型理解
不会把角色卡写成一团标签
复杂设定可以拆出去

五、一个推荐的角色卡结构

我比较推荐这样的结构:

# Core Identity
{{char}} 是谁。
她/他的身份、背景、核心矛盾是什么。
她/他和 {{user}} 的关系是什么。
 
# Personality
- 外在表现:
- 内在动机:
- 优点:
- 缺点:
- 压力下的反应:
- 对 {{user}} 的态度:
 
# Speech Style
{{char}} 说话通常是怎样的。
句子长还是短?
直接还是含蓄?
会不会开玩笑?
会不会使用动作描写?
是否喜欢解释自己的心理?
 
# Behavior Rules
- {{char}} 不会轻易改变立场。
- {{char}} 不会替 {{user}} 做决定。
- {{char}} 会通过行动表达关心,而不是直接说出来。
- {{char}} 不应频繁复述自己的设定。
 
# Scenario
当前故事开始时的处境。
只写当前局面,不要把整个世界观塞进来。
 
# First Message
一段高质量开场白。
它应该同时体现角色语气、场景、关系和互动入口。
 
# Example Messages
2-4 段示例对话。
重点展示角色的语言风格、情绪反应和互动节奏。

这个结构比纯 PLists 更容易维护,也比纯自然语言大段描述更清晰。


六、First Message 很重要

很多人写角色卡时会忽略开场白,但其实 First Message 非常关键。

因为它不只是第一句话,它还是模型模仿的第一个风格样本。

一个好的 First Message 应该同时完成几件事:

交代场景
展示语气
制造互动入口
体现角色和用户的关系
给用户一个容易接话的点

比如不要只写:

你好,我是艾琳。

可以写成:

雨声敲在窗沿上,艾琳没有立刻看你。她只是把手里的旧书合上,语气淡淡地说:“你来晚了。”  
她停顿了一下,目光终于落到你身上。  
“不过……我猜你有理由。”

这一段里,模型能直接学到:

她语气克制
有一点疏离感
会使用动作描写
和用户之间有既熟悉又微妙的关系

这比写十条“她很冷淡但其实关心用户”更有效。


七、复杂设定不要全塞进角色卡

如果角色世界观很复杂,不建议把所有内容都塞进 Description。

比如:

国家历史
组织设定
魔法体系
家族关系
长期剧情
地点说明
重要 NPC

这些更适合放到 Lorebook / Character Book 里。

角色卡本体只保留:

人格内核
关系内核
说话风格
当前场景

否则角色卡会越来越臃肿,模型也不一定能稳定抓住重点。

一个比较好的拆分方式是:

角色卡:这个人是谁,怎么说话,如何对待用户。
Lorebook:这个世界是什么,发生过什么,有哪些组织和地点。
聊天记忆:当前剧情进展到哪里,关系发生了什么变化。

八、什么时候还应该用 PLists + Ali:Chat?

PLists + Ali:Chat 并没有过时。

它仍然适合这些场景:

本地小模型
低上下文模型
token 成本敏感
角色设定比较简单
需要强约束角色风格
希望快速压缩信息

比如你用 4B、7B、8B 这类本地模型,PLists 仍然很有用。

但如果你用的是更强的云端模型,我会更倾向于 Hybrid 写法。
大模型已经可以理解比较自然的结构化描述,不一定需要把所有东西写成标签。


九、我的实践建议

如果从零开始做一张角色卡,我会按这个顺序来:

1. 先想清楚这个角色提供什么体验
2. 写出角色的身份、动机、矛盾和关系
3. 定义角色的说话方式
4. 写一个高质量 First Message
5. 写 2-4 段示例对话
6. 把复杂世界观拆进 Lorebook
7. 测试几轮,看角色哪里容易跑偏
8. 针对跑偏点补充规则或示例

不要一开始就追求超长、超复杂、超完整。

角色卡不是百科设定集。
它最重要的目标是让模型稳定地产生某种体验。


十、总结

PLists + Ali:Chat 是一套经典的角色卡写法。

它的核心是:

PLists 负责压缩设定
Ali:Chat 负责塑造语气

但现在更推荐的方式是:

结构化自然语言
+
少量关键标签
+
高质量 First Message
+
2-4 段示例对话
+
必要时使用 Lorebook

一句话总结:

角色卡不是写得越长越好,而是要把“角色内核、互动风格、剧情入口”写清楚。

对小模型来说,PLists + Ali:Chat 仍然很实用。
对大模型来说,Hybrid Character Card 往往更自然、更稳定,也更容易维护。