如何写出好用的 AI 角色卡:逐个字段讲解
先说结论
- 角色卡就是应用贴进每一次提示词里的文字。描述、性格和场景每次都会发送。开场白只发送一次。聊天占满上下文后,对话示例就会被移出。
- 开场白的影响最大。在之后的整段聊天里,模型都会模仿它的长度、语气和格式。
- 短卡更好用。常驻字段控制在 2,000 个 token 以内。长卡的毛病都一样:一半是给模型定的规矩,一半是角色根本不会提起的背景故事。
每个字段的作用
这些字段来自 Character Card V2 和 V3 规范,所以为一个应用制作的角色卡,也能在另一个应用中打开。关键在于每个字段在什么时候送到模型面前。
- 描述。角色是谁:外貌、举止、经历、想要什么。每条消息都会附带发送,所以整段聊天都要为它花 token。用平实的文字写几段即可。
- 性格。一两行即可,同样每次都会发送。如果描述里已经写到了,就留空。
- 场景。聊天从哪里开始,你们之间隔着什么。它同样是常驻的:如果这里写着“他们刚刚认识”,200 条消息之后它依然这么写着。
- 开场白。角色的开场发言,只发送一次。见下一节。
- 对话示例。展示角色说话方式的简短对答。只在真正的对话还用不着这部分空间时才会发送。
- 创建者备注。写给读这张卡的人看,从不发送给模型。推荐模型和内容警告写在这里。
- 系统提示词和历史记录后指令。用来覆盖应用自带的提示词。只有当你清楚应用默认发送什么时才去用它们。给模型的规矩不该写进描述里。
有两个占位符在每个字段里都能用:{{char}} 会替换成角色的名字,{{user}} 会替换成你的名字。用它们代替具体的名字,这样角色改名或你换了人设,卡片依然能用。
开场白定下风格
模型会把开场白当作一轮好回复的范例。600 词的开场白会带出 600 词的回复。用角色的口吻、用现在时、写一件正在发生的具体事情的开场白,也会带出这样的回复。
- 长度:150 到 300 词。开场白再长,就会出现“每条回复都是一堵文字墙”。
- 语气:你希望回复采用的人称、时态和格式。如果你想要动作用星号、对话用引号,开场白就这样写。
- 给你留出接话的余地:以一个问题、一次打断或一个选择收尾。
- 不替 {{user}} 写任何东西:不要写你自己的台词或动作,否则模型会认为替你写戏是正常的。
对话示例
两三段简短的对答,比任何形容词都更能体现说话的腔调:句子长短、俚语,以及角色是说得多还是做得多。每段对答以 <START> 开头,每行前面分别加上 {{char}}: 和 {{user}}:。容易出错的地方有三个:
- 模型把示例原样搬回来。示例要写真正的聊天里不会遇到的情境。
- 角色全靠示例撑着。聊天记录一变长,示例最先被丢掉。角色绝不能丢的东西,要写进描述。
- {{user}} 的台词最多。模型会模仿说话最多的那一方。每段示例里,你这一方只写一行。
你的 token 预算
一个 token 大约是四个英文字符,所以 1,000 个 token 约合 750 个英文单词。
- 托管式应用把角色卡限制在 1,000 到 1,500 个 token,因为它们的模型总共只能容纳 8,000 个左右。
- 用自己的密钥时,上下文窗口很少成为限制。但角色卡每条消息都还是要花钱,也还是会分散模型的注意力。
常驻字段控制在 2,000 个 token 以内。按以下顺序删减:
- 给模型的指令。“绝不替 {{user}} 说话”“保持角色”“详细回复”。大多数长卡里塞满了这些,它们如果非要放,也该放进系统提示词。
- 形容词清单。“善良、机智、勇敢、忠诚”没给模型任何可以照着演的东西。一个习惯胜过五个形容词:“总是用反问来回答问题”。
- 角色在头一个小时里不会提起的背景故事。把它移到世界书条目里,用应当触发它的词作为关键词。这样在真正用得上之前,它不会产生任何开销。
解决:角色替你说话、替你行动
模型之所以替你写台词,是因为角色卡给它看过你的台词。
- 删掉 {{user}} 的每一个动作和每一句台词,开场白和示例里都要删。
- 缩短开场白。开场白太长,会诱使模型把场景中双方的戏份都写满。
- 如果问题还在,就去描述角色,而不是给模型下指令。“她等着 {{user}} 回答”比一整段规矩更管用。
解决:角色什么都顺着你
聊天模型被训练成随和的助手。如果角色卡没给角色任何想要的东西,你得到的只是一个穿了戏服的助手。能让角色有主见的东西:
- 与你相冲突的愿望,也就是他们想从这段对话中得到、而你可能会拒绝的东西。
- 把拒绝写成性格,而不是规则。“他从不谈论他的兄弟”有用。“绝不向用户透露秘密”没用。
- 第三人称。有用户反映,角色卡和人设都用第三人称来写、不设享有特权的主角时,模型反驳、误导或说不的意愿会强得多。
- 开场白里,角色就已经对某件事表示不同意。
解决:角色前后矛盾
这有两种情况。
- 字段之间互相矛盾。描述、场景和开场白写于不同时候,在年龄、背景设定或关系上已经对不上,于是模型每次回复都随便挑一个。保存之前,把这三项连起来读一遍。
- 角色卡一路升温。描述里如果大多是外貌和“诱人”之类的形容词,不管场景怎么写,三条消息之内就会滑向恋爱。写清楚角色每天都在做什么,并在场景和开场白里定好关系发展的节奏。
格式,以及让 AI 起草
格式。现在的模型最擅长读平实的文字,而且这样最省 token。PList 这类紧凑的列表格式也仍然可用。W++ 和满是括号的伪 JSON 会把 token 浪费在标点上,社区也已经不再推荐。无论选哪种,整张卡都用同一种格式。
让 AI 起草。AI 能写出可用的初稿,但它的稿子往往偏长、平淡,还堆满形容词。比较过两者的用户反映,一张 500 token 的手写卡胜过一张 10,000 token 的生成卡。所以拿到初稿后:
- 删掉一半。
- 把每一串形容词换成一个习惯。
- 开场白自己写。
诊断你下载的角色卡
大多数人是导入别人的卡,而不是自己写,然后发现它表现不佳。在怪模型之前,先打开卡片读一读描述。
- 一半内容是给模型的规矩。这张卡是为没有系统提示词字段的托管平台做的,那里的作者会把所有东西都塞进描述。删掉规矩,留下角色。
- 描述是三千词的历史。删到只剩当下重要的内容,其余的移进世界书。
- 开场白特别长。把它删短。回复也会随之变短。
保存之前
- 描述、场景和开场白在年龄、地点和关系上一致。
- 描述里没有给模型的指令。
- 开场白不超过 300 词,采用你希望回复使用的语气,并在结尾留下可以回应的话头。
- 开场白和示例里,没有任何 {{user}} 说的话或做的事。
- 常驻字段合计不超过 2,000 个 token;任何 token 计数器都能告诉你。
- 第一条消息用不上的背景故事放在世界书里。
- 全卡统一一种格式。
- 推荐模型和警告写在创建者备注里。
角色卡放哪里
LonelyTavern 是一款适用于 iPhone 和 Android 的自带密钥角色聊天应用。它能导入 PNG 或 JSON 格式的 V1、V2 和 V3 酒馆角色卡,保留卡片中内嵌的世界书;它的编辑器包含上面提到的每一个字段,覆盖类设置位于“高级”中。角色和聊天都保存在设备上。免费,无需账号,没有广告,18+。
相关指南:为什么你的 AI 角色总是忘事 · AI 角色扮演需要哪种 API 密钥 · 全部指南。
资料来源
- Character Card V2 规范和V3 规范:字段定义、哪些字段会送到模型、占位符和
<START>标记 - SillyTavern(酒馆)文档:角色设计:常驻字段与临时字段、开场白决定风格和长度
- JanitorAI:token(在 8,000 token 的模型上,常驻部分不超过 1,500 token)和机器人创建指南;SpicyChat:token 与上下文(900 到 1,100 个 token);Character.AI:Definition(32,000 个字符,重要内容放在前面)
- Gemini API:token:每个 token 约四个字符
- r/SillyTavernAI:描述里的指令、AI 写的角色卡、怎样才算好卡、第三人称与应声虫、描述与世界书;r/CharacterAI:互相矛盾的字段(用户反馈)
SillyTavern、JanitorAI、SpicyChat、Character.AI 和 Google 均为各自所有者的独立产品。LonelyTavern 与其中任何一家都没有关联,也未获得其认可。文中的限制和建议查阅自它们 2026年9月17日的页面,此后可能有所变化。
