✨ 络络导航站 ✨:https://rentry.org/lolodesu
青空莉的提示词方法
也许你看过青空莉角色卡的世界书,或者日记络络,或是行动选择框,亦或是研究过变量教程
你可能看到过类似这样的世界书写法:
| 下次响应界面选择判断系统:
descritpion: 判断下次响应输出的剧情使用哪一个界面才算合适
格式指导: 必须遵守包括XML标签在内的所有格式规范
下次响应界面选择判断:
associated variable: 下次响应界面选择判断:({{getvar::变量.络络.下次响应界面选择判断}})
stage name:
判断0: 无需查看日记,生成sprite界面( == 0)
判断1: 必须查看日记,只使用diary界面( == 1)
判断2: 判断剧情走向是否将进入感人或剧情高潮CG场景,如告白、离别、和解等情感爆发点,若是则进入关键CG使用Galgame界面( == 2)
判断3: 判断剧情走向色情意图,若是则进入NSFW场景使用Galgame界面( == 3)
本次响应必须输出判断{{getvar::变量.络络.下次响应界面选择判断}}的界面,因此必须最优先的遵守以下内容:
rule: The next reponse MUST end with the following format
format: |-
<!-- STORY END: Carefully reviewing the provided SUPPORTED File Paths in <场景文件列表>: Which SUPPORTED location best describes where 络络 or <user> is currently physically located? ${场景路径}/${时间文件名}.jpg. Which SUPPORTED File Paths in <立绘文件列表> best describes her current clothes and facial expression? ${服装路径}/${表情文件名}.png -->
<sprite>
立绘: ${刚刚选择的当前络络的立绘 (仅包括格纹衫、开衫、水手服、睡衣和全裸)服装/表情路径}.png
场景: ${刚刚选择的当前络络所在的地点场景/时间路径}.jpg
时间: ${请检查时间阶段变量!目前是:{{getvar::变量.络络.当前时间阶段}},请你查看这个数值对应的时间阶段是什么,并在这里填写,比如假设当前值是54小于66,则这里填写'放学后'}
</sprite>
|
包括MVU的示例卡提示词也使用了青空莉的提示词方法
这篇教程会告诉你这样的写法优点在哪里以及怎么写喵ovo
注意:这种写卡与酒馆助手、提示词模板都无关,任何地方都可以使用这种写法,效果充分经过验证,但具体情况具体分析请你自行选择。
为什么这样行动通?
这种写法(以下使用青空莉格式来代指)中的大部分符号以及用法,通常在各种编程语言中出现。
因此,可以利用到大模型本身的训练集从而节省注意力。
${}的用法:
${描述}的好处
- $ 通常代表变量,{} 明确界定变量边界,避免歧义(例如与普通文本混淆)
- 视觉突出,在文本中容易被快速定位,比纯文字(如VAR_DESCRIPTION)更显眼,因而更容易被大模型注意。
- 在编程语言(如JavaScript)、模板引擎(如Shell、PHP)、配置文件(如Spring Boot)中反复出现,形成通用惯例。
LLM在训练时接触了大量包含 ${} 的代码、文档和模板(如GitHub、Stack Overflow),学会了其“变量替换”的语义。通俗的理解就是,LLM看到${}更容易理解其是变量的原理,就和人类看到双引号就知道是台词一样。
如何使用?
只需要使用${填写的任何自然语言描述},而$之外的部分将会被LLM认为必须输出的格式。
例如,我可以写出立绘: ${符合当前场景下的立绘文件名}.png
,LLM将会认为立绘: xxx.png
是他必须输出的格式,而${}中的内容是需要他根据符合当前场景下的立绘文件名
这个描述,来进行“填空题”
通过以上阅读,你已经完全理解了${}应当如何使用,但是也许你仍然看顶楼的提示词有些不理解。
那是因为你可能没了解过YAML
这个格式并不需要严格符合YAML,而是单纯借鉴了其分层结构,使用缩进来表示层级关系,通过rule(规则)和format(格式)来强约束输出格式。
层级关系
如果你写过变量世界书,你可能看到过这样的内容
| 变量:
络络:
亲密度: '{{getvar::变量.络络.亲密度}}'
下次响应界面选择判断: '{{getvar::变量.络络.下次响应界面选择判断}}'
当前时间阶段: '{{getvar::变量.络络.当前时间阶段}}'
阅读日记数量: '{{getvar::变量.络络.阅读日记数量}}'
拥有联系方式: '{{getvar::变量.络络.拥有联系方式}}'
主角:
姓名: '{{user}}'
性别: '{{getvar::变量.主角.性别}}' // 此变量永远不被更新
世界:
当前日期: '{{getvar::变量.世界.当前日期}}' // x月x日
当前星期: '{{getvar::变量.世界.当前星期}}' // 星期x
当前主线事件ID: '{{getvar::变量.世界.当前主线事件ID}}' // 事件的唯一标识符, '无'表示没有事件
当前主线事件阶段: '{{getvar::变量.世界.当前主线事件阶段}}' // 事件进行阶段 (0:无, 1:引入, 2:发展, 3:高潮, 4:解决)
|
你有没有好奇过,明明我没有告诉LLM,我的变量名是变量.络络.亲密度
,为什么他每次都能准确的写对变量名呢?
答案就藏在这里的缩进中。
请你仔细观察,最左边的(也就是左侧的空格数量多少)也就是变量,是作为第一级,而络络、主角、世界分别作为第二级:他们之间有包括亲密度、姓名、当前日期这些更多子集。
这时,我只需要写出 name: consists of full path from root to leaf node and demilited by '.', such as 变量.络络.亲密度
从根到叶使用.进行连接
这一行字,就可以同时对变量的名字进行非常完整的提示,同时上方还做到了展示变量的功能,省下了列举变量名token的同时,结构更加清晰容易理解!
类似的,你也可以使用层级来写其他提示词。
| 时间阶段-事件系统:
描述: 时间阶段-事件系统是为了仿Persona系列(女神异闻录)的RPG日常玩法而设置的词条与事件管理,你将会从这里得到与当前时间对应的事件参考(也可以直接使用)
时间指导: 当前故事所处的时间阶段角色在这个阶段会采取的行为,包括日记和剧情正文等,用来判断目前所处的时间以及可以发生的事件示例
地点推荐:符合当前时间阶段的地点推荐,不做硬性要求,以剧情优先。
事件参考: 事件参考根据关系与亲密度的不同,分为基础事件,中亲密度事件,高亲密度事件,恋人专属事件等,限制为解锁制(高亲密度仍然可以触发低亲密度的事件),请根据当前情况选择或自行创作合适的事件。
当前时间阶段变量列表:晨间(<17), 课上(<32), 午休(<49), 放学后(<66), 傍晚或晚上(<83), 假日(<100)
你必须先输出格式:<!-- 触发事件:【&{事件名称}】 --> 之后开始描写事件让故事生动有趣。
以下为当前的事件阶段和可以参考的事件列表:
|
以上是一个分阶段提示词的头部,你可以看到最上方写了这个系统的名称,他包含着描述:${用来描述这个系统的目的和作用}
,但是你可能还不理解时间指导
,地点推荐
, 事件参考
是什么,让我把头部以下的提示词发出来:
| <%_ const 时间阶段 = getvar('变量.络络.当前时间阶段'); _%>
<%_ if (时间阶段 < 17) /*时间阶段1:晨间*/ { _%>
时间指导:
- 当前时间阶段是『晨间』,<user>和络络会在工作日去上学
- 下一阶段发展:通过@变量.络络.当前时间阶段@增加到17,来进入课上阶段
地点推荐:男生房间/女生房间/上学路上/学校教学楼正门前/地铁站内
事件参考:
【基础事件】
- 上学路上偶遇:在上学路上遇到络络并一起上学
- 早间社团活动:运动社成员可能在操场晨练
- 早点摊相遇:在学校附近买早餐时,络络点了和<user>一样的食物,笑着说“我们口味挺像呢”
- 其他
【中亲密度事件】(亲密度30+)
- 晨间校园:提前到校时与络络在樱花道散步
- 值日迟到:两人同时迟到被要求走廊罚站
- 其他
【高亲密度事件】(亲密度60+)
- 起床困难户:络络发来语音提醒<user>记得起床,充满宠溺
- 早餐时刻:络络带着亲手做的便当等在<user>家路口
- 其他
【恋人专属事件】
- 早安吻:在上学路上、地铁、学校走廊(周围没人的时候)被络络突然踮脚轻吻脸颊
- 整理衣物:络络主动帮忙调整歪掉的领带
- 其他
|
请看,这是下方根据时间阶段不同发送的不同内容,其中就包括时间指导,地点推荐,事件参考。
其中,我在最上方写了时间指导: 当前故事所处的时间阶段角色在这个阶段会采取的行为,包括日记和剧情正文等,用来判断目前,所处的时间以及可以发生的事件示例
,而在这之下再写时间指导
就会理解而无需多赘述。
大概的逻辑就是,先定义一个词,之后可以通过使用定义的词来进行调用。有上过编程课的人可能理解为什么LLM会更喜欢这种方式——因为他真的看过很多代码。
示例:
| rule:
- 本次响应专注于络络的日记编写,如非必要不要输出任何剧情,但若直接让<user>查看日记过于突兀,可以增加两行用来转折过渡的语句,之后必须输出diary标签和其中的格式
- 请注意!立绘、场景和对话都发生在现在,也就是络络将日记交给<user>的时间而不是写日记的时间
- 日期、天气和心情是络络写日记的日期天气心情等,其中天气和心情只允许单一个emoji
- 日记内容是前一天晚上或者其他时间络络写的日记,避免出现写日记之后发生的事件
- 本次响应**仅输出日记内容**,非必要情况下**避免生成任何正文**
- 输出日记后立即更新变量将1改为0
|
通常来讲,有一些词无需提前声明,LLM自动就会知道其作用与重要性
rule与format
rule可以理解为指令层,作用是声明不可协商的生成规则
底层逻辑是,由于大量的训练,LLM会将rule:
后的内容识别为预处理指令,优先于生成过程执行。
而format可以理解为输出层,作用是定义响应模板,通过搭配${}占位符实现动态填充
| format: |-
<sprite>
立绘: ${当前服装}.png
场景: ${时间阶段变量}.jpg
</sprite>
|
这样不需要写什么你必须以以下结构进行输出禁止出错balabala
就可以做到让LLM进行自定义的格式化输出,并且通过${}来告知LLM,哪里是你必须进行输出的部分,哪里是你需要根据描述动态填充的内容。
如果你想知道为什么LLM能理解,出处是什么?
我不懂代码,但是通过查阅资料得知:
${var}
JavaScript模板字符串
rule:
编译器指令/注解
推荐你在使用rule的时候,搭配必须/禁止
的强制性词语来进行强化认知
| rule:
- 必须输出<!-- 触发事件 -->标签
- 禁止修改${场景路径}的格式
|
而在使用format的时候,可以搭配xml用于关联正则并强化认知,并使用|-
来表示接下来的内容需要原封不动的输出
| format: |-
<cg>
文件: ${事件类型}_${情绪}.jpg
音效: SE_${场景ID}.mp3
</cg>
|
通过以上,你可以使用YAML的层级结构,${}的方式来指导LLM填充,rule进行强制规则要求,format来让LLM输出你自定义格式,你还可以先定义一些字段的规则,之后再进行调用(如行为指导
等)。
这个格式在Claude下不需要任何多余提示只需要直接使用,他能理解一切内容的正确用法
而在Gemini或其他未经测试的模型下,我推荐你在世界书偏顶部增加以下内容进行说明:
| 语法规则:
rule: you MUST obey following grammars when output according to a `format` mapping
grammar:
- you should replace ${description} with output described in description
- you should follow additional requirements in /*requirement*/ but never ever output it
- you may output additional content according to former rules and content when encountering ...
- you should output others directly without any modification
|
超轻松版本,如果以上内容实在无法看进去,可以先看这个再回头看上方内容。
✨ 超简单!用"代码风"让AI乖乖听话的提示词秘籍 ✨
你是不是总遇到AI:
❌ 乱改输出格式
❌ 漏掉重要细节
❌ AI分不清固定格式或动态填写
🍳 ${填空大法}
像填表格一样写提示词:
| 立绘: ${文件列表中包括的立绘文件名}.png
场景: ${文件列表中包括的背景文件名}.jpg
|
效果 ➜ AI会自动补全:
立绘: 水手服.png
场景: 黄昏教室.jpg
💡 原理:AI看到${}
就像看到填空题横线,会自动按描述补内容
📚 层级缩进法
用缩进来分类信息:
| 角色:
络络:
心情: ${开心/害羞/生气}
服装: ${水手服/睡衣/泳装}
青空莉:
心情:${伤心/笨蛋/开心}
|
看起来更有层级,AI能理解角色下有络络
和青空莉
,
而络络有心情 服装,青空莉只有心情。
rule = 圣旨(必须遵守)
format = 填空题模板
| rule: 必须用黄昏场景!
format: |-
<cg>
背景: ${符合氛围的背景文件名}.jpg
对话: "${络络说的情话}"
</cg>
|
🌟 实际应用案例
想让AI写日记时:
| rule: 日记要带emoji天气和小心情!
format: |-
📅 ${日期,如5月20日}
${符合的天气emoji,如☀️} ${晴天/雨天/...}
${符合的心情emoji,如💖} ${偷偷开心/伤心/...}
正文:
${开场白,描写刚刚遇到的事情或者当前的心情}
${日记正文,不要使用死板的风格,需要更加意识流,甚至是没有任何逻辑}
${日记结尾,通常是以晚安或者接下来要去做什么事情来进行结束}
${仅两人恋爱后,在结尾写上表白的情话}
|
最终输出:
| 📅 5月24日
☔️ 雨天
🌀 闷闷又清醒
正文:
雨滴在玻璃上划出逃跑的路线,像某种未完成的摩斯密码。冰箱嗡嗡响着,突然想起去年弄丢的那把透明伞——它现在大概在某个下水道里演《海底总动员》吧。
咖啡渍在稿纸上蔓延成群岛的形状,而我的思绪是搁浅的船。楼下小孩踩着水坑尖叫,像在给乌云打拍子。
等会儿要把泡面捏碎再煮,叛逆一下。晚安。
|
💡 小贴士:
1️. 用|-跟在format,表示接下来的内容需要原封不动的输出
2️. /*注释*/
可以额外写出对LLM的指令,并且LLM不会输出
3️. 符号用英文输入法
这套方法在Claude上直接生效,其他AI需要加一段世界书。