silk-road's picture
Upload 37 files
4222961
|
raw
history blame
2.88 kB

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?