1. 核心设计思想
我们采用“草稿-发布”分离的模式来管理智能助手的不同版本。其核心思想如下:
分离存储:系统中同时存在两种状态的智能助手,通过两个独立的数据库表进行管理:
- 草稿 (
assistant表):这是主要的工作表,包含了所有版本的智能助手,无论是草稿状态还是已发布状态。通过is_published字段来区分。草稿是编辑中的版本,对它的任何修改都不会影响线上正在运行的版本。 - 发布 (
assistant_published表):这张表可以看作是线上服务版本的“指针”或“快照”集合。当一个草稿被发布时,系统会将该草稿版本的数据复制一份到这张表中,作为线上服务的权威数据源。
- 草稿 (
版本关联:通过
parent_id和assistant_id字段建立草稿与发布版本之间的关联。assistant表中的parent_id指向assistant_published表的id,用于标识一个草稿是从哪个发布版本创建的。assistant_published表中的assistant_id指向assistant表的id,用于标识当前线上版本对应的是哪一条具体的记录。
原子化操作:发布、下线、创建草稿等核心操作都封装在独立的业务逻辑层(Service)中,确保数据在多个表之间操作时的一致性和完整性。
2. 数据模型 (models/assistant.py)
版本管理的核心是数据模型的设计。我们主要依赖以下两个模型:
Assistant模型
该模型代表一个智能助手的具体实例,可以是草稿,也可以是已发布的版本。
# models/assistant.pyclassAssistant(db.Model):# ...id=db.Column(db.Integer,primary_key=True)parent_id=db.Column(db.Integer,db.ForeignKey('assistant_published.id'),nullable=True,comment='父版本id')version=db.Column(db.Integer,nullable=False,default=1,comment='版本号')is_published=db.Column(db.Boolean,nullable=False,default=False,comment='是否已发布')status=db.Column(db.String(255),nullable=False,default=AssistantStatus.DRAFT.value,comment='状态')# ... (其他业务字段如 name, description, model_config 等)published_assistant=db.relationship('AssistantPublished',backref='assistants',foreign_keys=[parent_id])关键字段说明:
parent_id: 外键,指向assistant_published.id。如果这是一个草稿,parent_id指向它所基于的那个发布版本。is_published: 状态标记。True表示这是一个已发布的版本,False表示这是一个草稿。status: 状态枚举,如DRAFT(草稿)、PUBLISHED(已发布)。