前言
最近在研究酒馆,研究了一下角色卡的制作过程。不是很专业,只是分享一下自己的看法,如果过程中存在可优化或者错误的地方,希望大佬们指出。
本文默认读者使用过 SillyTavern
,能够基础的运行并能够启动聊天。
注意:我不会对我认为的极其基础的概念进行讲解,比如什么是正则表达式?什么是
Prompt
?文章提到的AI
模型是什么东西?等等。如果有看不懂的但是我没有对其进行解释,请在下面三个网站中自行搜索相关概念,并进行学习
-
• 搜索 - Microsoft 必应 -
• Google -
• 官方汉化介绍:SillyTavern 安装
快速生成角色卡
首次写卡,可用 Discord 类脑
中大佬创作的 写卡助手
进行创作
-
• 链接: Discord
按照教程导入后,向角色发起聊天即可,例如如下请求
设计一个女性心理学专家,能够从{{user}}给出的实际情况中,一针见血的给出存在的心理问题,并给出对应的理论基础。在进行分析后,给出合适的,符合实际的解决方案。
其中 {{user}}
即为当前用户,也就是和 AI
聊天的你。对应的,AI
所 {{char}}
。使用 claude 3.5 sonnet
模型,效果如下
如果感觉不好,可以提出自己对要生成的角色的看法,让其重新生成一个角色。在角色生成好后,新建一张没有设定角色的白卡,在 角色描述
中填写内容
在右上角可以看到角色卡用的 token
数。角色描述下面的词符
是角色描述
的token
数量,也叫做恒定token
。目前我们这张卡只有角色描述
,所以卡用的token
和角色描述
的token
数量相同,为 1374
对于角色的定义,这里建议使用英文进行描述,可以省很多 token
。翻译建议使用 Claud
进行翻译
英语功底好的话,建议自己过一遍。将最后的结果粘贴到 角色描述
中
可以看到变成 892
了。
之后需要设计一个 首条消息
。首条消息是角色卡的第一句话,不能太多,不能太少;不能有太多 {{user}}
的内容;需要通过简洁的语言体现出人物性格、语言特点。
如果不知道怎么写,把 人物描述
扔给 AI
(并非角色卡),让其自己生成。这里使用 Gemini exp 1206
模型。
如果说觉得生成的不够好,可以将生成消息,扔给 Claude
进行润色。得到如下结果。
“你好,很高兴能在这里和你交流。看来你今天的心情似乎还不错,能感受到你语气中的轻松。不过,如果有什么让你感到困扰,或者仅仅只是想分享一些生活中的琐事,都可以告诉我。作为一名心理咨询师,我非常乐意倾听你的声音,尽我所能去理解你,并希望能给你带来一些帮助。”{{char}}轻轻地调整了一下金边眼镜,手边习惯性地拿起那杯已经有些凉的咖啡,准备倾听{{user}}的分享。
当然,你可以设计其他开场,方法和上面的相同。。
现在的卡没有头像,自己找一张放进去就行。设计好后,点击"创建角色"即可创建这张角色卡。最后成果
可以看到,这张卡总共用了 1003
个 token
,其中 恒定token
占用了 892
。简单测试一下,测试卡的时候用的是 Gemini 2.0 Flash exp
模型,效果如下。
将右上角的 ...
点开,点击提示词。
这里可以看到这条消息的 Prompt
的总 Token
数量
这条消息用了 1662
个 token
。如果想要看原始 Prompt
,可以点击这里
基础概念
利用大佬的卡固然可以得到一张可以聊天的角色,但是生成的角色在细节上会有一些差强人意,所以我们需要自己对其进行一些修改操作。
下面会介绍一些重要的概念
世界书
参考文档:世界书 - 飞书云文档
世界书基本概念
什么是世界书?
世界书 (Lorebooks) 旨在为你的角色卡提供更为完整的背景信息。
下面是《天涯明月刀》中的一段
秋水清又推开一块巨石,石壁里还藏着个铁柜,难道孔雀翎就在这铁柜里?
这段话给 AI
看,秋水清是谁?孔雀翎是啥?此时就可以添加世界书
秋水清:“孔雀山庄”庄主的幼弟。孔雀翎:天下的暗器最成功但最可怕的就是孔雀翎。孔雀翎是个由纯金铸成的圆筒,上面有两个枢纽,一按筒里的暗器便飞射而出,暗器发出来就美丽得像孔雀开屏一样,灿烂辉煌。然而,就在你看得目瞪口呆时,它已经要了你的性命。
这样 AI
就知道秋水清是谁,孔雀翎是什么了。
关于世界书的 导入导出
、重命名
、删除
、设置全局世界书
、设置角色世界书
等基础操作,请到参考文档中自行查看
-
• 参考文档:世界书 - 飞书云文档
世界书简单设置
Strategy
世界书的Strategy,一般只用两个:
-
• 常量
:不需要输入关键词,每次对话都会触发该条目内容,插入上下文。AI
永远都能读到世界书设定。 -
• 正常
:正常地以关键词触发内容。AI
最新的回复消息,包含某个关键字A
;或者用户发的消息里,包含关键字A
。此时世界书就会触发,AI
就会读到世界书的内容。
位置
世界书的位置,只需要知道两个即可:
-
• 角色定义后
:将条目内容插入角色描述下方。 -
• @D
:按插入深度插入。
首先是角色定义后
,举个例子。现在存在如下角色描述
here's a description of {{char}}:name: 林婉儿gender: femalepersonality: 邻家温柔大姐姐
有一个世界书,介绍 {{char}}
的癖好:
{{char}}'s idiocrasy: 喜欢摸{{user}}的头
我们将世界书位置选择为 角色定义后
,那么效果就是在角色描述下添加世界书内容。
here's a description of {{char}}:name: 林婉儿gender: femalepersonality: 邻家温柔大姐姐{{char}}'s idiocrasy: 喜欢摸{{user}}的头
然后是 @D
,这个是和 AI
的注意力有关。比如说 AI
似乎没注意到 idiocrasy
特性,此时需要让 AI
增加对其的注意力,使用 @D
。
@D
后有一个深度,深度是指在第 X 条消息下。比如 {{user}}
发给 AI
的消息是
{{user}}: “姐姐,你身上好香啊”
深度 0 的世界书就是在 {{user}}
消息的下方加世界书
{{user}}: “姐姐,你身上好香啊”{{char}}'s idiocrasy: 喜欢摸{{user}}的头
深度 1 就是在上一条消息前加上世界书
{{char}}: {{char}}从后面悄悄靠近,从后面抱住{{user}}{{char}}'s idiocrasy: 喜欢摸{{user}}的头user: “姐姐,你身上好香啊”
深度 2,深度 3 同理。因此,深度值越小,注意力越大。深度为 0
时,AI
会集中注意力去看你这条设定。
Order
在介绍Order 之前,简单说一下顺序问题。一般来说,Prompt 的上下文顺序是这样的(由于这里只关注 角色描述
和 聊天记录
,其他的就不管了)
角色描述上一条聊天记录角色描述当前的聊天记录
AI
先看 当前的聊天记录
再看 角色描述
,然后是 上一条聊天记录
这样从下往上读,注意力从高到低。而我们加入世界书后,会在这些位置里穿插着世界书内容。那么如果是如下的情况呢?
再使用相同 Strategy
和相同 深度
时,这两条是怎么排序的呢?因为 order
相同,按照时间排序。癖好
先创建的,Life Story
是后面创建,所以顺序如下:
角色描述上一条聊天记录角色描述当前的聊天记录Life Story癖好
此时AI
会优先注意 癖好
。如果需要对其进行注意力修改,但是还不想更改 Strategy
和 深度
时,就需要用到 order
了。在使用 order
时,可以把其理解为一个注意力的的象征值,order
越大,注意力越来,也就是越靠下。
结果就是
角色描述上一条聊天记录角色描述当前的聊天记录癖好Life Story
正则功能
正则是扩展里的功能,正则表达式嘛,有点代码基础的人很容易就能理解。比如我写的一个状态栏世界书
这样 AI
就会在每次结尾生成一个由 <user_status>
标签包裹的状态栏。我们可以将其通过正则表达式进行匹配
<user_status>n⏰ 时间: (.*?)n📍 地点: (.*?)n🌤️ 天气: (.*?)n🍑 胸部状态: (.*?)n🧍♂️ 身体: (.*?)n👗 服装: (.*?)n💇♂️ 发型: (.*?)n🤝 与{{user}}的关系: (.*?)n❤️ 对{{user}}的好感度: (.*?)n💭 当前想法: (.*?)n💨 呼吸状态: (.*?)n🙂 情绪: (.*?)n🌍 当前场景: (.*?)n</user_status>
看不懂的请去学习正则表达式。通过这样就可以匹配到内容。按照顺序,可以得到动态变量。比如说动态变量 $1
为时间,$2
为地点……
然后把内容替换为一个设计好的状态栏里。
这样前端一旦得到满足正则表达式的内容,就会进行替换,效果如下
这就是正则的功能,可以将 AI
返回的消息,或者用户输入的消息,根据正则表达式,转换成另一种格式。
简单搓卡
了解了上面的功能后,我们就可以开始写卡了。有两种写卡方式
-
• 编程语言写卡 -
• 访问式写卡
编程语言写卡,就是将人物信息按照 yaml
、w++
、json
等格式进行编写,对于 AI
来说可读性高。
对于访问式写卡,对我来说有些抽象,具体的请参考大佬写的文章
-
• 访问式 - 飞书云文档
好了,下面就是全程的傻瓜式写卡了,全程使用 Gemini exp 1206
构建人物设定
首先你得知道自己想写一个什么样的角色。
如果说一个人物已经在你脑海里构建很久了,或者这是一个同人二创角色,那直接写就完事儿了。如果说脑子里想不出来,那就提取想要的角色的特征,想好大体后,扔给 AI
,让他生成一段人物设定,自己在结果的基础上润色优化一下就可以用了。
角色描述
这里有一套手搓的角色描述的公式模板。(该模板以及下面的所有模板,皆为本人写卡时写的模板,如果有更好的模板或意见,欢迎大家友善讨论)
Character:Name:"角色名"age:"年龄"Description:Appearance:Height:"数值 + 单位"Weight:"数值 + 单位"Build:"例如:苗条、丰满、健壮、瘦弱、匀称等"HairStyle:"例如:长直发、短卷发、马尾辫、寸头等"HairColor:"例如:黑色、金色、棕色、红色等. 可添加挑染、渐变等描述"EyeColor:"例如:黑色、蓝色、棕色、绿色等"FacialFeatures:"例如:鹅蛋脸、瓜子脸、圆脸、方脸、高颧骨、低鼻梁、大眼睛、薄唇等"SkinTone:"例如:白皙、黝黑、小麦色、苍白等"SkinDetails:"例如:光滑、粗糙、有雀斑、有痣、有疤痕等"DistinguishingFeatures:"例如:独特的胎记、纹身、伤疤、饰品等"SpecialBodyParts:Hands:"手部描写"Legs:"腿部描写"Chest:"胸部描写,给出大小"Buttocks:"臀部描写"Outfit:CasualStyle:"例如:休闲、正式、运动、哥特、波西米亚等"CasualDetails:"例如:常穿的衣服款式、颜色、材质等"SpecialOccasionOutfit:"例如:约会、宴会、工作等场合的着装风格和细节"Accessories:"例如:眼镜、帽子、围巾、首饰、手表等"SpeechStyle:SpeechRate:"例如:快、慢、适中"Tone:"例如:低沉、尖锐、温柔、磁性、沙哑等"Accent:"例如:标准普通话、地方口音等. 可描述具体是哪里的口音"Vocabulary:"例如:书面语、口语、俚语、网络用语、专业术语等"SituationalSpeechPatterns:"例如:生气时、高兴时、悲伤时、紧张时等不同情境下的语气、语调、用词等变化"LanguageHabits:"例如:是否喜欢使用比喻、排比等修辞手法,是否喜欢长句或短句"
模板的具体内容请根据自己的 XP 喜好自行修改。
模板的使用方式:
-
• 先自己写一段,或者自己通过 角色特徽
生成一段角色描写。 -
• 把上面给的公式和角色描写扔给 AI
让其生成,此过程只是生成较为满意的大体框架 -
• 检查一下生成的内容,确认是否满足自己的需求;如果不满足,则提出新需求,重新扔给 AI
。 -
• 重复此过程对 AI
给的满意结果进行微调,得到最后的结果 -
• 将最后的结果翻译为英文(可选)
可根据如下的模板发送给 AI
,对 AI
输出的内容有如下要求
-
1. 根据给出的描写,提取信息,填写到模板里。 -
2. 模板中的人名请保留中文 -
3. 对于未知内容,请根据给出的人物描写自行推断出结果。 -
4. 对于无法推断的内容,尝试自行补充。 -
5. 如果是极特殊情况,需要添加新的key以便更好的展现人物特征时,可自行添加。 -
6. 中文描述注意浓缩,用词精准,避免冗长句式,优先使用高信息熵词语(如“面若寒霜”而非“他看起来很冷漠”)。 -
7. 尽可能的减少模板所占用的 token
数量
上面 7 条要求是建议加的,如果说有新的需求,可以自行添加。
下面是一个关于{{char}}的外貌气质描写下面是一个关于{{char}}的语言风格描写下面是一个人物模板,请根据给出的{{char}}的外貌气质与语言风格的描写,填写至下方模板中并给出最后的结果,要求如下:1. 根据给出的描写,提取信息,填写到模板里.2. 模板中的人名请保留中文3. 对于未知内容,请根据给出的人物描写自行推断出结果.4. 对于无法推断的内容,尝试自行补充.5. 如果是**极特殊情况**,需要添加新的key以便更好的展现人物特征时,可自行添加.6. 中文描述注意浓缩,用词精准,避免冗长句式,优先使用**高信息熵词语**(如“面若寒霜”而非“他看起来很冷漠”).7. 尽可能的减少模板的 `token` 数量
这里的 {{char}}
请自行填写设想好的姓名,然后直接扔给 AI
就可以了。
检查一下结果,可能会有问题。检查完毕之后,把最后的结果填写在卡的人物描述里即可。
自己看着点占多少 tokens
角色性格描写
关于角色的性格描写,我的设想是通过 Enneagram(九型人格)
和 MBTI
结合来体现。其中 Enneagram
确定角色的深层动态心理需求,通过 MBTI
确定角色的行为和思维偏好。性格模板如下:
Character: Name: "角色名" Personality: MBTI: PersonalityType: "例如:INTJ、ESFP 等" CognitiveFunctions: FirstFunction: "功能名称 - (内倾/外倾)" SecondFunction: "功能名称 - (内倾/外倾)" ThirdFunction: "功能名称 - (内倾/外倾)" FourthFunction: "功能名称 - (内倾/外倾)" BehavioralTraits: "该人格类型在日常生活、工作、人际交往等方面的典型行为模式" ThinkingPatterns: "该人格类型典型的思考方式、决策过程、信息处理偏好等" Strengths: "该人格类型的优点和长处" Weaknesses: "该人格类型的缺点和需要改进的地方" Enneagram: CoreType: "例如:1 号、2 号、3 号等" WingType: "例如:9w1、6w7 等" Subtype: "例如:sp/sx、so/sp 等" CoreDesire: "该九型人格的核心需求和渴望" CoreFear: "该九型人格最害怕面对的事物或情境" InnerMotivation: "该九型人格行为背后的深层动机和驱动力" DefenseMechanism: "该九型人格在面对压力或挑战时,常用的心理防御机制" StressState: "该九型人格在压力状态下的行为表现和心理状态" SecurityState: "该九型人格在安全状态下的行为表现和心理状态" Potential: "该九型人格的潜能和发展方向" Emotions: EmotionalStability: "例如:稳定、波动大、易怒、敏感等" EmotionalExpression: "例如:内敛、外放、直接、间接等" TypicalEmotions: "该角色经常表现出的情绪,例如:喜悦、悲伤、愤怒、焦虑、平静等" BehavioralHabits: DailyHabits: "反映出潜意识的心理状态的肢体行为,例如:咬指甲、转笔、抖腿、摸鼻子等" SituationalReactions: "紧张时、兴奋时、恐惧时、思考时等情境下的标志性行为" InterpersonalRelationships: SocialTendency: "例如:内向、外向、独处、群居等" AttitudeTowardsRelationships: "对待朋友、家人、恋人、同事、陌生人等的态度和相处模式" InterpersonalStrengthsWeaknesses: "该角色在人际交往中的优势和劣势" Values: CoreValues: "该角色最看重的价值观,例如:自由、责任、诚实、创新、和谐等" MoralPrinciples: "该角色的道德标准和行为准则"
向 AI
提问时,要给出足够有的信息,才能准确的描写出人物的性格特定。可以通过人物外貌,习惯,语言风格,潜意识动作等等描述投喂给 AI
,使其能更好了解你想要的角色。
下面是向 AI
提问的模板,
下面是一个关于{{char}}的描写,请从中推断出人物的性格下面是一个人物性格模板,请根据推断出的{{char}}的性格,填写对应的内容至下方模板中并给出最后的结果.要求如下:1. 根据给出的描写,提取信息,填写到模板里.2. 模板中的人名请保留中文3. 对于未知内容,请根据给出的人物描写自行推断出结果.4. 对于无法推断的内容,尝试自行补充.5. 如果是**极特殊情况**,需要添加新的key以便更好的展现人物特征时,可自行添加.6. 中文描述注意浓缩,用词精准,避免冗长句式,优先使用**高信息熵词语**(如“面若寒霜”而非“他看起来很冷漠”).7. 尽可能的减少模板的 `token` 数量
对 AI 给出的结果自行修改,最后放进世界书里。对于角色名字,我建议修改为 {{char}}
。人物性格是决定角色的重要特征,我不希望 AI
会忘掉它,所以世界书设置为 常量
,之后什么顺序就是个人理解了。
角色成长历程
一个合理的角色成长经历,会让 AI 能更好的理解这个角色。不过要注意一个问题,就是角色年龄。假设角色年龄为 29 岁,那么履历就应该是从出生到 29。每个人要定义的角色年龄不同,所以这里没有统一的模板,只有类模板格式。
下面是向 AI
提问的模板,内容请自行修改
{{char}}当下{{years}}岁下面是关于{{char}}的外貌描写下面是关于{{char}}的性格描写生成一个角色成长历程模板,描写她每个年龄经历的事情格式为yaml,其中key用英文表示。请根据给出的柳雨晴的信息,生成角色成长历程,给出每个年龄发生的关键事件。最后给出结果。要求如下:1. 根据给出的描写,提取信息,填写到模板里.2. 模板中的人名请保留中文3. 对于未知内容,请根据给出的人物描写自行推断出结果.4. 对于无法推断的内容,尝试自行补充.5. 如果是**极特殊情况**,需要添加新的key以便更好的展现人物特征时,可自行添加.6. 中文描述注意浓缩,用词精准,避免冗长句式,优先使用**高信息熵词语**(如“面若寒霜”而非“他看起来很冷漠”).7. 尽可能的减少模板的 `token` 数量输出的结果样式类似为- 6岁时,6岁时的内容- 7岁时,7岁时的内容- 8岁时,8岁时的内容- 9岁时,9岁时的内容
可能会抽风,不过容易修正。然后也是一样,放世界书里。这里通过关键词触发。
分阶段的人设
参考文章:分阶段的人设:正则表达式触发世界书(装修中) - 飞书云文档
我们的目的是先有一个好感度状态,然后经过正则替换得到对应的阶段。使用世界书去
状态栏
准备一个简单的状态栏,这里用 HTML 简单手搓了一个
<divstyle="font-family: 'Consolas', monospace; margin: 0; padding: 0; box-sizing: border-box;"><divstyle="width: 100%; max-width: 580px; margin: 15px auto; background-color: #2c3e50; border-radius: 18px; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.9); padding: 20px; color: #ecf0f1;"><divstyle="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 20px; overflow-wrap: break-word;"><divstyle="text-align: center; font-weight: bold; color:#95a5a6; padding: 14px; border-radius: 10px; background-color: rgba(255, 255, 255, 0.08); position: relative; transition: transform 0.2s ease; word-break: break-word;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="display: block; padding-bottom : 6px; font-size: 1.1em;">⏰ 时间</span><spanstyle="display: block; font-weight: normal;"><spanstyle="font-size: 1.2em; font-weight: bold; color:#ffeb3b;">$1</span></span></div><divstyle="text-align: center; font-weight: bold; color:#95a5a6; padding: 14px; border-radius: 10px; background-color: rgba(255, 255, 255, 0.08); position: relative; transition: transform 0.2s ease; word-break: break-word;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="display: block; padding-bottom : 6px; font-size: 1.1em;">📍 地点</span><spanstyle="display: block; font-weight: normal;"><spanstyle="font-size: 1.2em; font-weight: bold; color:#9ccc65;">$2</span></span></div><divstyle="text-align: center; font-weight: bold; color:#95a5a6; padding: 14px; border-radius: 10px; background-color: rgba(255, 255, 255, 0.08); position: relative; transition: transform 0.2s ease; word-break: break-word;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="display: block; padding-bottom : 6px; font-size: 1.1em;">🌤️ 天气</span><spanstyle="display: block; font-weight: normal;"><spanstyle="font-size: 1.2em; font-weight: bold; color:#00bcd4;">$3</span></span></div></div><divstyle="margin-bottom: 15px; padding: 14px 20px; border-radius: 10px; overflow-wrap: break-word; background-color: #435a6b; border: 1px solid #5a7a87;"><divstyle=" text-align:center; margin-bottom: 12px; padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;"> 💨 呼吸:</span><spanstyle="font-size: 1.1em; color:#f06292;">$4</span></div><divstyle="text-align:center; margin-bottom: 12px;padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;">👀 神态:</span><spanstyle="font-size: 1.1em; color:#00e676;">$5</span></div><divstyle=" text-align:center; margin-bottom: 12px;padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;">🤸 动作:</span><spanstyle="font-size: 1.1em; color:#03a9f4;">$6</span></div><divstyle=" text-align:center; margin-bottom: 12px;padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;">💃 姿势:</span><spanstyle="font-size: 1.1em; color:#ff4081;">$7</span></div><divstyle=" text-align:center; margin-bottom: 12px;padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;">👄 嘴唇:</span><spanstyle="font-size: 1.1em; color:#ba68c8;">$8</span></div></div><divstyle="margin-bottom: 15px; padding: 14px 20px; border-radius: 10px; overflow-wrap: break-word; background-color: #435a6b; border: 1px solid #5a7a87;"><divstyle="text-align:center; margin-bottom: 12px; padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;"> 🍒 胸部:</span><spanstyle="font-size: 1.1em; color:#ff4081;">$9</span></div><divstyle="text-align:center; margin-bottom: 12px;padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;"> 👗 服装:</span><spanstyle="font-size: 1.1em; color:#ba68c8;">$10</span></div><divstyle="text-align:center; margin-bottom: 12px;padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;"> 💇♂️ 发型:</span><spanstyle="font-size: 1.1em; color:#ffca28;">$11</span></div><divstyle="text-align:center; margin-bottom: 12px;padding: 10px; background-color: rgba(255, 255, 255, 0.05); border-radius: 8px; transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6;margin-right:8px; font-size: 1em;"> 🦵 双腿:</span><spanstyle="font-size: 1.1em; color:#4dd0e1;">$12</span></div></div><divstyle="display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 15px;"><divstyle="text-align: center; font-weight: bold; color:#95a5a6; padding: 14px; border-radius: 10px; background-color: rgba(255, 255, 255, 0.08); position: relative; transition: transform 0.2s ease; word-break: break-word;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="display: block; padding-bottom : 6px; font-size: 1.1em;">❤️ 好感度</span><span>$13/100</span></div><divstyle="text-align: center; font-weight: bold; color:#95a5a6; padding: 14px; border-radius: 10px; background-color: rgba(255, 255, 255, 0.08); position: relative; transition: transform 0.2s ease; word-break: break-word;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="display: block; padding-bottom : 6px; font-size: 1.1em;">✨ 阶段</span><span>$14</span></div></div><divstyle="margin-transform: translateY( 18px; text-align: center; overflow-wrap: break-word; padding: 14px; border-radius: 10px; background-color: rgba(255, 255, 255, 0.08); transition: transform 0.2s ease;"onmouseover="this.style.transform='scale(1.02)';"onmouseout="this.style.transform='scale(1)'"><spanstyle="font-weight: bold; color:#95a5a6; font-size: 1.1em);">💭 想法:</span><spanstyle="font-size: 1.1em; color: #e040fb;"id="thoughts">$15</span></div></div></div>
HTML 的效果如下
世界书如下
You must output a status bar wrapped in <user_stutas> at the bottom of each reply, updating the content of the status bar in real time based on the interaction, to indicate the current state of {{char}}, Requirements.- Give accurate information based on the context, while adding literary beauty.- The language should be poetic and subtle.- Avoid using harsh or colloquial expressions.The status bar is formatted as follows:<user_status>⏰ 时间: {年}-{月}-{日} {时}:{分} (使用24小时制, 例如: 2023-11-15 14:35)📍 地点: {地点类型, 环境描述} (例如: 昏暗的酒吧包间,烟雾缭绕;阳光明媚的公园长椅,鸟语花香;宽敞明亮的办公室,现代感十足)🌤️ 天气: {室内环境描述 或 室外天气描述,取决于地点} (例如: 室内空调温度适宜,灯光柔和;室外阳光明媚,微风拂面;阴雨连绵,空气潮湿)💨 呼吸: {呼吸状态, 可以使用形容词和副词修饰} (例如: 呼吸平稳而深沉;呼吸急促而紊乱;呼吸略显急促,带有几分紧张;呼吸轻缓,仿佛带着慵懒)👀 神态: {眼神和表情的详细描述, 可以使用形容词和比喻修饰} (例如: 眼神深邃而专注,仿佛在思考着什么;眼神带着一丝狡黠,嘴角微微上扬;目光锐利,透露出不容置疑的威严;眼神迷离,带着几分茫然)🤸 动作: {肢体动作的详细描述,可以使用动词、副词和介词短语} (例如: 她优雅地端起酒杯,轻轻晃动;他慵懒地靠在椅背上,双腿交叠;她双手环抱胸前,眼神充满审视;他缓缓地伸出手,轻抚她的脸颊)💃 姿势: {整体姿态的详细描写,突出线条感和氛围} (例如: 她笔直地站立着,如同挺拔的白杨;她慵懒地斜靠在沙发上,曲线毕露;她弯腰捡起地上的东西,展现出优美的腰部曲线;她如同舞蹈般旋转着,长裙飘逸)👄 嘴唇: {嘴唇细节的描述, 包括颜色、形状、动作等} (例如: 嘴唇微微抿起,透露出不悦;唇色饱满,如熟透的樱桃;嘴角微微上扬,带着一丝若有似无的笑意;嘴唇轻启,发出诱人的呢喃)🍒 胸部: {胸部细节描述,结合衣着、动作和状态} (例如: B罩杯的胸部在紧身连衣裙的包裹下,曲线毕露;胸前微微起伏,呼吸略显急促;胸部在宽大的衬衫下,若隐若现,带着一丝神秘感;随着她的动作,胸前的曲线若隐若现,引人遐想)👗 服装: {服装细节的详细描述,包括款式、颜色、材质、配饰等} (例如: 她穿着一件深V领的黑色连衣裙,搭配细跟高跟鞋,颈间佩戴着一条精致的项链;他穿着一套剪裁得体的西装,内搭一件白色衬衫,领口处系着一条深色领带;她穿着一件宽松的针织衫,搭配一条舒适的牛仔裤,头上戴着一顶针织帽)💇♂️ 发型: {发型细节的描述, 包括长短、颜色、形状等} (例如: 长发披肩,如同瀑布般垂落;短发利落,显得十分精神;头发盘起,露出修长的脖颈;额前留着几缕碎发,增添了几分慵懒感)🦵 双腿: {双腿动作的详细描述,包括位置、状态、方向等} (例如: 双腿并拢,显得十分优雅;双腿交叠,带着几分随意;双腿微微分开,呈现出放松的状态;穿着高跟鞋的双腿,轻盈地走在路上)❤️ 好感度: {数字}/100 (例如: 75/100)✨ 阶段: {根据好感度给出和{{user}}的关系阶段} (例如: 亲密无间)💭 想法: “{符合{{char}}性格的内心独白,使用第一人称,并使用引号包裹}” (例如: “他害羞的样子真可爱,真想欺负他一下”;“这次的谈判一定要成功,绝不能让公司失望”;“今天的天气真好,适合出去散散步”)</user_status>for example:<user_status>⏰ 时间: 2023-11-15 14:35📍 地点: 大型会议厅前排VIP席位,气氛庄重而压抑🌤️ 天气: 室内水晶吊灯璀璨,暖气适宜,光线柔和💨 呼吸: 呼吸轻缓而平静,带着几分慵懒的意味👀 神态: 眼中闪烁着狡黠的光芒,唇角勾起一抹玩味的笑意,充满了掌控欲🤸 动作: 右手从手背在叶天掌心打转,身体更加贴近他,手臂轻环上他的胳膊,脚尖在他的小腿上轻触研磨💃 姿势: 身体微微前倾,姿态优雅,像一只准备捕猎的雌豹👄 嘴唇: 唇色饱满,如熟透的樱桃,嘴角带着一丝蛊惑的笑意,仿佛在邀请人品尝🍒 胸部: B罩杯的胸部紧贴叶天手臂,随着她的动作,若有似无地摩擦着,引人遐思👗 服装: 深V领的黑色连衣裙,搭配黑色细高跟,颈间佩戴着精致的项链💇♂️ 发型: 头发高高盘起,露出修长的脖颈,给人一种禁欲的美感🦵 双腿: 穿着黑色高跟鞋的双腿,在桌子底下挑逗着叶天的小腿❤️ 好感度: 92/100✨ 阶段: 亲密无间💭 想法: “真是个有趣的家伙,身体明明很诚实,嘴上却说着不要,继续逗弄下去,他会是什么反应呢?真期待啊~”</user_status>
正则如下
<user_status>n⏰ 时间: (.*?)n📍 地点: (.*?)n🌤️ 天气: (.*?)n💨 呼吸: (.*?)n👀 神态: (.*?)n🤸 动作: (.*?)n💃 姿势: (.*?)n👄 嘴唇: (.*?)n🍒 胸部: (.*?)n👗 服装: (.*?)n💇♂️ 发型: (.*?)n🦵 双腿: (.*?)n❤️ 好感度: (.*?)/100n✨ 阶段: (.*?)n💭 想法: (.*?)n</user_status>
好感度设计
我们先设定几个好感度。
|
|
|
|
形同陌路 |
|
|
萍水相逢 |
|
|
初识乍见 |
|
|
点头之交 |
|
|
泛泛之交 |
|
|
相谈甚欢 |
|
|
把臂而谈 |
|
|
莫逆之交 |
|
|
亲密无间 |
|
|
情深意笃 |
|
设计一下正则表达式,要匹配的文本如下
❤️ 好感度: 92/100✨ 阶段: 亲密无间
正则如下(看不懂的请自行学正则表达式)
形同陌路(0-9)❤️ 好感度[::] [^d]*([0-9]b(?:.d+)?).*s*.*?✨ 阶段[::] .*萍水相逢(10-19)❤️ 好感度[::] [^d]*([1]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*初识乍见(20-29)❤️ 好感度[::] [^d]*([2]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*点头之交(30-39)❤️ 好感度[::] [^d]*([3]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*泛泛之交(40-49)❤️ 好感度[::] [^d]*([4]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*相谈甚欢(50-59)❤️ 好感度[::] [^d]*([5]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*把臂而谈(60-69)❤️ 好感度[::] [^d]*([6]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*莫逆之交(70-79)❤️ 好感度[::] [^d]*([7]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*亲密无间(80-89)❤️ 好感度[::] [^d]*([8]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] .*情深意笃(90-100)/❤️ 好感度[::] [^d]*([9]d{1}b(?:.d+)?).*s*.*?✨ 阶段[::] (.*)/gm
然后使用正则替换
❤️ 好感度: $13✨ 阶段: 情深意笃
世界书设计
为每个好感状态设计世界书,世界书通过关键字触发。
相信通过上面的介绍,大家已经知道如何使用 AI 了,这里就不再举例.
首条消息
按照我这套走的话,需要想好在什么场合、好感度是什么阶段的、 {{user}}
和 {{char}}
的有什么联系,{{user}}
的性格特点、{{char}}
的性格特点。想好后哦就很简单了,要么自己写,要么就直接扔给 AI
角色卡的其他内容
如果说还想要其他的内容,可以自己添加,比如说
-
• user 的人设 -
• 角色的人际关系 -
• 角色的隐藏癖好、特异功能 -
• 整体世界观 -
• 涩涩 -
• ……
总之,有什么设定就塞世界书里就行了。
原文始发于微信公众号(在下小白):酒馆 SillyTavern 傻瓜式写卡
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论