File size: 8,730 Bytes
e636070 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
SCRIPT_ATTENTION_PROMPT = """
注意这个故事的剧本如下:
{script}
"""
SELECT_SCREEN_ACTORS_PROMPT = """
你是一个熟练的剧本作家,从备选角色列表中选择下一幕的出场角色们,增强戏剧性。为了完成幕的切换,禁止选择最近刚行动过的角色{previous_role_codes}。
## 角色信息及位置,括号内为role_code
{roles_info}
## 历史记录
{history_text}
## 当前事件
{event}
## 要求:
1.选中的角色当前必须身处同一地点。
返回选中角色的role_code列表,它应该能被eval()解析。不要包含任何多余信息如```, ```python。
Example Output:
["role1-zh","role2-zh",...]
"""
DECIDE_NEXT_ACTOR_PROMPT = """
你是一个虚拟世界的管理员。我需要你根据以下信息,决定谁是下一个行动角色。
参与过对话的角色被选中的可能性应该较小。
## 可选角色
{roles_info}
## 最近行动记录
{history_text}
返回一个字符串代表选定角色的role_code,不要附加任何其它信息。
"""
LOCATION_PROLOGUE_PROMPT = """
你是一位擅长创作文学性叙述的智能作家,
请根据以下信息以第三人称视角生成一个文学性叙述,展现地点的氛围和在场成员的动态,突出世界观中的细节并让描述具有文学性,仿佛来自一本叙事小说。避免使用任何系统提示或机械性语言。
- 当前事件:
{event}
- 世界观信息:
{world_description}
- 在场成员及历史行动:
{location_info}
{history_text}
- 当前地点名称:
{location_name}
- 当前地点详情 (location_description):
{location_description}
请特别注意:
- 叙述应平衡环境描写和动态刻画,避免冗长,控制在100个字以内。
- 文字应生动、有画面感,并契合世界观的风格,适当改变文风。
- 只允许描述现状,禁止代替角色做出行动。注意位于该地点的角色仅有在场成员,不要包括其它角色。
输出一个str。不要返回任何其他信息
"""
GENERATE_INTERVENTION_PROMPT = """
你是一个虚拟世界的管理员,有许多角色在这个世界中生活。现在需要你基于世界观和其他信息,生成一个重大事件。
## 世界观详情
{world_description}
## 角色信息
{roles_info}
## 最新角色行动
{history_text}
返回一个字符串。保持简洁。
### 事件生成要求
1. 事件尽可能新颖,有趣,包含不同角色的利益冲突。
2. 禁止包含任何细节、人物具体行动和心理,包括对话等。
"""
UPDATE_EVENT_PROMPT = """
参考最初的事件
```{intervention}```
基于最近行动详情detail:
```{history}```
对事件:
```{event}```
进行更新。返回一个str
## 若最初的事件已经得到处理/结束/接近尾声,返回一个全新事件。
### 事件生成要求
1. 事件尽可能新颖,有趣,包含不同角色的利益冲突。
2. 禁止包含任何细节、人物具体行动和心理,包括对话等。
## 若未解决,返回更新后的事件
### 更新要求
1. 禁止包含任何细节、人物具体行动和心理,包括对话等。仅做一个大致的概括。
2. 注意判断detail中的人物动作,是否有关于事件的最新进展,如果有,概括在你的回复中。禁止提及与原事件无关的内容。
3. 回复必须包含原事件或最初事件中代表【前提】的部分,不过你可以对它进行概括。之后的内容可以适当忽略,只留下最近的信息。
"""
ENVIROMENT_INTERACTION_PROMPT = """
你是一个Enviroment Model,负责生成环境信息。角色 {role_name} 在 {location} 尝试进行行动 {action}。
请根据以下信息生成一个文学性叙述,描述行动的过程和结果,加入环境描写和情感渲染,仿佛来自一本叙事小说。避免使用任何系统提示或机械性语言。
返回一个字符串。
## 具体行动细节detail
{action_detail}
## 地点详情
{location_description}
## 世界观详情
{world_description}
## 补充信息
{references}
## 回应要求
1. 行动可能失败,但要避免让行动毫无效果,尽量给出新的线索,新的环境描述。
2. 使用第三人称视角。
3. 保持输出简洁,控制在100个字之内。你担任的只是Enviroment Model,对角色当前行动做出回应,不要代表角色做出任何行动。
4. 输出不包含detail中的原文,它应该能接续在具体行动细节之后,情节流程连贯。
"""
NPC_INTERACTION_PROMPT = """
你是 {target}.
角色 {role_name} 在 {location} 对你发起行动,你需要作为{target}做出回应。
请根据以下信息生成你的回应,包含你的行动和讲话,仿佛来自一本叙事小说。避免使用任何系统提示或机械性语言。
## 具体行动细节action_detail
{action_detail}
## 世界观详情
{world_description}
## 补充信息
{references}
## 回应要求
1. 行动可能失败,但要避免让行动毫无效果,尽量给出新的线索。
2. 使用第三人称。
3. 保持输出简洁,控制在80个字之内。
4. 注意你不是主要角色。你的输出应该尽量简单,符合身份定位,不要包含你的具体想法。
5. 输出不包含action_detail中的原文,它应该能接续在具体行动细节之后,情节流程连贯。
以JSON格式返回你的回答. 它应该能够被 json.loads() 解析。 不要返回任何额外信息,如```或```json
输出字段:
“if_end_interaction”,true or false,如果认为这段互动是时候结束了,则设置为true
“detail”,str,一个富有文学性的叙述性语句,包含你的思考、讲话和行动。
"""
SCRIPT_INSTRUCTION_PROMPT = """
你是一个导演,我需要你根据以下的信息对角色的下一步行动做出指导。
## 需要演出的完整剧本(并非已经完成的行动)
{script}
## 上一轮模拟进行到的阶段
{last_progress}
## 角色信息
{roles_info}
## 当前事件
{event}
## 最新角色行动
{history_text}
## 要求
1. 请你根据最新信息判断进展到了剧本的哪一阶段,你需要让角色将剧本向下一阶段推进。如果故事刚刚开始,则根据剧本初期的描述进行指导。
2. 规划下一步行动,为每个角色写出大致的行动指示,保持简洁,禁止具体描述角色的台词。禁止提前透露角色在下一幕才知道的信息。
3. 注意,角色的行动需要尽快推进剧情。如剧本中该阶段提到该角色在这一阶段将进行某项行动,则立刻开始行动。
以JSON格式返回你的回答. 它应该能够被 json.loads() 解析。
输出字段:
‘progress’,对应value为你对整体进展的判断。
其它输出字段key为各个角色的role_code,value为你对该角色下一步行动做出的指示。
"""
JUDGE_IF_ENDED_PROMPT = """
你是一个熟练的剧本作家。根据给出的历史记录,判断这一幕是否可以结束。
## 历史记录
{history}
## 注意
1. 若最后某个角色正在向另一个角色发起明确的行动(攻击、搜寻……),则这一幕未结束。
2. 若角色们正在谈话且未得出结论,则这一幕未结束。
3. 若角色已经基本完成交流,考虑结束这一幕。若谈话内容开始重复,则立刻结束这一幕。
以JSON格式返回你的回答. 它应该能够被 json.loads() 解析。表示字符串时使用双引号"而非单引号'。true和false全部小写。
输出字段:
"if_end": bool, true or false. 表示这一幕是否结束。
"detail": 仅当'if_end'为true,为这一幕写一段总结。突出世界观中的细节并让描述具有文学性,仿佛来自一本叙事小说。避免使用任何系统提示或机械性语言。
请特别注意:
- 叙述应平衡环境描写和动态刻画,避免冗长,控制在100个字以内。
- 文字应生动、有画面感,并契合世界观的风格,适当改变文风。
- 只允许描述现状,禁止代替角色做出行动。
"""
LOG2STORY_PROMPT = """
你是一个熟练的作家。请根据以下行动记录,扩写出一个小说形式的故事,返回一段富有文学性的文字。。
### 行动记录
{logs}
### 要求
1. 可以打乱叙事顺序,以增强故事的戏剧性、悬念和质感;
2. 可以修改对角色的行动描述,但需要保留关键信息;
3. 注意,在记录中,【】内的内容代表人物的心理活动,这些内容不能向其他角色展露,你可以适当地以第三人称视角概括。()内的内容代表人物的动作。「」内的内容代表角色的讲话。
4. 添加必要的场景描述、情节连接和氛围营造,使故事更加生动。
""" |