# ImaGetCha ## 环境配置 Python=3.9 ### 官网安装python [官网下载链接](https://www.python.org/downloads/release/python-3913/) ### 使用Conda安装python环境 - 在[此处](https://www.anaconda.com/download)下载Anaconda并安装 - 可以根据[这篇博客](https://zhuanlan.zhihu.com/p/147602389)配置Anaconda的系统环境变量 - 此时在命令行中使用conda命令,可能会报错powershell/cmd/其他终端未初始化,需要根据提示进行对应初始化 - 使用conda create -n imagetcha python=3.9创建新的python环境 - 使用conda activate imagetcha激活python环境,此时输入python与pip均指向新的环境 ### 安装python依赖库 ``` pip install -r requirement.txt ``` ## 使用 ``` python .\main_langchain.py ``` ### 如何修改用户输入 在config文件中有各模块的config.json配置文件 xxx_declare代表该模块输出格式 system_template代表发送给ai的系统消息 human_template代表发送给ai的用户消息 #### input_config.json (主要需要修改的) ``` { "story": "三国,搞笑", "style": "始于黄巾起义的混乱时代,我叫摸鱼,是黄巾军的一员,也是一名墨家子弟,年龄16岁", "intro_declare": { "故事简介": "字符串格式,这是展示给玩家的故事简介与游戏目标", "角色设定": "数组格式,游戏中的npc角色设定,包括角色的名字、特征;不包含玩家所操控的角色", "数值系统": "数组格式,数值系统包括游戏中的数值名称、数值范围、数值含义,例如装备系统、官职系统等", "游戏通关所需条件": "字符串格式,游戏结束的条件,例如“成为了诸侯王”" }, "system_template": "以如下格式输出可以被json.load读取的JSON字符串:{output_type}", "human_template": "我希望生成一个文字冒险游戏,以下是对游戏故事的要求:故事风格:{style},故事参考:{story}" } ``` #### value_config.json ``` { "value_declare": "数组格式,数组中的元素为int,分别对应数值系统中的数值", "system_template": "以如下格式输出JSON:{output_type}", "human_template": "我正在生成一个文字游戏,我将输入游戏当前信息,需要你根据游戏当前信息生成玩家当前数值,如果当前玩家数值为空,则进行初始化;如果不为空,则根据已经发生的最后一个事件对数值进行修改,游戏信息:{intro};严禁输出除了数值数组之外的其他内容,输出示例:[100,50,1,1],你的输出为:" } ``` #### event_config.json ``` { "event_declare": { "事件": "字符串格式,这是展示给玩家的,讲述了玩家当前遇到的事件,例如“0岁,你出生于颍川一个富贵之家...”。出现新的人物时需要在事件中对新的人物进行描写,并在当前角色设定中添加新的角色", "是否需要玩家选择下一步操作": "Boolean格式", "玩家可以做出的选择": "数组格式,玩家可以做出的有限个选择,如果不需要玩家做选择则返回空数组", "当前场景角色": "数组格式,游戏中的npc角色设定,包括角色的名字、特征", "当前场景数值系统": "数组格式,数值系统包括游戏中的数值名称、数值范围、数值含义,例如装备系统、官职系统等;允许由于故事的发展而添加新的数值", "游戏是否结束": "Boolean格式,游戏是否结束" }, "system_template": "我正在生成一个文字冒险游戏,我将输入游戏当前信息与当前游戏的风格、简介,需要你根据游戏当前信息生成玩家接下来遇到的下一个事件,以如下格式输出JSON:{output_type},严格按照格式输出,不要输出除了json字符串之外的其他内容", "human_template": "游戏风格:{style},游戏参考:{story},当前信息:{intro}" } ``` #### format_config.json ``` { "system_template": "将输入字符串转为可以使用json.load读取的字符串,格式如下{output_type},key值和value的类型以上述格式为准,不要输出除了json字符串之外的其他内容", "human_template": "{text}" } ``` #### evaluate_config.json ``` { "evaluate_declare": { "事件": "字符串格式,这是展示给玩家的,讲述了玩家当前遇到的事件,例如“0岁,你出生于颍川一个富贵之家...”。出现新的人物时需要在事件中对新的人物进行描写,并在当前角色设定中添加新的角色", "是否需要玩家选择下一步操作": "Boolean格式", "玩家可以做出的选择": "数组格式,玩家可以做出的有限个选择,如果不需要玩家做选择则返回空数组", "当前场景角色": "数组格式,游戏中的npc角色设定,包括角色的名字、特征", "当前场景数值系统": "数组格式,数值系统包括游戏中的数值名称、数值范围、数值含义,例如装备系统、官职系统等;允许由于故事的发展而添加新的数值", "游戏是否结束": "Boolean格式,游戏是否结束" }, "system_template": "我在生成一个文字冒险游戏,我在使用另一个gpt生成游戏的事件,需要你根据游戏当前信息对其生成内容进行检查与修改,保证生成内容没有逻辑错误,以如下格式输出JSON:{output_type},严禁输出其他内容,只输出json字符串", "human_template": "另一个gpt生成的内容:{event_for_now},严禁输出其他内容,只输出json字符串" } ``` ### 流程实例 ``` python .\main_langchain.py [选择]是否使用数据库中的记录:①新游戏 ②读取存档------1 [Model]Global_model has been created! [Model]Database initialized! [初始化]--------------------------初始化中-------------------------- [初始化]--------------------------GPT得到-------------------------- { "故事简介": "在混乱的黄巾起义时代,你扮演一名名叫摸鱼的黄巾军士兵,同时也是一名墨家子弟。你的目标是在这个乱世中生存 下去,并成为一名伟大的将领。这个故事将以搞笑的方式展现三国时期的历史事件和人物。", "角色设定": [ { "名字": "摸鱼", "特征": "黄巾军士兵,墨家子弟,年龄16岁" }, { "名字": "张角", "特征": "黄巾军领袖,号称“太平道天公将军”" }, { "名字": "刘备", "特征": "蜀汉开国皇帝,号称“汉中王”" }, { "名字": "关羽", "特征": "蜀汉五虎将之一,号称“关云长”" }, { "名字": "张飞", "特征": "蜀汉五虎将之一,号称“万夫不当之勇”" }, { "名字": "诸葛亮", "特征": "蜀汉丞相,号称“卧龙先生”" } ], "数值系统": [ { "名称": "武力值", "范围": "0-100", "含义": "角色的战斗能力" }, { "名称": "智力值", "范围": "0-100", "含义": "角色的智慧和谋略" }, { "名称": "忠诚值", "范围": "0-100", "含义": "角色对主人的忠诚度" }, { "名称": "声望值", "范围": "0-100", "含义": "角色在社会上的声望和地位" } ], "游戏通关所需条件": "成为了诸侯王" } [初始化]--------------------------json.loads得到-------------------------- {'故事简介': '在混乱的黄巾起义时代,你扮演一名名叫摸鱼的黄巾军士兵,同时也是一名墨家子弟。你的目标是在这个乱世中生存下去,并成为一名伟大的将领。这个故事将以搞笑的方式展现三国时期的历史事件和人物。', '角色设定': [{'名字': '摸鱼', '特征': '黄巾军士兵,墨家子弟,年龄16岁'}, {'名字': '张角', '特征': '黄巾军领袖,号称“太平道天公将军”'}, {'名字': '刘备', '特征': '蜀汉开国皇帝,号称“汉中王”'}, {'名字': '关羽', '特征': '蜀汉五虎将之一,号称“关云长”'}, {'名字': '张飞', '特征': '蜀汉五虎将之一,号称“万夫不当之勇”'}, {'名字': '诸葛亮', '特征': '蜀汉丞相,号称“卧龙先生”'}], '数值系统': [{'名称': '武力值', '范围': '0-100', '含义': '角色的战斗能力'}, {'名称': '智力值', '范围': '0-100', '含义': '角色的智慧和谋略'}, {'名称': '忠诚值', '范围': '0-100', '含义': '角色对主人的忠诚度'}, {'名称': '声望值', '范围': '0-100', '含义': '角色在社会上的声望和地位'}], '游戏通关所需条件': '成为了诸侯王'} [数值]--------------------------修改数值中-------------------------- [数值]--------------------------GPT得到-------------------------- [50, 50, 50, 50] [数值]--------------------------json.loads得到-------------------------- [50, 50, 50, 50] [选择]是否在每次生成事件后进行优化诊断:①是 ②否------2 --------------------------生成事件中-------------------------- {'事件': '你正在黄巾军的营地里休息,突然听到外面传来了喊杀声。你走出帐篷,发现张角正在与一名蜀汉将领激战。你决定:', '是否需要玩家选择下一步操作': True, '玩家可以做出的选择': ['加入战斗,帮助张角', '趁机逃跑,寻找机会报信给上级', '观望,等 待战斗结束'], '当前场景角色': [{'名字': '摸鱼', '特征': '黄巾军士兵,墨家子弟,年龄16岁'}, {'名字': '张角', '特征': '黄 巾军领袖,号称“太平道天公将军”'}, {'名字': '刘备', '特征': '蜀汉开国皇帝,号称“汉中王”'}, {'名字': '关羽', '特征': '蜀汉五虎将之一,号称“关云长”'}, {'名字': '张飞', '特征': '蜀汉五虎将之一,号称“万夫不当之勇”'}, {'名字': '诸葛亮', '特征': '蜀汉丞相,号称“卧龙先生”'}], '当前场景数值系统': [{'名称': '武力值', '范围': '0-100', '含义': '角色的战斗能力'}, {'名称': '智力值', '范围': '0-100', '含义': '角色的智慧和谋略'}, {'名称': '忠诚值', '范围': '0-100', '含义': '角色对主人的忠诚 度'}, {'名称': '声望值', '范围': '0-100', '含义': '角色在社会上的声望和地位'}], '游戏是否结束': False} 格式错误,修复中 [修复]--------------------------修复格式中-------------------------- [修复]--------------------------GPT得到-------------------------- {"事件": "你正在黄巾军的营地里休息,突然听到外面传来了喊杀声。你走出帐篷,发现张角正在与一名蜀汉将领激战。你决定:", "是否需要玩家选择下一步操作": true, "玩家可以做出的选择": ["加入战斗,帮助张角", "趁机逃跑,寻找机会报信给上级", "观望,等 待战斗结束"], "当前场景角色": [{"名字": "摸鱼", "特征": "黄巾军士兵,墨家子弟,年龄16岁"}, {"名字": "张角", "特征": "黄 巾军领袖,号称“太平道天公将军”"}, {"名字": "刘备", "特征": "蜀汉开国皇帝,号称“汉中王”"}, {"名字": "关羽", "特征": "蜀汉五虎将之一,号称“关云长”"}, {"名字": "张飞", "特征": "蜀汉五虎将之一,号称“万夫不当之勇”"}, {"名字": "诸葛亮", "特征": "蜀汉丞相,号称“卧龙先生”"}], "当前场景数值系统": [{"名称": "武力值", "范围": "0-100", "含义": "角色的战斗能力"}, {"名称": "智力值", "范围": "0-100", "含义": "角色的智慧和谋略"}, {"名称": "忠诚值", "范围": "0-100", "含义": "角色对主人的忠诚 度"}, {"名称": "声望值", "范围": "0-100", "含义": "角色在社会上的声望和地位"}], "游戏是否结束": false} [修复]--------------------------json.loads得到-------------------------- {'事件': '你正在黄巾军的营地里休息,突然听到外面传来了喊杀声。你走出帐篷,发现张角正在与一名蜀汉将领激战。你决定:', '是否需要玩家选择下一步操作': True, '玩家可以做出的选择': ['加入战斗,帮助张角', '趁机逃跑,寻找机会报信给上级', '观望,等 待战斗结束'], '当前场景角色': [{'名字': '摸鱼', '特征': '黄巾军士兵,墨家子弟,年龄16岁'}, {'名字': '张角', '特征': '黄 巾军领袖,号称“太平道天公将军”'}, {'名字': '刘备', '特征': '蜀汉开国皇帝,号称“汉中王”'}, {'名字': '关羽', '特征': '蜀汉五虎将之一,号称“关云长”'}, {'名字': '张飞', '特征': '蜀汉五虎将之一,号称“万夫不当之勇”'}, {'名字': '诸葛亮', '特征': '蜀汉丞相,号称“卧龙先生”'}], '当前场景数值系统': [{'名称': '武力值', '范围': '0-100', '含义': '角色的战斗能力'}, {'名称': '智力值', '范围': '0-100', '含义': '角色的智慧和谋略'}, {'名称': '忠诚值', '范围': '0-100', '含义': '角色对主人的忠诚 度'}, {'名称': '声望值', '范围': '0-100', '含义': '角色在社会上的声望和地位'}], '游戏是否结束': False} {'事件': '你正在黄巾军的营地里休息,突然听到外面传来了喊杀声。你走出帐篷,发现张角正在与一名蜀汉将领激战。你决定:', '是否需要玩家选择下一步操作': True, '玩家可以做出的选择': ['加入战斗,帮助张角', '趁机逃跑,寻找机会报信给上级', '观望,等 待战斗结束'], '当前场景角色': [{'名字': '摸鱼', '特征': '黄巾军士兵,墨家子弟,年龄16岁'}, {'名字': '张角', '特征': '黄 巾军领袖,号称“太平道天公将军”'}, {'名字': '刘备', '特征': '蜀汉开国皇帝,号称“汉中王”'}, {'名字': '关羽', '特征': '蜀汉五虎将之一,号称“关云长”'}, {'名字': '张飞', '特征': '蜀汉五虎将之一,号称“万夫不当之勇”'}, {'名字': '诸葛亮', '特征': '蜀汉丞相,号称“卧龙先生”'}], '当前场景数值系统': [{'名称': '武力值', '范围': '0-100', '含义': '角色的战斗能力'}, {'名称': '智力值', '范围': '0-100', '含义': '角色的智慧和谋略'}, {'名称': '忠诚值', '范围': '0-100', '含义': '角色对主人的忠诚 度'}, {'名称': '声望值', '范围': '0-100', '含义': '角色在社会上的声望和地位'}], '游戏是否结束': False} [数值]--------------------------修改数值中-------------------------- [数值]--------------------------GPT得到-------------------------- [50,50,50,50] [数值]--------------------------json.loads得到-------------------------- [50, 50, 50, 50] [玩家选择]当前事件:你正在黄巾军的营地里休息,突然听到外面传来了喊杀声。你走出帐篷,发现张角正在与一名蜀汉将领激战。你决定: [玩家选择]可供选择的选项:1. 加入战斗,帮助张角 2. 趁机逃跑,寻找机会报信给上级 3. 观望,等待战斗结束 [玩家选择]请选择: ```