额外输出格式#
我们会经常遇到不仅需要 AI 理解提示词, 还需要 AI 按要求输出内容的情况, 例如思维链、时间框、摘要总结、文字状态栏、变量更新格式等. 但输出内容中, 有的部分是应该原封不动输出出来的, 有的部分则是需要 AI 根据要求填充的.
为了让 AI 更好区分这些, 我研究了一套针对额外输出格式的提示词写法.
特殊语法#
为了区分哪些是 AI 应该原封不动输出的格式, 哪些是 AI 需要根据要求填充的格式, 我采用了 AI 能听懂的几种特殊语法:
${描述}
: AI 需要根据 "描述" 将它替换为对应的内容. 例如衣着: ${具体描述角色当前衣着}
可能输出衣着: 粉金色宽松T恤睡裙
;/*要求*/
: AI 仅会听从 "要求" 而不对它进行输出. 例如/*以下内容应该按英文输出*/
会让 AI 更倾向于用英文输出之后的内容;...
: AI 需要仿照之前给定的规则和内容补充输出. 例如其他角色: ...
会让 AI 根据前面给定的络络
输出格式, 补充其他角色的输出;其他内容原封不动地进行输出.
以角色状态栏为例, 我们可以这样写:
■ ${角色名称,仅显示当前剧情中占比最多的一名角色}:
心情: ${用↑↓→来表示角色对<user>的好感度变化}(${变化原因})
衣着: ${具体描述角色当前衣着,最多20字}
身体: ${具体描述,注重人体每个部位的细节描写,包括声、形、色、味、感的整体表现,赋予真实体验感。用词淫靡,不低于40字,不超过60字}
行动: ...
计划: ...
■ 周围角色:
- ${周围某个没有和<user>互动的角色}: ${简要描述这个角色正在做什么}
则 AI 可能输出:
■ 心语:
心情: →(观望姐姐)
衣着: 粉金色宽松T恤睡裙
身材: 修长美腿随意交叠,浑圆的臀部若隐若现,琥珀色眼眸中闪烁着狡黠的光芒,嘴角挂着意味深长的笑容
行动: 思考姐姐的反常
计划: 暗中观察姐姐的动向
■ 周围角色:
- 千枝子: 准备就寝
整体格式#
而为了让 AI 知道某部分提示词是要用于输出的, 我采用 format: |-
来标记:
---
状态栏:
rule: 你必须在回复末尾插入<status_block>块来显示状态栏
format: |-
<status_block>
■ ${角色名称,仅显示当前剧情中占比最多的一名角色}:
心情: ${用↑↓→来表示角色对<user>的好感度变化}(${变化原因})
衣着: ${具体描述角色当前衣着,最多20字}
身体: ${具体描述,注重人体每个部位的细节描写,包括声、形、色、味、感的整体表现,赋予真实体验感。用词淫靡,不低于40字,不超过60字}
行动: ...
计划: ...
■ 周围角色:
- ${周围某个没有和<user>互动的角色}: ${简要描述这个角色正在做什么}
</status_block>
这里, 我将状态栏用 <status_block>
块包裹, 便于我们可能希望用正则处理状态栏. 例如用 最小深度: 8
的 仅格式提示词
正则将状态栏替换为空, 从而不发送过早的状态栏, 节省 token 和 AI 注意力.
考虑插入深度#
在此我给的状态栏例子比较简单, 但你可能需要输出露出系统、Galgame 界面等更为复杂的格式.
我们显然不希望将这些东西一股脑插入到 D1/D0, 这很容易让 AI 失去对末尾剧情的连贯理解.
为此, 通常的做法是, 将完整的输出提示词放在 D4 等位置, 而在 D1/D0 位置仅利用输出格式的 <tag>
来提醒 AI 输出:
---
状态栏强调:
rule: 你必须在回复末尾插入<status_block>块来显示状态栏
format: |-
<status_block>
...
</status_block>
嵌套输出内容#
${描述}
不仅可以是文字描述, 还可以是其他提示词.
假设我们要实现多角色状态栏, 每个角色不仅有共同的 "好感度"、"衣着" 等内容, 还可能在状态栏中有自己独有的信息. 通过我的提示词写法, 你会很容易写出这样的状态栏:
---
状态栏:
rule: 你必须在每次回复的最底部,输出<status_block>包裹的状态栏
format:
basic: |-
<status_block>
<character>
名称: ${角色名称}
心情: ${用↑↓→来表示角色对<user>的好感度变化}(${变化原因})
衣着: ${具体描述角色当前衣着,最多20字}
${special status}
</character>
...
</status_block>
special status:
心爱: |-
路人视角: ${考虑穿着、外在遮掩和角度,来判断非<user>角色能够看到什么样子的心爱}
露出程度: ${当前露出程度数值}
心语: |-
约会模拟次数: ${约会模拟次数}
上面的提示词中, 我们在 basic
部分定义所有角色共同的状态栏内容, 而在 special status
部分定义每个角色独有的状态栏内容. basic
内我们用 ${special status}
来引用 special status
部分内容, 从而指示 AI 输出.
我在妹妹请求你保护她露出中就是这么做的.