本教程基于个人经验编写
写在一切之前 常常看到很多人在问"怎么写角色卡",但其实写角色卡并不难,难的是设计角色并把她用文字具象化的描述出来,也就是编写角色卡的"编"角色与"写角色"。但是通常而言,大家只能"编"角色,但不能很好的把角色"写"下来,本教程将尽量告诉您怎么"编"与怎么"写"
怎么"编"角色 为什么先编再写? "编写" 的 "编" 在 "写" 之前是因为你得先明确好"角色",才能把Ta "写"出来,用提示词具象化 也就对应了我个人提示词原则的 "提示词是为了达成目而提出的,在不明确目的之前,任何提示词都达不到你想要的效果"
如何编角色 编角色的捷径 对于大部分人而言,如果只是编一个符合自己性取向的角色,则可以直接询问ChatGPT/Claude等大语言模型,你的性取向大概率在各类文学作品中均有体现,并且相对于门外汉而言,作品的角色由作者进行塑造,会更加立体
但同时,由于每个人的性偏好不一样,所以不一定有能够完美符合自己XP的角色,此时上面提到的内容就可以作为参考存在
那么如何设计一个自己的角色 在这之前,我们需要知道一个角色包含了什么特征,我个人将其分为外在与内在
外在 即为你所"看到"的角色,包含角色的发型身材衣着习惯 内在 即为你所"感受到"的角色,包含角色的性格特点 以下为最基本的设计内容
外在 体型 发型 衣物 所属种族 内在 所属派系(慵懒/小恶魔等) 是否反差 对你的态度 一些特殊的小设定 怎么写 通常而言,我推荐使用Json进行编写,Json在大多数模型的表现下效果均不错,具有以下优点
所属关系明确 不同元素指之间的隔离性强 在有编辑器的情况下可读性强 这只是一个建议
如果您希望让GPT/Claude来编写角色,则需要考虑模型偏好(Claude喜好XML,GPT喜好Json等),否则格式化文本输出效果可能不如预期
上面的内容仅仅为建议
说Json好只是个人使用体感好,请以自己实际使用习惯为准
{
"角色A":{
"被催眠后反应":"XXX"
...
},
"角色B":{
"被催眠后反应":"XXX"
...
}
}
在上面的示例中,我们采用催眠进行示例是因为催眠收到模型本身预训练的影响,已经与"强制发情"进行了绑定
Json将被催眠后的反应分别于其上级的A/B绑定,并使得"催眠"的效果被限定在了"A/B被催眠后的反应",脱离了原来的"催眠"被绑定的"强制发情"语意
写的技巧 示例 受限于每个人的词汇储备与提示词技能或模型理解能力,模型并不能很好的理解你想要的效果,此时就需要FST(少样本提示)
FST是能提升模型能力最简单粗暴的方法
说人话,FST就是"示例",这个"示例"可以是各个方面的,比如 A喜欢像"哎呀,你怎么这么坏啊"说话,其中我们可控的FST有写"角色"时的示例输出,Greeting(角色第一句话),不可控的有预设中的文风设计,上下文聊天记录。它可以有效的让模型理解你想要什么样子的输出(也就是原则中的明确目的)
我们通常以各种方式构建FST,FST最重要的不是什么高端的提示词设计,而是"示例"本身,一个符合你要求的明确的示例可以事半功倍,一个模糊不清与要求相悖的示例能让你南辕北辙
这时候,就有人要问了,我不会写示例怎么办? AI是你最好的伙伴之一,你可以先按照上文提到的 编角色的捷径 的相关思路去询问CHatGPT/Claude等,要求他们提供示例,这示例不就来了
注意不建议使用目标模型进行示例编写
容易过拟合导致效果不佳,失去原本的灵活性
那么就有人问了,示例放在哪边? 示例应该要放在相关的指令的同级/下级
{
"角色A":{
"被催眠后反应":{
"反应": "XXX",
"示例": "XXX"
}
...
}
}
给出原因并导出结果 通常而言,大部分人写卡总会遗漏背景,一个角色的性格多多少少会受到过往性格的影响,而给出这个角色为什么变成这样子,则可以更好的丰富角色,例如
{
"角色A":{
"喜欢吃的东西": {
"食物": "饺子",
"原因": "因为听已经过世的奶奶说,吃到带有硬币的饺子能实现一个愿望,想要用愿望复活奶奶"
}
}
...
}
或者
{
"角色A":{
"喜欢吃的东西": "饺子,因为听已经过世的奶奶说,吃到带有硬币的饺子能实现一个愿望"
}
...
}
进一步美化角色卡 本部分不包含前端助手,只讲解状态栏美化
有时候大家会发现某些角色卡拥有超级好看的状态栏,他们是如何实现的?
答:
酒馆内置了html显示与正则表达式的,即可以通过让AI输出指定格式的内容,并使用正则表达式匹配为Html格式的内容 因此我们将流程总结为 设计UI Claude/DeepSeek的效果不错 编写正则表达式 各大LLM的效果均不错 AI输出指定格式的内容,被正则表达式匹配并替换为HTML格式 设计流程 这部分需要明确,个人建议在要求Claude/DeepSeek进行设计实现时,要求自包含+模块化,使用占位符代替具体内容
正则表达式编写 通过询问Claude/DeepSeek,你大概可以得知模块化的模块是什么 这点很重要,当模块配置错误,可能导致状态栏无法正常显示等问题
示例 状态栏美化,点我直接下载 以下为状态栏的触发格式
[name:落雪]
(条块头)
[favor:50]
(条块尾/数块头)
[Encounters:7]
(数块尾/描述头)
[psychological feeling:这是变态吧!]
以下为状态栏预览
若您直接使用了上述的状态栏,请附带上本文档链接
千言万语不如你实践一次
正则介绍
脚本名称 脚本名称随意填写 查找正则表达式 为正则内容,匹配文本 修剪掉 删除掉匹配到的内容的不需要的部分 替换为 被正则表达式匹配到的内容会被替换为这个框内的东西 影响 字面意思,对哪些输出进行匹配 其他选项 仅格式显示: 匹配到后替换的内容将只用于酒馆显示,发送给AI的是未匹配的原文 仅格式提示词: 匹配并替换后的内容会被发送给AI 怎么写? 你与其问我不如去问问GPT/Claude
小结语 至此,恭喜您已经了解了最基本的角色卡的制作流程,依据此流程可以做出不错的符合自己性癖的角色卡
内容好少?怎么办? 更加强悍一点的角色卡就像是一本小说,但是以你为小说的主角,他们构建了一个世界观,一个大概的剧情走向逻辑
构建一个大概的世界观框架 首先,虽然是世界观框架,但并不是像诡秘之主/斗罗大陆/海贼王等整个世界的框架.{{user}}能接触到的世界那才是"世界观"需要的,你的世界观编写可以小到一个家里,也可以达到一个自成体系的世界
设立一个目标 和游戏/小说一样,总是需要有一个目标才能更好的推进剧情,例如
我要回家! -> 平凡职业成就世界最强 我要攻略女主! -> 义妹生活(?) 我要当现充开后宫! -> 弹珠汽水瓶里的千岁同学 设立目标不仅能明确未来发展趋势,也能
设立一条大体剧情 通常而言,剧情不必设计的多复杂 甚至我个人认为,剧情没有必要.因为剧情是"角色"在向着"目标"前进的"过程"。你固然可以设计各种各样的条件来让{{user}}按照你预计的路线来走下去,但是这样子就没意思了,不是吗?
为世界进行设定 世界观可以为各种各样的,什么超能力世界,魔法世界(哈利波特),学园都市(蔚蓝档案),日系异世界(转生成为xxx)等. 这个世界怎么样完全依据你的想象,怎么描述都可以
设定一个场景 当你的目标明确后,就该开始准备塑造世界观,世界观往大了说可以是一整个世界(无论{{user}}是否见到),往小了说可以只是一个小房间({{user}}能见到的世界)
场景尽量为剧情服务 场景需要符合基本逻辑 通常而言,场景可能不必要特别设计,因为在布置设定的时候,已经限定了场景在世界设计下的表现,此时除非对场景有另外要求,则不必特意设定
世界书 参考来源: 宝宝教程
世界书,也就是Lorebooks 旨在以更优雅的方式管理提示词,做到
在指定情况下触发提示词 节省提示词 更加灵活的提示词插入
参数讲解 标题 "角色定义前",这只是用来备注,告诉这个条目是用来干什么的 触发策略 用来管控世界书触发方式 蓝灯(蓝色圆圈) -> 始终在"插入位置"的深度(只有插入深度为🤖/⚙/👤才显示)下按照顺序进行插入内容 绿灯(绿色圆圈) -> 在满足"主要关键词"与"可选过滤器"的"逻辑"关系后,关键词的情在"插入位置"的深度(只有插入深度为🤖/⚙/👤才显示)下按照顺序进行插入况下插入内容 逻辑 选择 AND:只有对话中同时有主要关键字与可选过滤器时才进行插入 选择 NOT:只有对话中含有主要关键字,且不含可选过滤器后,内容才会被触发。 大多数时候,可选过滤器不填写内容 扫描深度 从底部向上数,数到几深度就是几 扫描深度决定了世界书是否被触发,超出深度的内容将不触发世界书条目 区分大小写,Whole Words(整个单词),Group Scoring(群组分数),包含组,组权重 -> 字面意思/没什么用 粘性 当世界书被触发后,持续注入内容直到对话轮数"粘度内的数字" 冷却 当世界书被触发后,等待"冷却内的数字"轮对话后,才能再次触发世界书 延迟 当世界书被触发后,等待"延迟中的数字"轮对话后,"内容"才被注入 深度与位置 作者注释前后的世界书条目,其位置也是跟随作者注释的插入深度而变动的。比如你将作者注释的插入深度设置为0,将世界书设置为“作者注释之后”,那么该世界书的效力就是强中强。 深度越高,插入的位置越下面 顺序
假设A,B,C,D的顺序分别为: 1,2,3,4,则排列顺序为 D
C
B
A
递归讲解
当世界书被触发时,你的"内容"也会进一步触发其他的世界书 世界书花里胡哨的玩法 用于优化Token 因为作者偷懒,所以没有改插入位置
在部分角色设定中,一些道具的描述会非常的冗长,这时候就需要使用世界书进行优化 Ps: 插入位置为角色定义
在角色卡内的角色过多的时候,可以采取主要关键字设置为"角色名"的方法,并把角色设定放在"内容内",这样子可以做到只当"角色"出现并且被提及的时候才告诉"AI"这个人具体是谁
在不同场景有不同规则时,则可以依据场景来触发对应场景的规则
用于触发特定的规则/设定 假设我有一个提示词排列为