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. 添加必要的场景描述、情节连接和氛围营造,使故事更加生动。
"""