AI-Galgame 数据库设计
系统说明
- 用户可以拥有存档,系统会记录最后一次使用的角色。
- 剧本是外部资源文件夹,数据库中运行剧本则是记录玩家运行剧本到第几章节,每个章节都是由线性的事件events组成,所以会记录events的位置(int),以及变量信息比如玩家选择了分支之类的信息。
- 记忆仓库则是额外加到ai记忆里的,有关永久记忆的东西
- 台词首先由ai生成,然后会由程序处理,切割为tts语言,动作,情感,以及用深度学习模型预测后,显示立绘的情感,以及音频文件,主台词等各种信息,其中attribute则是代表台词的来源,比如是system还是assistant,还是user。额外的还会有角色的设计。
- 角色则是外部资源文件夹,数据库中记录角色的资源路径,以及角色名称。
- 台词可以有多个分支,和网页web聊天一样,ai的每次回复可以重新生成,或者从新的节点开始,所以设计了台词关系表
ER 图设计

实体设计
- 角色:角色id,角色名称,资源路径
- 台词:台词id,原情绪,预测情绪,主内容,tts语言内容,动作内容,音频文件,属性(assistant, user, system)
- 存档:存档id,标题,创建日期,更新日期
- 用户:用户id,用户名,密码
- 运行剧本:剧本id,标题,变量信息(json),当前章节,事件序列
- 记忆仓库(MemoryBank):记忆id,信息(长篇txt)
关系设计
- 用户和存档是一对多的关系,一个用户可以有多个存档,一个存档只有一个用户。
- 存档和剧本是一对一的关系,一个存档可以有一个运行中的剧本或者没有,一个运行中的剧本只能在一个存档中运行。
- 记忆仓库和存档是一对多的关系,一个存档可以有多个记忆仓库,一个记忆仓库只能属于一个存档。
- 台词和存档是一对多的关系,一个存档可以有多个台词,一个台词只能属于一个存档。
- 台词和角色是一对多的关系,一个角色可以有多个台词,一个台词只属于一个角色。
- 台词和台词是一对多的关系(父子关系,也就是“上一句台词的关系”),一句台词可以有多个下一句台词,但一个台词只能有一个上一句台词。
- 角色和记忆仓库是一对多的关系,一个角色可以有多个记忆仓库,一个记忆仓库只能属于一个角色。
数据表设计
角色表(role):
- id:角色id,主键
- name:角色名称
- resource_folder:资源路径
台词表(line):
- id:台词id,主键
- original_emotion:原情绪
- predicted_emotion:预测情绪
- content:主内容
- tts_content:tts语言内容
- action_content:动作内容
- audio_file: 音频文件
- attribute:属性(assistant, user, system)
- role_id:角色id,外键,引用角色表中的id
- script_role_id:剧本角色id,不是外键,剧本文件夹中对应的NPC的id,string类型
- display_name: 没有角色的情况下,显示的名称,在role_id和script_role_id都为空的时候,显示这个名称
- save_id:存档id,外键,引用存档表中的id
- parent_line_id:上一句台词id,外键,引用台词表中的id
存档表(save):
- id:存档id,主键
- title:标题
- last_message_id: 最后一条消息id,外键,引用台词表中的id
- create_date:创建日期
- update_date:更新日期
- user_id:用户id,外键,引用用户表中的id
- running_script_id:剧本id,外键,引用剧本表中的id,可选,记录当前存档运行的是哪个运行剧本状态
用户表(user_info):
- id:用户id,主键
- username:用户名
- password:密码
- last_character_id:最后使用的角色id,外键,引用角色表中的id
运行剧本表(running_script):
- id:剧本id,主键
- script_folder: 剧本key,用于记录剧本的文件夹名称,确定唯一的剧本
- save_id: 存档id,外键,引用存档表中的id,记录存档的剧本运行状态
- variable_info:变量信息(json)
- current_chapter:当前章节(string)
- event_sequence:当前事件(int)
记忆仓库表(memory_bank):
- id:记忆id,主键
- info:信息(json)
- save_id:存档id,外键,引用存档表中的id
- role_id:角色id,外键,引用角色表中的id
- script_roile_id:剧本角色id,不是外键,剧本文件夹中对应的NPC的id,string类型

