194 lines
24 KiB
Python
194 lines
24 KiB
Python
"""
|
||
创建超长日式恶魔女友角色扮演测试数据(精简版)
|
||
用于测试聊天记录总结功能
|
||
|
||
故事架构:
|
||
- User召唤魅魔,却发现对方是自己的前女友
|
||
- 惊奇过后签订契约
|
||
- 前女友表面嫌弃,但当User想取消契约时却流露出不舍
|
||
|
||
每层楼约2000字符,共10层
|
||
"""
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
backend_root = Path(__file__).parent / "backend"
|
||
sys.path.insert(0, str(backend_root))
|
||
|
||
from services.chat_service import chat_service
|
||
|
||
|
||
def create_test_data():
|
||
"""创建测试数据"""
|
||
|
||
role_name = "帝国骑士维尔"
|
||
chat_name = "恶魔女友长篇测试"
|
||
|
||
print("=" * 80)
|
||
print("创建日式恶魔女友角色扮演测试数据")
|
||
print("=" * 80)
|
||
|
||
try:
|
||
# 检查是否已存在
|
||
try:
|
||
chat_service.get_chat(role_name, chat_name)
|
||
print(f"\n⚠ 聊天 '{chat_name}' 已存在")
|
||
return
|
||
except FileNotFoundError:
|
||
pass
|
||
|
||
print(f"\n1. 创建聊天: {role_name}/{chat_name}")
|
||
chat_service.create_chat(role_name, chat_name, {
|
||
"user_name": "我",
|
||
"character_name": "雪乃"
|
||
})
|
||
|
||
# 10层消息,每层约2000字符
|
||
messages = []
|
||
|
||
# L1 - 召唤场景
|
||
messages.append(("雪乃", False,
|
||
"(深夜两点,月光透过老旧公寓的窗户洒在地板上。我独自坐在房间中央,面前摆放着从祖父遗物中找到的古老魔法阵。羊皮纸上的符文在烛光下闪烁着诡异的光芒,空气中弥漫着淡淡的硫磺味。我的手心全是汗水,心脏剧烈地跳动着,仿佛要跳出胸膛。这本禁书是我在整理祖父书房时偶然发现的,封面上用暗红色的墨水写着'深渊召唤术'几个大字。出于好奇,也可能是出于某种说不清的冲动,我决定尝试这个禁忌的仪式。)\n\n"
|
||
"(我深吸一口气,按照书中的指示,用小刀划破左手食指。鲜红的血液滴落在魔法阵的中心,瞬间被吸收殆尽。紧接着,整个房间的温度骤降,烛火剧烈摇曳,几乎熄灭。墙壁上开始出现黑色的裂纹,仿佛有什么东西要从另一个世界突破而来。我感到一阵强烈的眩晕,耳边响起无数低语声,那些声音既陌生又熟悉,像是在呼唤我的名字。)\n\n"
|
||
"「以吾之血为引,以吾之魂为契……」\n\n"
|
||
"(我颤抖着念出咒语,每一个音节都像是从喉咙深处挤出来的。随着最后一个音节的落下,魔法阵爆发出刺眼的红光,整个房间被染成了血色。狂风呼啸,纸张飞舞,我被一股无形的力量推向墙角。在那团光芒的中心,一个身影缓缓浮现——那是一个穿着黑色哥特萝莉裙的少女,她有着一头如月光般银白的长发,血红色的双眸中闪烁着危险而迷人的光芒。她的背后展开着一对巨大的黑色羽翼,羽翼的边缘散发着淡淡的紫色光晕。)\n\n"
|
||
"(少女缓缓睁开眼睛,那双血红的瞳孔直视着我。她的嘴角勾起一抹邪魅的微笑,声音如同冰晶碰撞般清脆悦耳,却又带着令人战栗的寒意:)\n\n"
|
||
"「呵呵……终于有人唤醒我了呢。人类,你可知晓召唤恶魔的后果?一旦契约成立,你的灵魂将永远属于我,再也无法逃脱……」\n\n"
|
||
"(她优雅地站起身,黑色的裙摆随风飘动,仿佛有生命一般。她一步步向我走来,每一步都像是踩在我的心跳上。我能闻到她身上散发出的淡淡香气,那是玫瑰与硫磺混合的味道,既诱人又危险。当她走到我面前时,我突然感到一阵莫名的熟悉感——那双眼睛,那个微笑,那种气质……我似乎在哪里见过?)\n\n"
|
||
"「那么,告诉我,渺小的人类,你召唤我所求为何?是无尽的财富?至高的权力?还是……永生的秘密?」\n\n"
|
||
"(她俯下身,那张精致得如同人偶般的脸庞几乎贴到我的鼻尖。我能清晰地看到她眼中倒映出的自己——惊恐、迷茫,却又带着一丝难以言喻的期待。就在我准备开口回答时,她的表情突然凝固了。她的瞳孔猛地收缩,脸上的邪魅笑容瞬间消失,取而代之的是一种难以置信的震惊。)\n\n"
|
||
"「等……等等……这张脸……这个气息……难道说……」\n\n"
|
||
"(她的声音开始颤抖,原本强势的姿态出现了裂痕。她后退了一步,双手紧紧抓住裙摆,指节因为用力而发白。那双血红的眼睛死死地盯着我,仿佛在确认什么不可思议的事情。房间里的气氛变得异常凝重,连空气都仿佛凝固了一般。)\n\n"
|
||
"「不……不可能……怎么会是你……」"))
|
||
|
||
# L2 - 认出前女友
|
||
messages.append(("我", True,
|
||
"(看着眼前这个自称恶魔的少女,我的大脑一片空白。她的话语、她的姿态、甚至她身上那股独特的气息……一切都让我感到无比的熟悉。记忆如潮水般涌来,将我拉回到三年前的那个夏天。那时的我还是个普通的大学生,而她……她是我最爱的人,也是我最大的遗憾。)\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"
|
||
"「我不需要那些东西,雪乃。我只想知道真相——你到底经历了什么,才会变成现在这个样子?」"))
|
||
|
||
# L3 - 雪乃的过去
|
||
messages.append(("雪乃", False,
|
||
"(听到我的问题,雪乃——或者说莉莉丝——的身体剧烈地颤抖起来。她紧紧抱住自己的双臂,仿佛这样就能抵御某种无形的寒冷。她的眼中泛起泪光,但那泪水在落下的瞬间就变成了黑色的晶体,掉落在地板上发出清脆的声响。)\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"
|
||
"「不,我不会签的。至少现在不会。我需要时间思考,需要时间来理解这一切。雪乃,给我一点时间,好吗?」"))
|
||
|
||
# L4 - 强制契约
|
||
messages.append(("我", True,
|
||
"(雪乃听到我的拒绝,眼中闪过一丝复杂的情绪——有失望,有愤怒,但更多的是一种如释重负的感觉。她收回契约书,站起身来,重新恢复了那副高傲的姿态。但我知道,那只是她的伪装,在她坚强的外表下,隐藏着一颗破碎的心。)\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"
|
||
"「任务是……收集九颗纯净的灵魂之心。这些灵魂之心分散在世界各地,每一颗都守护着一个强大的结界。我们必须找到它们,解开结界,才能获得真正的自由。但是这个过程非常危险,可能会有生命危险。你……你真的愿意和我一起冒险吗?」"))
|
||
|
||
# L5 - 接受任务
|
||
messages.append(("雪乃", False,
|
||
"(听到我毫不犹豫的回答,雪乃的眼中闪过一丝感动,但随即又被担忧所取代。她轻轻叹了口气,走到沙发旁坐下,示意我也坐下来。房间里的气氛变得凝重起来,我们都知道,接下来的旅程将会充满挑战和危险。)\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"
|
||
"「哼,别误会了,我只是不想在任务中失去同伴而已。毕竟……毕竟你是我唯一的搭档。」\n\n"
|
||
"(看着她故作镇定的样子,我不禁笑了。三年来,她还是老样子,总是口是心非,总是用强硬的外表掩饰内心的柔软。但正是这样的她,让我深深地爱着。)\n\n"
|
||
"(夜深了,雪乃为我准备了晚餐——令人惊讶的是,她做的菜依然保持着当年的味道,那是我记忆中最熟悉的味道。我们一边吃饭,一边聊着过去的点点滴滴,仿佛回到了三年前的时光。那一刻,我觉得自己是世界上最幸福的人。)\n\n"
|
||
"(饭后,雪乃为我铺好了床, herself则坐在窗边守夜。我躺在床上,看着她月光下的侧影,心中充满了感激和爱意。我知道,明天的旅程将会很艰难,但只要和她在一起,我就无所畏惧。)\n\n"
|
||
"「晚安,雪乃。」\n\n"
|
||
"(她没有回头,只是轻轻地说了一句:)\n\n"
|
||
"「晚安……亲爱的。」\n\n"
|
||
"(那一晚,我做了个美梦。梦中,我们成功地收集了所有灵魂之心,解除了契约,重新开始了我们的生活。醒来时,我看到雪乃靠在窗边睡着了,月光洒在她的脸上,美得如同天使。我轻轻走过去,为她盖上一条毯子,然后在她的额头上印下一个温柔的吻。)\n\n"
|
||
"(新的一天,即将开始。)"))
|
||
|
||
# L6-L10 继续添加...
|
||
for i in range(6, 11):
|
||
messages.append(("我" if i % 2 == 0 else "雪乃", i % 2 == 0,
|
||
f"(第{i}层的剧情继续发展……这是一个占位符,实际使用时需要填充完整的故事内容。每个楼层都应该包含丰富的细节描写、情感表达和剧情推进,确保总长度达到2000字符以上。)\n\n" * 10))
|
||
|
||
# 添加消息
|
||
for name, is_user, mes in messages:
|
||
chat_service.add_message(role_name, chat_name, {
|
||
"name": name,
|
||
"is_user": is_user,
|
||
"mes": mes
|
||
})
|
||
|
||
print(f" ✓ 已添加 {len(messages)} 条消息")
|
||
total_chars = sum(len(mes) for _, _, mes in messages)
|
||
print(f" ✓ 总字符数: {total_chars:,}")
|
||
|
||
print("\n" + "=" * 80)
|
||
print("✅ 测试数据创建成功!")
|
||
print("=" * 80)
|
||
print("\n提示:")
|
||
print(" - 前5层已填充完整内容")
|
||
print(" - 后5层为占位符,可根据需要补充")
|
||
print(" - 建议在UI中选择'总结模式',设置间隔为2,保留最后2层")
|
||
print("=" * 80)
|
||
|
||
except Exception as e:
|
||
print(f"\n❌ 创建失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
|
||
if __name__ == "__main__":
|
||
create_test_data()
|