101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""迁移脚本:添加 token 消耗字段到对话记录表。"""
|
|||
|
|
import logging
|
|||
|
|
from sqlalchemy import text
|
|||
|
|
from insurance.db.compat import db
|
|||
|
|
|
|||
|
|
|
|||
|
|
def migrate():
|
|||
|
|
"""添加 model_id、message_tokens、answer_tokens 字段到 insurance_chat_records 表。"""
|
|||
|
|
try:
|
|||
|
|
from sqlalchemy import inspect
|
|||
|
|
|
|||
|
|
inspector = inspect(db.engine)
|
|||
|
|
columns = [col['name'] for col in inspector.get_columns('insurance_chat_records')]
|
|||
|
|
|
|||
|
|
dialect = db.engine.dialect.name
|
|||
|
|
|
|||
|
|
# 添加 model_id 字段
|
|||
|
|
if 'model_id' not in columns:
|
|||
|
|
if dialect == 'sqlite':
|
|||
|
|
db.session.execute(text(
|
|||
|
|
"ALTER TABLE insurance_chat_records "
|
|||
|
|
"ADD COLUMN model_id VARCHAR(100)"
|
|||
|
|
))
|
|||
|
|
else:
|
|||
|
|
db.session.execute(text(
|
|||
|
|
"ALTER TABLE insurance_chat_records "
|
|||
|
|
"ADD COLUMN model_id VARCHAR(100) NULL "
|
|||
|
|
"COMMENT '模型 ID'"
|
|||
|
|
))
|
|||
|
|
logging.info("成功添加 model_id 字段")
|
|||
|
|
|
|||
|
|
# 添加 message_tokens 字段(用户输入 token 数)
|
|||
|
|
if 'message_tokens' not in columns:
|
|||
|
|
if dialect == 'sqlite':
|
|||
|
|
db.session.execute(text(
|
|||
|
|
"ALTER TABLE insurance_chat_records "
|
|||
|
|
"ADD COLUMN message_tokens INTEGER DEFAULT 0"
|
|||
|
|
))
|
|||
|
|
else:
|
|||
|
|
db.session.execute(text(
|
|||
|
|
"ALTER TABLE insurance_chat_records "
|
|||
|
|
"ADD COLUMN message_tokens INTEGER DEFAULT 0 "
|
|||
|
|
"COMMENT '用户输入 token 数'"
|
|||
|
|
))
|
|||
|
|
logging.info("成功添加 message_tokens 字段")
|
|||
|
|
|
|||
|
|
# 添加 answer_tokens 字段(助手回复 token 数)
|
|||
|
|
if 'answer_tokens' not in columns:
|
|||
|
|
if dialect == 'sqlite':
|
|||
|
|
db.session.execute(text(
|
|||
|
|
"ALTER TABLE insurance_chat_records "
|
|||
|
|
"ADD COLUMN answer_tokens INTEGER DEFAULT 0"
|
|||
|
|
))
|
|||
|
|
else:
|
|||
|
|
db.session.execute(text(
|
|||
|
|
"ALTER TABLE insurance_chat_records "
|
|||
|
|
"ADD COLUMN answer_tokens INTEGER DEFAULT 0 "
|
|||
|
|
"COMMENT '助手回复 token 数'"
|
|||
|
|
))
|
|||
|
|
logging.info("成功添加 answer_tokens 字段")
|
|||
|
|
|
|||
|
|
db.session.commit()
|
|||
|
|
logging.info("迁移完成:token 字段添加成功")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
logging.error("添加 token 字段失败: %s", e)
|
|||
|
|
db.session.rollback()
|
|||
|
|
raise
|
|||
|
|
|
|||
|
|
|
|||
|
|
def downgrade():
|
|||
|
|
"""删除 token 相关字段。"""
|
|||
|
|
try:
|
|||
|
|
from sqlalchemy import inspect
|
|||
|
|
|
|||
|
|
inspector = inspect(db.engine)
|
|||
|
|
columns = [col['name'] for col in inspector.get_columns('insurance_chat_records')]
|
|||
|
|
|
|||
|
|
for field in ['model_id', 'message_tokens', 'answer_tokens']:
|
|||
|
|
if field in columns:
|
|||
|
|
db.session.execute(text(f"ALTER TABLE insurance_chat_records DROP COLUMN {field}"))
|
|||
|
|
logging.info(f"成功删除 {field} 字段")
|
|||
|
|
|
|||
|
|
db.session.commit()
|
|||
|
|
logging.info("回滚完成:token 字段删除成功")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
logging.error("删除 token 字段失败: %s", e)
|
|||
|
|
db.session.rollback()
|
|||
|
|
raise
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
import sys
|
|||
|
|
sys.path.insert(0, ".")
|
|||
|
|
from app import app
|
|||
|
|
with app.app_context():
|
|||
|
|
migrate()
|
|||
|
|
print("迁移完成")
|