# Needy-Haruhi AIGC-Galgame via Dynamic Memory # Agent 用于记录糖糖当前的状态,暂时感觉是一个字典也可以 可以使用 agent["Attribute_Name"]的方式进行set和get属性 apply_attribute_change( attribute_change ) # DialogueEvent DialogueEvent Data和memory是相关的,用来记忆 - Name, Event的Name - Prefix, 糖糖的问话 - Options,预设的选项,其中每个选项包括 - User_Message 用户的对话 - Reply 糖糖的回复 - Attribute_Change 这个选项下糖糖的属性修改 - Condition 这个还没想好,事件出现的condition,不行就复用原游戏的设定。condition可以根据当前的Attribute_Change来指定输出不同的DialogueEvent。 当然我们也支持用户的自由对话 这个时候reply由chatbot给出, attribute_change由evaluator给出 # AttributeChange 用一个dict表示 比如{"Stress":1, "Darkness":-1} DialoguePlayer - init 或者load 会载入一个dialogueEvent,这样就可以进一步游玩了 - get_prefix 获得prefix, 同时在history中append prefix - render_options 获得需要给玩家回复的选项 这里具体是输出str还是输出list of str要到时候看一下 - chat(text) 这里会回复response,如果玩家选择text, 会同时将text和response append 到history - get_attribute_change() 评估当前history下,对角色产生的影响(原则上只在len(history)>=3的时候运行) - self.chatbot 这个类需要依赖一个chatbot来获取回复 - get_whole_text() 返回完整的对话,用于回头更新memory来用 # Memory 每个memory会包括如下字段 - Name, Event的Name,用来后续如果玩家进行游戏修改的话可以根据 - Text, 这个event下完整的对话文本 - Embedding, text的embedding - Condition, 这个event对应的出现条件 - Emoji, 这个memory的缩写显示emoji # MemoryPool - 成员add_memory(memory) - 成员change_memory( memory_name, new_text ) 会将memory_name对应的事件改为new_text - 成员retrieve( agent, text ), 根据agent的属性,以及玩家的话,对memory进行搜索 - self.embedding 记录embedding函数 # EventPool - 成员 add_event( event ) - 会记录每个事件是否出现过 - get_random_event( agent ) 根据agent的属性和条件获取事件 # 展示玩法 slideBar控制 agent的属性 然后玩家可以正常对话,对话会使用MemoryPool.retrieve( agent, text ) 来调用记忆库 给出对话 (思考 : 如何展现对比?双开?) 随机事件,会调用EventPool.retrieve 给出一句初始回复 # MemoryWindow 用emoji 展示当前reply中,检索到的记忆 (是否需要同步展示当前属性下可以被搜索到的记忆?) # Print的玩法 外部有个GameManager的状态机控制器来进行控制 # Animation怎么办 是否特定的attribute change会有特定的animation?