From 220901ff6198304b9b189ecb537e3067c9490a8d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 11 Sep 2026 15:30:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(migration):=20m0021=E5=88=A0llm=5Fusage=20?= =?UTF-8?q?token=E5=86=97=E4=BD=99=E5=88=97+m0025=E5=8A=A0project=5Fid?= =?UTF-8?q?=E5=88=97=E7=B4=A2=E5=BC=95(2026-09-10=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AE=9A=E5=A4=BA,=E9=85=8D=E5=AF=B9pipeline-llm@427cd7c)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - m0021: usages JSON全量不截断为计费唯一事实源,req_tokens/resp_tokens同源冗余删除, 统计查询走JSON_EXTRACT+JSON_VALID守卫;backup_tables含llm_usage,dmig幂等(列不存在跳过) - m0025: 按项目统计费用,project_id NOT NULL DEFAULT '0'(哨兵=非项目调用,对齐org_id平台约定), idx_llm_usage_project(project_id,created_at);token绑定project_id全链透传落库 - 两迁移id字段与文件名一致性已校验;llm_call_trace新表走create_tables.py动态扫描models建表,无需迁移 --- .../m0021_llm_usage_drop_token_cols.json | 13 +++++++++ .../m0025_llm_usage_project_id.json | 27 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 deploy/migrations/m0021_llm_usage_drop_token_cols.json create mode 100644 deploy/migrations/m0025_llm_usage_project_id.json diff --git a/deploy/migrations/m0021_llm_usage_drop_token_cols.json b/deploy/migrations/m0021_llm_usage_drop_token_cols.json new file mode 100644 index 0000000..ec5db37 --- /dev/null +++ b/deploy/migrations/m0021_llm_usage_drop_token_cols.json @@ -0,0 +1,13 @@ +{ + "id": "m0021", + "title": "llm_usage 删除 req_tokens/resp_tokens 冗余列(2026-09-10 用户定夺:usages JSON 是计费唯一事实源,token 计数在其中;两列与 usages 同源冗余且曾被截断病根牵连,统计查询改 JSON_EXTRACT)。dmig 幂等守卫:列已不存在自动跳过", + "backup_tables": ["llm_usage"], + "up": [ + {"op": "sql", "sql": "ALTER TABLE llm_usage DROP COLUMN req_tokens"}, + {"op": "sql", "sql": "ALTER TABLE llm_usage DROP COLUMN resp_tokens"} + ], + "down": [ + {"op": "sql", "sql": "ALTER TABLE llm_usage ADD COLUMN req_tokens INT NOT NULL DEFAULT 0 COMMENT '请求token(历史冗余列,计费看usages)'"}, + {"op": "sql", "sql": "ALTER TABLE llm_usage ADD COLUMN resp_tokens INT NOT NULL DEFAULT 0 COMMENT '响应token(历史冗余列,计费看usages)'"} + ] +} diff --git a/deploy/migrations/m0025_llm_usage_project_id.json b/deploy/migrations/m0025_llm_usage_project_id.json new file mode 100644 index 0000000..7034d2c --- /dev/null +++ b/deploy/migrations/m0025_llm_usage_project_id.json @@ -0,0 +1,27 @@ +{ + "id": "m0025", + "title": "llm_usage 加 project_id 列+索引(2026-09-10 用户定夺:按项目统计费用;非项目调用哨兵值'0'(NOT NULL DEFAULT,对齐org_id '0'平台约定);查询不传project_id=不区分项目。token绑定的project_id沿llm_bridge→token→推理端点→govern_settle全链透传落库)。dmig 幂等守卫:列/索引已存在自动跳过(create_tables.py 也会按 models 自动补列)", + "backup_tables": [ + "llm_usage" + ], + "up": [ + { + "op": "sql", + "sql": "ALTER TABLE llm_usage ADD COLUMN project_id VARCHAR(32) NOT NULL DEFAULT '0' COMMENT '项目ID(sd_projects.id;''0''=非项目调用,查询不传=不区分项目)' AFTER ppid" + }, + { + "op": "sql", + "sql": "CREATE INDEX idx_llm_usage_project ON llm_usage (project_id, created_at)" + } + ], + "down": [ + { + "op": "sql", + "sql": "DROP INDEX idx_llm_usage_project ON llm_usage" + }, + { + "op": "sql", + "sql": "ALTER TABLE llm_usage DROP COLUMN project_id" + } + ] +} \ No newline at end of file