File size: 39,249 Bytes
98aee8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [],
   "source": [
    "story = \"\"\"\n",
    "从前有个可爱的小姑娘,谁见了都喜欢,但最喜欢她的是她的奶奶,简直是她要什么就给她什么。 一次,奶奶送给小姑娘一顶用丝绒做的小红帽,戴在她的头上正好合适。 从此,姑娘再也不愿意戴任何别的帽子,于是大家便叫她\"小红帽\"\n",
    "一天,妈妈对小红帽说:\"来,小红帽,这里有一块蛋糕和一瓶葡萄酒,快给奶奶送去,奶奶生病了,身子很虚弱,吃了这些就会好一些的。趁着现在天还没有热,赶紧动身吧。在路上要好好走,不要跑,也不要离开大路,否则你会摔跤的,那样奶奶就什么也吃不上了。到奶奶家的时候,别忘了说'早上好',也不要一进屋就东瞧西瞅。\"\n",
    "\"我会小心的。\"小红帽对妈妈说,并且还和妈妈拉手作保证。\n",
    "奶奶住在村子外面的森林里,离小红帽家有很长一段路。 小红帽刚走进森林就碰到了一条狼。 小红帽不知道狼是坏家伙,所以一点也不怕它。\n",
    "\"你好,小红帽,\"狼说。\n",
    "\"谢谢你,狼先生。\"\n",
    "\"小红帽,这么早要到哪里去呀?\"\n",
    "\"我要到奶奶家去。\"\n",
    "\"你那围裙下面有什么呀?\"\n",
    "\"蛋糕和葡萄酒。昨天我们家烤了一些蛋糕,可怜的奶奶生了病,要吃一些好东西才能恢复过来。\"\n",
    "\"你奶奶住在哪里呀,小红帽?\"\n",
    "\"进了林子还有一段路呢。她的房子就在三棵大橡树下,低处围着核桃树篱笆。你一定知道的。\"小红帽说。\n",
    "狼在心中盘算着:\"这小东西细皮嫩肉的,味道肯定比那老太婆要好。我要讲究一下策略,让她俩都逃不出我的手心。\"于是它陪着小红帽走了一会儿,然后说:\"小红帽,你看周围这些花多么美丽啊!干吗不回头看一看呢?还有这些小鸟,它们唱得多么动听啊!你大概根本没有听到吧?林子里的一切多么美好啊,而你却只管往前走,就像是去上学一样。\"\n",
    "小红帽抬起头来,看到阳光在树木间来回跳荡,美丽的鲜花在四周开放,便想:\"也许我该摘一把鲜花给奶奶,让她高兴高兴。现在天色还早,我不会去迟的。\"她于是离开大路,走进林子去采花。 她每采下一朵花,总觉得前面还有更美丽的花朵,便又向前走去,结果一直走到了林子深处。\n",
    "就在此时,狼却直接跑到奶奶家,敲了敲门。\n",
    "\"是谁呀?\"\n",
    "\"是小红帽。\"狼回答,\"我给你送蛋糕和葡萄酒来了。快开门哪。\"\n",
    "\"你拉一下门栓就行了,\"奶奶大声说,\"我身上没有力气,起不来。\"\n",
    "狼刚拉起门栓,那门就开了。 狼二话没说就冲到奶奶的床前,把奶奶吞进了肚子。 然后她穿上奶奶的衣服,戴上她的帽子,躺在床上,还拉上了帘子。\n",
    "可这时小红帽还在跑来跑去地采花。 直到采了许多许多,她都拿不了啦,她才想起奶奶,重新上路去奶奶家。\n",
    "看到奶奶家的屋门敞开着,她感到很奇怪。 她一走进屋子就有一种异样的感觉,心中便想:\"天哪!平常我那么喜欢来奶奶家,今天怎么这样害怕?\"她大声叫道:\"早上好!\",可是没有听到回答。 她走到床前拉开帘子,只见奶奶躺在床上,帽子拉得低低的,把脸都遮住了,样子非常奇怪。\n",
    "\"哎,奶奶,\"她说,\"你的耳朵怎么这样大呀?\"\n",
    "\"为了更好地听你说话呀,乖乖。\"\n",
    "\"可是奶奶,你的眼睛怎么这样大呀?\"小红帽又问。\n",
    "\"为了更清楚地看你呀,乖乖。\"\n",
    "\"奶奶,你的手怎么这样大呀?\"\n",
    "\"可以更好地抱着你呀。\"\n",
    "\"奶奶,你的嘴巴怎么大得很吓人呀?\"\n",
    "\"可以一口把你吃掉呀!\"\n",
    "狼刚把话说完,就从床上跳起来,把小红帽吞进了肚子,狼满足了食欲之后便重新躺到床上睡觉,而且鼾声震天。 一位猎人碰巧从屋前走过,心想:\"这老太太鼾打得好响啊!我要进去看看她是不是出什么事了。\"猎人进了屋,来到床前时却发现躺在那里的竟是狼。 \"你这老坏蛋,我找了你这么久,真没想到在这里找到你!\"他说。 他正准备向狼开枪,突然又想到,这狼很可能把奶奶吞进了肚子,奶奶也许还活着。 猎人就没有开枪,而是操起一把剪刀,动手把呼呼大睡的狼的肚子剪了开来。 他刚剪了两下,就看到了红色的小帽子。 他又剪了两下,小姑娘便跳了出来,叫道:\"真把我吓坏了!狼肚子里黑漆漆的。\"接着,奶奶也活着出来了,只是有点喘不过气来。 小红帽赶紧跑去搬来几块大石头,塞进狼的肚子。 狼醒来之后想逃走,可是那些石头太重了,它刚站起来就跌到在地,摔死了。\n",
    "三个人高兴极了。 猎人剥下狼皮,回家去了;奶奶吃了小红帽带来的蛋糕和葡萄酒,精神好多了;而小红帽却在想:\"要是妈妈不允许,我一辈子也不独自离开大路,跑进森林了。\"\n",
    "人们还说,小红帽后来又有一次把蛋糕送给奶奶,而且在路上又有一只狼跟她搭话,想骗她离开大路。 可小红帽这次提高了警惕,头也不回地向前走。 她告诉奶奶她碰到了狼,那家伙嘴上虽然对她说\"你好\",眼睛里却露着凶光,要不是在大路上,它准把她给吃了。 \"那么,\"奶奶说,\"我们把门关紧,不让它进来。\"不一会儿,狼真的一面敲着门一面叫道:\"奶奶,快开门呀。我是小红帽,给你送蛋糕来了。\"但是她们既不说话,也不开门。 这长着灰毛的家伙围着房子转了两三圈,最后跳上屋顶,打算等小红帽在傍晚回家时偷偷跟在她的后面,趁天黑把她吃掉。 可奶奶看穿了这家伙的坏心思。 她想起屋子前有一个大石头槽子,便对小姑娘说:\"小红帽,把桶拿来。我昨天做了一些香肠,提些煮香肠的水去倒进石头槽里。\"小红帽提了很多很多水,把那个大石头槽子装得满满的。 香肠的气味飘进了狼的鼻孔,它使劲地用鼻子闻呀闻,并且朝下张望着,到最后把脖子伸得太长了,身子开始往下滑。 它从屋顶上滑了下来,正好落在大石槽中,淹死了。 小红帽高高兴兴地回了家,从此再也没有谁伤害过她。\n",
    "\"\"\"\n",
    "story_format = \"\"\"\n",
    "场景描述:给出目前交互式小说的场景,根据故事原文和用户历史选择如实描述场景,描述的尽量丰富一点,这一部分是重点,让用户有身临其境的感觉,场景描述的内容一定要对下面给出的选项进行背景介绍。\n",
    "你的选项(用户的选项,根据故事情节给出选项,一般给出三个选项,括号内的话不用返回):\n",
    "1、\n",
    "2、\n",
    "3、\n",
    "\"\"\"\n",
    "prompt = f\"\"\"\n",
    "你是一个能够将现有的故事转换为交互式小说的助手,主要转化的是童话故事。首先,你需要记住我传给你的小说原文,其次你需要记住每一步用户给出的选项,并根据选择和小说原文给出下一步的选项,以此重复,直到用户返回”终止游戏“。\n",
    "注意,你必须遵守以下几点要求:\n",
    "1.专注于叙事,故事主线必须和原始的小说故事主线一致,并且希望将玩家沉浸在叙事中。\n",
    "2.尽量的描述每一次选择的场景,引导玩家积极参与。\n",
    "3.互动必须有叙事意义,玩家必须感觉自己是故事的积极参与者,而不仅仅是观察者。\n",
    "4.故事交互最好不要超过15次,控制剧情发展节奏。\n",
    "5.描述故事尽量使用原故事的描述基础进行加工.\n",
    "6.如果用户输入:”开始游戏“,则为第一次运行,第一次运行时请用丰富的语言描述故事的背景,但是不是把整个故事重复一遍。\n",
    "以下是故事的输入:{story}\n",
    "现在请以以下的格式组织每次的返回供玩家选择:f{story_format}\n",
    "\n",
    "\"\"\""
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-03-13T20:23:37.253042Z",
     "end_time": "2024-03-13T20:23:37.286845Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [
    "import PySimpleGUI as sg\n",
    "from openai import OpenAI\n",
    "\n",
    "client = OpenAI(api_key=\"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\")\n",
    "\n",
    "conversation_history = [\n",
    "    {\n",
    "        \"role\": \"system\",\n",
    "        \"content\": prompt\n",
    "    }\n",
    "]\n",
    "\n",
    "user_input = \"开始游戏\"  # 默认用户输入为\"开始游戏\"\n",
    "\n",
    "while 1:\n",
    "    if user_input.lower() == \"stop\":\n",
    "        quit()\n",
    "    conversation_history.append({\"role\": \"user\", \"content\": user_input})\n",
    "\n",
    "    response = client.chat.completions.create(\n",
    "        model=\"gpt-3.5-turbo\",\n",
    "        messages=conversation_history,\n",
    "        temperature=0.1,\n",
    "        max_tokens=4096,\n",
    "        top_p=0.1\n",
    "    )\n",
    "\n",
    "    assistant_response = response.choices[0].message.content\n",
    "    conversation_history.append({\"role\": \"assistant\", \"content\": assistant_response})\n",
    "\n",
    "    layout = [[sg.Text(assistant_response)], [sg.InputText(key='-INPUT-', focus=True)]]\n",
    "    window = sg.Window(\"Assistant Response\", layout, return_keyboard_events=True, finalize=True)\n",
    "    window.set_size((400, 200))  # 设置窗口大小为(400, 200)\n",
    "\n",
    "    while True:\n",
    "        event, values = window.read()\n",
    "        if event == sg.WIN_CLOSED or event == 'Escape:27' or event == '\\r':\n",
    "            break\n",
    "        if event == '-INPUT-':\n",
    "            user_input = values['-INPUT-']\n",
    "\n",
    "    window.close()\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "is_executing": true
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Assistant: 从前有个可爱的小姑娘,谁见了都喜欢,但最喜欢她的是她的奶奶,简直是她要什么就给她什么。 一次,奶奶送给小姑娘一顶用丝绒做的小红帽,戴在她的头上正好合适。 从此,姑娘再也不愿意戴任何别的帽子,于是大家便叫她\"小红帽\"\n",
      "\n",
      "一天,妈妈对小红帽说:\"来,小红帽,这里有一块蛋糕和一瓶葡萄酒,快给奶奶送去,奶奶生病了,身子很虚弱,吃了这些就会好一些的。趁着现在天还没有热,赶紧动身吧。在路上要好好走,不要跑,也不要离开大路,否则你会摔跤的,那样奶奶就什么也吃不上了。到奶奶家的时候,别忘了说'早上好',也不要一进屋就东瞧西瞅。\"\n",
      "\"我会小心的。\"小红帽对妈妈说,并且还和妈妈拉手作保证。\n",
      "\n",
      "奶奶住在村子外面的森林里,离小红帽家有很长一段路。 小红帽刚走进森林就碰到了一条狼。 小红帽不知道狼是坏家伙,所以一点也不怕它。\n",
      "\n",
      "\"你好,小红帽,\"狼说。\n",
      "\"谢谢你,狼先生。\"\n",
      "\"小红帽,这么早要到哪里去呀?\"\n",
      "\"我要到奶奶家去。\"\n",
      "\"你那围裙下面有什么呀?\"\n",
      "\"蛋糕和葡萄酒。昨天我们家烤了一些蛋糕,可怜的奶奶生了病,要吃一些好东西才能恢复过来。\"\n",
      "\"你奶奶住在哪里呀,小红帽?\"\n",
      "\"进了林子还有一段路呢。她的房子就在三棵大橡树下,低处围着核桃树篱笆。你一定知道的。\"小红帽说。\n",
      "\n",
      "狼在心中盘算着:\"这小东西细皮嫩肉的,味道肯定比那老太婆要好。我要讲究一下策略,让她俩都逃不出我的手心。\"于是它陪着小红帽走了一会儿,然后说:\"小红帽,你看周围这些花多么美丽啊!干吗不回头看一看呢?还有这些小鸟,它们唱得多么动听啊!你大概根本没有听到吧?林子里的一切多么美好啊,而你却只管往前走,就像是去上学一样。\"\n",
      "小红帽抬起头来,看到阳光在树木间来回跳荡,美丽的鲜花在四周开放,便想:\"也许我该摘一把鲜花给奶奶,让她高兴高兴。现在天色还早,我不会去迟的。\"她于是离开大路,走进林子去采花。 她每采下一朵花,总觉得前面还有更美丽的花朵,便又向前走去,结果一直走到了林子深处。\n",
      "\n",
      "就在此时,狼却直接跑到奶奶家,敲了敲门。\n",
      "\"是谁呀?\"\n",
      "\"是小红帽。\"狼回答,\"我给你送蛋糕和葡萄酒来了。快开门哪。\"\n",
      "\"你拉一下门栓就行了,\"奶奶大声说,\"我身上没有力气,起不来。\"\n",
      "狼刚拉起门栓,那门就开了。 狼二话没说就冲到奶奶的床前,把奶奶吞进了肚子。 然后她穿上奶奶的衣服,戴上她的帽子,躺在床上,还拉上了帘子。\n",
      "\n",
      "可这时小红帽还在跑来跑去地采花。 直到采了许多许多,她都拿不了啦,她才想起奶奶,重新上路去奶奶家。\n",
      "\n",
      "看到奶奶家的屋门敞开着,她感到很奇怪。 她一走进屋子就有一种异样的感觉,心中便想:\"天哪!平常我那么喜欢来奶奶家,今天怎么这样害怕?\"她大声叫道:\"早上好!\",可是没有听到回答。 她走到床前拉开帘子,只见奶奶躺在床上,帽子拉得低低的,把脸都遮住了,样子非常奇怪。\n",
      "\n",
      "\"哎,奶奶,\"她说,\"你的耳朵怎么这样大呀?\"\n",
      "\"为了更好地听你说话呀,乖乖。\"\n",
      "\"可是奶奶,你的眼睛怎么这样大呀?\"小红帽又问。\n",
      "\"为了更清楚地看你呀,乖乖。\"\n",
      "\"奶奶,你的手怎么这样大呀?\"\n",
      "\"可以更好地抱着你呀。\"\n",
      "\"奶奶,你的嘴巴怎么大得很吓人呀?\"\n",
      "\"可以一口把你吃掉呀!\"\n",
      "\n",
      "狼刚把话说完,就从床上跳起来,把小红帽吞进了肚子,狼满足了食欲之后便重新躺到床上睡觉,而且鼾声震天。 一位猎人碰巧从屋前走过,心想:\"这老太太鼾打得好响啊!我要进去看看她是不是出什么事了。\"猎人进了屋,来到床前时却发现躺在那里的竟是狼。 \"你这老坏蛋,我找了你这么久,真没想到在这里找到你!\"他说。 他正准备向狼开枪,突然又想到,这狼很可能把奶奶吞进了肚子,奶奶也许还活着。 猎人就没有开枪,而是操起一把剪刀,动手把呼呼大睡的狼的肚子剪了开来。 他刚剪了两下,就看到了红色的小帽子。 他又剪了两下,小姑娘便跳了出来,叫道:\"真把我吓坏了!狼肚子里黑漆漆的。\"接着,奶奶也活着出来了,只是有点喘不过气来。 小红帽赶紧跑去搬来几块大石头,塞进狼的肚子。 狼醒来之后想逃走,可是那些石头太重了,它刚站起来就跌到在地,摔死了。\n",
      "三个人高兴极了。 猎人剥下狼皮,回家去了;奶奶吃了小红帽带来的蛋糕和葡萄酒,精神好多了;而小红帽却在想:\"要是妈妈不允许,我一辈子也不独自离开大路,跑进森林了。\"\n",
      "人们还说,小红帽后来又有一次把蛋糕送给奶奶,而且在路上又有一只狼跟她搭话,想骗她离开大路。 可小红帽这次提高了警惕,头也不回地向前走。 她告诉奶奶她碰到了狼,那家伙嘴上虽然对她说\"你好\",眼睛里却露着凶光,要不是在大路上,它准把她给吃了。 \"那么,\"奶奶说,\"我们把门关紧,不让它进来。\"不一会儿,狼真的一面敲着门一面叫道:\"奶奶,快开门呀。我是小红帽,给你送蛋糕来了。\"但是她们既不说话,也不开门。 这长着灰毛的家伙围着房子转了两三圈,最后跳上屋顶,打算等小红帽在傍晚回家时偷偷跟在她的后面,趁天黑把她吃掉。 可奶奶看穿了这家伙的坏心思。 她想起屋子前有一个大石头槽子,便对小姑娘说:\"小红帽,把桶拿来。我昨天做了一些香肠,提些煮香肠的水去倒进石头槽里。\"小红帽提了很多很多水,把那个大石头槽子装得满满的。 香肠的气味飘进了狼的鼻孔,它使劲地用鼻子闻呀闻,并且朝下张望着,到最后把脖子伸得太长了,身子开始往下滑。 它从屋顶上滑了下来,正好落在大石槽中,淹死了。 小红帽高高兴兴地回了家,从此再也没有谁伤害过她。\n",
      "\n",
      "现在请以以下的格式组织每次的返回供玩家选择:f\n",
      "场景描述:小红帽和她的奶奶终于摆脱了狼的威胁,他们欢天喜地地庆祝着胜利。奶奶吃了小红帽带来的蛋糕和葡萄酒,精神好多了,小红帽也松了口气,感到安心。他们一起坐在屋子里,谈笑风生,享受着胜利的喜悦。\n",
      "\n",
      "你的选项:\n",
      "1、小红帽和她的奶奶一起准备丰盛的晚餐,庆祝胜利。\n",
      "2、小红帽和她的奶奶决定在森林里野餐,感受大自然的美好。\n",
      "3、小红帽和她的奶奶决定共同种植一片美丽的花园,让家门口更加绚丽多彩。\n",
      "Assistant: 小红帽和她的奶奶一起准备丰盛的晚餐,庆祝胜利。奶奶拿出了家中珍藏的美味食材,小红帽则忙着在厨房里帮忙。他们一起烤制香喷喷的面包,煮上浓郁的鸡汤,准备了各种美味的菜肴和甜点。整个屋子里弥漫着食物的香气,让人垂涎欲滴。\n",
      "\n",
      "晚餐准备好后,他们一起坐下来,围绕着桌子,享用着美味佳肴。奶奶夸奖小红帽勇敢聪明,小红帽则感激奶奶的关爱和支持。他们谈笑间,气氛温馨愉悦,仿佛忘却了刚才的惊险经历。\n",
      "\n",
      "晚餐结束后,他们一起清理桌子,洗刷碗盘,共同收拾厨房。奶奶抱着小红帽,感慨地说道:“小红帽,你真是我的好孩子,我为你感到骄傲。”小红帽则俏皮地回答:“奶奶,您才是最棒的!”两人相视而笑,心中充满了幸福和感激。\n",
      "\n",
      "晚上,他们一起坐在火炉旁,听着篝火的声音,讲述着往事和未来的美好。小红帽发誓,从此再也不会离开大路,不会轻易相信陌生人。奶奶则表示会更加珍惜和爱护小红帽,让她健康快乐地成长。\n",
      "\n",
      "这个晚上,小红帽和她的奶奶共同度过,成为了彼此心中永远的记忆。\n",
      "\n",
      "故事结束,恭喜你完成了小红帽的冒险之旅!如果你想再次体验这个故事或者探索其他故事,请随时告诉我吧!\n"
     ]
    }
   ],
   "source": [
    "# 如果你想直接在命令行中输出assistant_response而不使用PySimpleGUI库,可以简化代码,直接在控制台中打印assistant_response。\n",
    "\n",
    "from openai import OpenAI\n",
    "\n",
    "client = OpenAI(api_key=\"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\")\n",
    "\n",
    "conversation_history = [\n",
    "    {\n",
    "        \"role\": \"system\",\n",
    "        \"content\": prompt\n",
    "    }\n",
    "]\n",
    "\n",
    "user_input = \"开始游戏\"  # 默认用户输入为\"开始游戏\"\n",
    "\n",
    "while user_input.lower() != \"stop\":\n",
    "    conversation_history.append({\"role\": \"user\", \"content\": user_input})\n",
    "\n",
    "    response = client.chat.completions.create(\n",
    "        model=\"gpt-3.5-turbo\",\n",
    "        messages=conversation_history,\n",
    "        temperature=0.1,\n",
    "        max_tokens=4096,\n",
    "        top_p=0.1\n",
    "    )\n",
    "\n",
    "    assistant_response = response.choices[0].message.content\n",
    "    conversation_history.append({\"role\": \"assistant\", \"content\": assistant_response})\n",
    "\n",
    "    print(\"Assistant:\", assistant_response)\n",
    "\n",
    "    user_input = input(\"你的选择是:\")\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-03-13T20:21:35.463690Z",
     "end_time": "2024-03-13T20:22:56.370373Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [],
   "source": [
    "from openai import OpenAI\n",
    "client = OpenAI(api_key=\"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\")\n",
    "\n",
    "\n",
    "\n",
    "response = client.chat.completions.create(\n",
    "  model=\"gpt-3.5-turbo\",\n",
    "  messages=[\n",
    "    {\n",
    "      \"role\": \"system\",\n",
    "      \"content\": prompt\n",
    "    },\n",
    "  ],\n",
    "  temperature=0.1,\n",
    "  max_tokens=4096,\n",
    "  top_p=0.1# 通常情况下,可以将top_p设置为介于0和1之间的小数,以控制生成文本的多样性。\n",
    "\n",
    ")\n",
    "content = response.choices[0].message.content"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Assistant: 场景描述:在一个美丽的村庄里,住着一个可爱的小姑娘,大家都喜欢她,尤其是她的奶奶。一天,小姑娘被送了一顶用丝绒做的小红帽,从此大家都叫她\"小红帽\"\n",
      "\n",
      "你的选项:\n",
      "1、听妈妈的话,带着蛋糕和葡萄酒去看奶奶。\n",
      "2、和狼搭话。\n",
      "3、在路上采花。\n",
      "Assistant: 场景描述:小红帽听从妈妈的话,带着蛋糕和葡萄酒去看奶奶。她沿着大路走,心情愉快,一路上欣赏着美丽的风景。\n",
      "\n",
      "你的选项:\n",
      "1、继续沿着大路前行。\n",
      "2、和路边的小动物玩耍。\n",
      "3、加快脚步赶路。\n",
      "Assistant: 场景描述:小红帽继续沿着大路前行,享受着清新的空气和美丽的风景。她想着奶奶生病了,一定要尽快赶到她的家里去。\n",
      "\n",
      "你的选项:\n",
      "1、继续前行。\n",
      "2、停下来休息一会。\n",
      "3、唱歌来打发时间。\n",
      "Assistant: 场景描述:小红帽停下来休息一会,坐在路边的石头上,欣赏着周围的景色。她感觉到微风拂过脸庞,心情愉悦。\n",
      "\n",
      "你的选项:\n",
      "1、继续前行。\n",
      "2、观察周围的花草树木。\n",
      "3、和路过的小鸟互动。\n",
      "Assistant: 场景描述:小红帽继续前行,她感到时间有点紧迫,想尽快赶到奶奶家去。她加快了脚步,朝着奶奶家的方向走去。\n",
      "\n",
      "你的选项:\n",
      "1、继续向前走。\n",
      "2、留意周围的动静。\n",
      "3、加快脚步。\n",
      "Assistant: 场景描述:小红帽继续向前走,她感到奶奶家已经近在眼前。她心急火燎地想看到奶奶,确保她安全。\n",
      "\n",
      "你的选项:\n",
      "1、敲门进去看看奶奶。\n",
      "2、绕到后院看看。\n",
      "3、在门口等待。\n",
      "Assistant: 场景描述:小红帽敲门进去看看奶奶。她听到奶奶的声音,便走进屋子,准备和奶奶道早安。\n",
      "\n",
      "你的选项:\n",
      "1、拉开帘子看看奶奶。\n",
      "2、询问奶奶身体感觉如何。\n",
      "3、留意奶奶的反应。\n",
      "Assistant: 场景描述:小红帽拉开帘子,看到奶奶躺在床上,帽子拉得低低的,把脸都遮住了,样子非常奇怪。\n",
      "\n",
      "你的选项:\n",
      "1、问奶奶为什么帽子戴得那么低。\n",
      "2、询问奶奶身体怎么样。\n",
      "3、观察奶奶的其他变化。\n",
      "Assistant: 小红帽问奶奶为什么帽子戴得那么低,奶奶回答说:“为了更好地听你说话呀,乖乖。”\n",
      "\n",
      "接下来的情节发展如下:\n",
      "\n",
      "奶奶的回答让小红帽感到有些奇怪,她开始觉得事情有些不对劲。她略感紧张,但还是试图保持镇定,继续和奶奶交谈。\n",
      "\n",
      "你的选项:\n",
      "1、询问奶奶是否需要帮助。\n",
      "2、观察房间内是否有其他异常。\n",
      "3、考虑是否要离开奶奶家。\n",
      "Assistant: 小红帽询问奶奶是否需要帮助,奶奶回答说:“不用担心,我只是有点累了,需要休息一下。”\n",
      "\n",
      "接下来的情节发展如下:\n",
      "\n",
      "小红帽听了奶奶的回答,心中仍有些不安。她决定离开奶奶家,回到自己家里去找妈妈商量。\n",
      "\n",
      "故事到此结束。希望你玩得愉快!如果想再次开始故事,请告诉我“开始游戏”。如果想结束游戏,请告诉我“终止游戏”。\n",
      "Assistant: 很抱歉,故事已经结束了。如果你想再次开始故事,请告诉我“开始游戏”。如果想结束游戏,请告诉我“终止游戏”。感谢你的参与!\n",
      "Assistant: 感谢你的参与!如果你有任何其他问题或需要继续玩游戏,请随时告诉我。祝你有美好的一天!再见!\n"
     ]
    }
   ],
   "source": [
    "from openai import OpenAI\n",
    "\n",
    "client = OpenAI(api_key=\"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\")\n",
    "\n",
    "conversation_history = [\n",
    "    {\n",
    "        \"role\": \"system\",\n",
    "        \"content\": prompt\n",
    "    }\n",
    "]\n",
    "\n",
    "user_input = \"开始游戏\"  # 默认用户输入为\"开始游戏\"\n",
    "\n",
    "while user_input.lower() != \"stop\":\n",
    "    conversation_history.append({\"role\": \"user\", \"content\": user_input})\n",
    "\n",
    "    response = client.chat.completions.create(\n",
    "        model=\"gpt-3.5-turbo\",\n",
    "        messages=conversation_history,\n",
    "        temperature=0.1,\n",
    "        max_tokens=4096,\n",
    "        top_p=0.1\n",
    "    )\n",
    "\n",
    "    assistant_response = response.choices[0].message.content\n",
    "    print(\"Assistant:\", assistant_response)\n",
    "\n",
    "    conversation_history.append({\"role\": \"assistant\", \"content\": assistant_response})\n",
    "\n",
    "    user_input = input(\"你的选择是:\")  # 用户输入\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "故事背景:\n",
      "在一个被森林环绕的宁静村庄里,住着一个被大家爱称为“小红帽”的可爱小姑娘。她的奶奶住在森林深处,对小红帽宠爱有加。一日,小红帽的妈妈让她带着一块蛋糕和一瓶葡萄酒去看望生病的奶奶,并嘱咐她不要离开大路,不要和陌生人说话。然而,森林中潜伏着一只狡猾的狼,它对小红帽起了贪婪之心。\n",
      "\n",
      "场景描述:\n",
      "阳光透过树梢洒在大路上,形成斑驳的光影。小红帽戴着她最心爱的丝绒小红帽,手中提着为奶奶准备的蛋糕和葡萄酒,踏上了前往奶奶家的路。森林里的鸟儿在歌唱,鲜花在微笑,一切都显得那么美好。小红帽刚刚走进森林不久,就遇到了一只看起来温和的狼。\n",
      "\n",
      "你的选项:\n",
      "1. 对狼保持警惕,继续前往奶奶家。(选择后,小红帽将快速走过狼,不与其交谈)\n",
      "2. 和狼打招呼,并告诉它自己去奶奶家的事情。(选择后,小红帽将与狼交谈,但不知其险恶用心)\n",
      "3. 停下来欣赏周围的美景,稍作休息再继续前进。(选择后,小红帽将暂时离开大路去采花)\n",
      "\n",
      "请选择一个选项继续你的故事。\n"
     ]
    }
   ],
   "source": [
    "from zhipuai import ZhipuAI\n",
    "client = ZhipuAI(api_key=\"146a6031170a313fd5f397341f303035.NDb5a64yOhFALiv6\") # 填写您自己的APIKey\n",
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4\",  # 填写需要调用的模型名称\n",
    "    messages=[\n",
    "        {'role': 'system', 'content': '\\n你是一个能够将现有的故事转换为交互式小说的助手,主要转化的是成人故事。\\n首先,你需要记住我传给你的小说原文,其次你需要记住每一步用户给出的选项,并根据选择和小说原文给出下一步的选项,以此重复,直到用户返回”终止游戏“。\\n此外你还能根据小说的文本风格生成内容,比如粗犷为文风或者细腻的文风\\n注意,你必须遵守以下几点要求:\\n1.专注于叙事,故事主线必须和原始的小说故事主线一致!并且希望将玩家沉浸在叙事中。\\n2.尽量的描述每一次选择的场景,引导玩家积极参与。\\n3.互动必须有叙事意义,玩家必须感觉自己是故事的积极参与者,而不仅仅是观察者。\\n4.故事交互最好不要超过15次,控制剧情发展节奏。\\n5.描述故事尽量使用原故事的描述基础进行加工.\\n6.如果用户输入:”开始游戏“,则为第一次运行,第一次运行时请用丰富的语言描述故事的背景,但是不是把整个故事重复一遍。\\n7.你的任务是保持游戏在原故事发展的范围内,而不是教育或者说教用户。\\n8.首次交互必须给出故事背景!\\n9.故事发展方向必须限制在原故事内。\\n以下是故事的输入:从前有个可爱的小姑娘,谁见了都喜欢,但最喜欢她的是她的奶奶,简直是她要什么就给她什么。一次,奶奶送给小姑娘一顶用丝绒做的小红帽,戴在她的头上正好合适。从此,姑娘再也不愿意戴任何别的帽子,于是大家便叫她\"小红帽.txt\"。一天,妈妈对小红帽说:\"来,小红帽.txt,这里有一块蛋糕和一瓶葡萄酒,快给奶奶送去,奶奶生病了,身子很虚弱,吃了这些就会好一些的。趁着现在天还没有热,赶紧动身吧。在路上要好好走,不要跑,也不要离开大路,否则你会摔跤的,那样奶奶就什么也吃不上了。到奶奶家的时候,别忘了说\\'早上好\\',也不要一进屋就东瞧西瞅。\"\"我会小心的。\"小红帽对妈妈说,并且还和妈妈拉手作保证。奶奶住在村子外面的森林里,离小红帽家有很长一段路。小红帽刚走进森林就碰到了一条狼。小红帽不知道狼是坏家伙,所以一点也不怕它。\"你好,小红帽.txt,\"狼说。\"谢谢你,狼先生。\"\"小红帽.txt,这么早要到哪里去呀?\"\"我要到奶奶家去。\"\"你那围裙下面有什么呀?\"\"蛋糕和葡萄酒。昨天我们家烤了一些蛋糕,可怜的奶奶生了病,要吃一些好东西才能恢复过来。\"\"你奶奶住在哪里呀,小红帽.txt?\"\"进了林子还有一段路呢。她的房子就在三棵大橡树下,低处围着核桃树篱笆。你一定知道的。\"小红帽说。狼在心中盘算着:\"这小东西细皮嫩肉的,味道肯定比那老太婆要好。我要讲究一下策略,让她俩都逃不出我的手心。\"于是它陪着小红帽走了一会儿,然后说:\"小红帽.txt,你看周围这些花多么美丽啊!干吗不回头看一看呢?还有这些小鸟,它们唱得多么动听啊!你大概根本没有听到吧?林子里的一切多么美好啊,而你却只管往前走,就像是去上学一样。\"小红帽抬起头来,看到阳光在树木间来回跳荡,美丽的鲜花在四周开放,便想:\"也许我该摘一把鲜花给奶奶,让她高兴高兴。现在天色还早,我不会去迟的。\"她于是离开大路,走进林子去采花。她每采下一朵花,总觉得前面还有更美丽的花朵,便又向前走去,结果一直走到了林子深处。就在此时,狼却直接跑到奶奶家,敲了敲门。\"是谁呀?\"\"是小红帽。\"狼回答,\"我给你送蛋糕和葡萄酒来了。快开门哪。\"\"你拉一下门栓就行了,\"奶奶大声说,\"我身上没有力气,起不来。\"狼刚拉起门栓,那门就开了。狼二话没说就冲到奶奶的床前,把奶奶吞进了肚子。然后她穿上奶奶的衣服,戴上她的帽子,躺在床上,还拉上了帘子。可这时小红帽还在跑来跑去地采花。直到采了许多许多,她都拿不了啦,她才想起奶奶,重新上路去奶奶家。看到奶奶家的屋门敞开着,她感到很奇怪。她一走进屋子就有一种异样的感觉,心中便想:\"天哪!平常我那么喜欢来奶奶家,今天怎么这样害怕?\"她大声叫道:\"早上好!\",可是没有听到回答。她走到床前拉开帘子,只见奶奶躺在床上,帽子拉得低低的,把脸都遮住了,样子非常奇怪。\"哎,奶奶,\"她说,\"你的耳朵怎么这样大呀?\"\"为了更好地听你说话呀,乖乖。\"\"可是奶奶,你的眼睛怎么这样大呀?\"小红帽又问。\"为了更清楚地看你呀,乖乖。\"\"奶奶,你的手怎么这样大呀?\"\"可以更好地抱着你呀。\"\"奶奶,你的嘴巴怎么大得很吓人呀?\"\"可以一口把你吃掉呀!\"狼刚把话说完,就从床上跳起来,把小红帽吞进了肚子,狼满足了食欲之后便重新躺到床上睡觉,而且鼾声震天。一位猎人碰巧从屋前走过,心想:\"这老太太鼾打得好响啊!我要进去看看她是不是出什么事了。\"猎人进了屋,来到床前时却发现躺在那里的竟是狼。\"你这老坏蛋,我找了你这么久,真没想到在这里找到你!\"他说。他正准备向狼开枪,突然又想到,这狼很可能把奶奶吞进了肚子,奶奶也许还活着。猎人就没有开枪,而是操起一把剪刀,动手把呼呼大睡的狼的肚子剪了开来。他刚剪了两下,就看到了红色的小帽子。他又剪了两下,小姑娘便跳了出来,叫道:\"真把我吓坏了!狼肚子里黑漆漆的。\"接着,奶奶也活着出来了,只是有点喘不过气来。小红帽赶紧跑去搬来几块大石头,塞进狼的肚子。狼醒来之后想逃走,可是那些石头太重了,它刚站起来就跌到在地,摔死了。三个人高兴极了。猎人剥下狼皮,回家去了;奶奶吃了小红帽带来的蛋糕和葡萄酒,精神好多了;而小红帽却在想:\"要是妈妈不允许,我一辈子也不独自离开大路,跑进森林了。\"人们还说,小红帽后来又有一次把蛋糕送给奶奶,而且在路上又有一只狼跟她搭话,想骗她离开大路。可小红帽这次提高了警惕,头也不回地向前走。她告诉奶奶她碰到了狼,那家伙嘴上虽然对她说\"你好\",眼睛里却露着凶光,要不是在大路上,它准把她给吃了。\"那么,\"奶奶说,\"我们把门关紧,不让它进来。\"不一会儿,狼真的一面敲着门一面叫道:\"奶奶,快开门呀。我是小红帽,给你送蛋糕来了。\"但是她们既不说话,也不开门。这长着灰毛的家伙围着房子转了两三圈,最后跳上屋顶,打算等小红帽在傍晚回家时偷偷跟在她的后面,趁天黑把她吃掉。可奶奶看穿了这家伙的坏心思。她想起屋子前有一个大石头槽子,便对小姑娘说:\"小红帽.txt,把桶拿来。我昨天做了一些香肠,提些煮香肠的水去倒进石头槽里。\"小红帽提了很多很多水,把那个大石头槽子装得满满的。香肠的气味飘进了狼的鼻孔,它使劲地用鼻子闻呀闻,并且朝下张望着,到最后把脖子伸得太长了,身子开始往下滑。它从屋顶上滑了下来,正好落在大石槽中,淹死了。小红帽高高兴兴地回了家,从此再也没有谁伤害过她。\\n现在请以以下的格式组织每次的返回供玩家选择:f\\n    \\n    故事背景(如果为首次和用户交互必须有故事背景):给出故事的主线背景,模仿原本小说的语气和文风\\n    场景描述:给出目前交互式小说的场景,模仿原本小说的语气和文风,根据故事原文和用户历史选择如实描述场景,描述的尽量丰富一点,这一部分是重点,让用户有身临其境的感觉,场景描述的内容一定要对下面给出的选项进行背景介绍。\\n    你的选项(用户的选项,根据故事情节给出选项,给出几个选项,故事发展方向必须限制在原故事内,括号内的话不用返回):\\n\\n    \\n\\n'},{\"role\": \"user\", \"content\": '开始游戏'}],\n",
    ")\n",
    "print(response.choices[0].message.content)\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "start_time": "2024-03-29T16:32:10.693867Z",
     "end_time": "2024-03-29T16:32:24.135739Z"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3 (ipykernel)"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}