-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.sql
More file actions
315 lines (288 loc) · 23.4 KB
/
init.sql
File metadata and controls
315 lines (288 loc) · 23.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
-- ===============================================
-- toLink-Rag 数据库完整表结构快照
-- ===============================================
-- 本文件是「migrations/db.sql (0001 baseline) + 全部 Alembic migration」叠加后的
-- 当前表结构快照,仅用于人/工具查阅与代码评审参考。
-- ⚠️ 不是部署入口:
-- - 冷启动以 migrations/db.sql 为准(已 stamp 为 0001 baseline);
-- - schema 演进的唯一权威源是 src/models/**.py + migrations/versions/*.py;
-- - 修改字段必须先改 ORM 模型并新增 migration,再同步本文件。
-- 同步时机:每条会改动表结构的 migration 落库时一并更新本文件。
-- 末次同步:migration 0011_20260530_add_java_soft_delete_columns
-- ===============================================
CREATE DATABASE IF NOT EXISTS tolink_rag_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE tolink_rag_db;
-- 1. 系统用户表
CREATE TABLE IF NOT EXISTS sys_user (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '用户唯一标识',
username VARCHAR(64) NOT NULL COMMENT '登录账号',
password_hash VARCHAR(255) NOT NULL COMMENT '加密后的密码',
nickname VARCHAR(64) COMMENT '用户昵称',
email VARCHAR(128) COMMENT '邮箱地址',
phone VARCHAR(20) COMMENT '手机号',
avatar_url VARCHAR(512) COMMENT '头像地址',
role ENUM('ADMIN', 'USER') NOT NULL DEFAULT 'USER' COMMENT '角色: ADMIN/USER',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1-正常, 0-禁用',
last_login_at DATETIME COMMENT '最后登录时间',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_username (username),
UNIQUE KEY uk_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '系统用户表';
-- 2. LLM 系统级厂商配置表
CREATE TABLE IF NOT EXISTS llm_system_provider (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '厂商唯一标识',
provider_type VARCHAR(32) NOT NULL COMMENT '厂商类型:openai/claude/glm/deepseek',
provider_name VARCHAR(64) NOT NULL COMMENT '厂商展示名称,如 "OpenAI"',
api_base_url VARCHAR(512) NOT NULL COMMENT '官方默认 API 地址',
supported_models JSON COMMENT '支持模型与能力映射',
config_schema JSON COMMENT '配置参数 Schema',
is_active BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
priority INT NOT NULL DEFAULT 50 COMMENT '厂商优先级(1-100)',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_provider_type (provider_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT 'LLM 系统级厂商配置表';
-- 3. 用户级 LLM 配置表
CREATE TABLE IF NOT EXISTS llm_user_config (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '配置唯一标识',
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户 ID',
provider_id BIGINT UNSIGNED NOT NULL COMMENT '关联 SystemProvider ID',
provider_type VARCHAR(32) NOT NULL COMMENT '厂商类型快照',
provider_name VARCHAR(64) NOT NULL COMMENT '厂商名称快照',
config_name VARCHAR(64) NOT NULL COMMENT '用户自定义配置名称',
api_key VARCHAR(512) NOT NULL COMMENT 'API Key(加密存储)',
custom_api_base_url VARCHAR(512) COMMENT '自定义 API 地址',
model_name VARCHAR(128) NOT NULL COMMENT '具体模型名',
priority INT NOT NULL DEFAULT 50 COMMENT '优先级 1-100',
is_active BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
is_default BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否为默认配置',
timeout_ms INT DEFAULT 60000 COMMENT '超时时间(毫秒)',
max_retries INT DEFAULT 3 COMMENT '最大重试次数',
stream_enabled BOOLEAN DEFAULT TRUE COMMENT '是否支持流式输出',
capability VARCHAR(32) NOT NULL DEFAULT 'CHAT' COMMENT '专用能力标识:CHAT/EMBEDDING/RERANK/OCR',
default_marker INT GENERATED ALWAYS AS (CASE WHEN is_default = 1 AND is_active = 1 THEN 1 ELSE NULL END) STORED COMMENT '默认判别生成列:default+active 时为 1,否则 NULL,仅用于唯一约束',
extra_config JSON COMMENT '扩展配置',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_provider_model (user_id, provider_id, model_name),
UNIQUE KEY uq_user_default_per_capability (user_id, provider_type, capability, default_marker),
INDEX idx_user_active_default (user_id, is_active, is_default),
INDEX idx_user_provider_cap (user_id, provider_type, capability)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '用户级 LLM 配置表';
-- 4. 数据集表
CREATE TABLE IF NOT EXISTS dataset (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '数据集唯一标识',
user_id BIGINT UNSIGNED NOT NULL COMMENT '所属用户 ID',
name VARCHAR(128) NOT NULL COMMENT '数据集名称',
description VARCHAR(512) DEFAULT NULL COMMENT '数据集描述',
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '数据集状态',
is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '逻辑删除标记(软删保留数据集)',
deleted_seq BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除判别列:活行=0、软删=自身id;纳入唯一键支持删后同名重建',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_dataset_user_name_seq (user_id, name, deleted_seq),
INDEX idx_dataset_user_updated (user_id, updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '数据集表';
-- 5. 对话表
CREATE TABLE IF NOT EXISTS chat_conversation (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '对话唯一标识',
user_id BIGINT UNSIGNED NOT NULL COMMENT '所属用户 ID',
dataset_id BIGINT UNSIGNED NOT NULL COMMENT '所属数据集 ID',
last_config_id BIGINT UNSIGNED COMMENT '最后使用的 LLM 配置 ID',
last_model_name VARCHAR(128) COMMENT '最后使用的模型名快照',
title VARCHAR(255) COMMENT '对话标题',
is_pinned BOOLEAN DEFAULT FALSE COMMENT '是否置顶',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_conversation_user_dataset_title (user_id, dataset_id, title),
INDEX idx_chat_conversation_user_pinned_updated (user_id, is_pinned, updated_at),
INDEX idx_chat_conversation_dataset_updated (dataset_id, updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '对话表';
-- 6. 对话消息表
CREATE TABLE IF NOT EXISTS chat_message (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '消息唯一标识',
conversation_id BIGINT UNSIGNED NOT NULL COMMENT '所属对话 ID',
config_id BIGINT UNSIGNED COMMENT '产生该消息所使用的 LLM 配置 ID',
model_name VARCHAR(128) COMMENT '模型名快照',
role VARCHAR(16) NOT NULL COMMENT '角色:user/assistant/system',
content MEDIUMTEXT NOT NULL COMMENT '消息内容',
token_count INT DEFAULT 0 COMMENT '该条消息消耗的 Token 数',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_conversation_created (conversation_id, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '对话消息表';
-- 7. LLM 调用用量日志表
CREATE TABLE IF NOT EXISTS llm_usage_log (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '记录唯一标识',
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户 ID',
config_id BIGINT UNSIGNED NOT NULL COMMENT '用户配置 ID',
provider_type VARCHAR(32) NOT NULL COMMENT '厂商类型',
model_name VARCHAR(128) NOT NULL COMMENT '模型名称',
prompt_tokens INT NOT NULL COMMENT '输入 Token 数',
completion_tokens INT NOT NULL COMMENT '输出 Token 数',
total_tokens INT NOT NULL COMMENT '总 Token 数',
latency_ms INT COMMENT '响应延迟(毫秒)',
status VARCHAR(16) NOT NULL COMMENT '调用状态:success/failed/partial',
error_message VARCHAR(512) COMMENT '错误信息',
fallback_config_id BIGINT UNSIGNED COMMENT '触发 Fallback 时记录原配置 ID',
conversation_id BIGINT UNSIGNED COMMENT '关联对话 ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_date (user_id, created_at),
INDEX idx_config_date (config_id, created_at),
INDEX idx_conversation_id (conversation_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT 'LLM 调用用量日志表';
-- 8. 原始文档上传表
CREATE TABLE IF NOT EXISTS document_original_file (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '原始文档唯一标识',
dataset_id BIGINT UNSIGNED NOT NULL COMMENT '所属数据集ID,对应 dataset.id',
user_id BIGINT UNSIGNED NOT NULL COMMENT '上传用户ID',
original_filename VARCHAR(255) NOT NULL COMMENT '用户上传时的原始文件名',
file_suffix VARCHAR(32) NOT NULL COMMENT '标准化小写文件后缀',
file_size BIGINT UNSIGNED NOT NULL COMMENT '原始文件大小,单位字节',
content_type VARCHAR(128) DEFAULT NULL COMMENT '上传请求中的 Content-Type',
bucket_name VARCHAR(64) NOT NULL DEFAULT 'rag-raw' COMMENT '原文件私有存储桶',
object_key VARCHAR(512) DEFAULT NULL COMMENT '私有OSS对象Key',
file_url VARCHAR(1024) DEFAULT NULL COMMENT 'Python/RAG内部下载URL,不含服务间鉴权Token',
upload_status VARCHAR(20) NOT NULL DEFAULT 'uploading' COMMENT '上传状态: uploading/success/failed',
is_upload_success TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否上传成功',
failure_reason VARCHAR(512) DEFAULT NULL COMMENT '上传失败原因',
is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '逻辑删除标记(软删保留原文件,不删 OSS)',
deleted_seq BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '删除判别列:活行=0、软删=自身id;纳入唯一键支持删后同名重传',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_dof_name_suffix_seq (dataset_id, user_id, original_filename, file_suffix, deleted_seq),
INDEX idx_document_original_dataset_created (dataset_id, created_at),
INDEX idx_document_original_user_created (user_id, created_at),
INDEX idx_document_original_upload_status (upload_status, updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '知识库原始文档上传记录表';
-- 9. 文件解析表
CREATE TABLE IF NOT EXISTS document_parse_file (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '文件解析表主键',
document_original_file_id BIGINT UNSIGNED NOT NULL COMMENT '原文件主键,对应 document_original_file.id',
dataset_id BIGINT UNSIGNED NOT NULL COMMENT '所属数据集ID',
user_id BIGINT UNSIGNED NOT NULL COMMENT '所属用户ID',
latest_parse_task_id VARCHAR(36) DEFAULT NULL COMMENT 'Java最新触发解析任务业务ID,对应 document_parsed_log.task_id',
original_filename VARCHAR(255) NOT NULL COMMENT '原文件名快照',
parse_count INT NOT NULL DEFAULT 0 COMMENT '累计解析次数',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_parse_task_original_file (document_original_file_id),
INDEX idx_parse_task_dataset_user (dataset_id, user_id, updated_at),
INDEX idx_parse_task_latest_task (latest_parse_task_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '文件解析表';
-- 10. 文件解析产物快照表
-- 经 migration 0007 把 task_status / failure_reason 下沉到 document_parse_pipeline
-- 经 migration 0009 新增 retry_of_task_id 用于重试链路审计反查。
CREATE TABLE IF NOT EXISTS document_parsed_log (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '解析任务记录主键',
task_id VARCHAR(36) NOT NULL COMMENT '解析任务业务唯一标识(UUID)',
document_original_file_id BIGINT UNSIGNED NOT NULL COMMENT '原文件主键,对应 document_original_file.id',
document_parse_file_id BIGINT UNSIGNED DEFAULT NULL COMMENT '文件解析表主键,对应 document_parse_file.id',
trigger_mode VARCHAR(20) NOT NULL COMMENT '触发方式: upload_auto/manual_retry',
parsed_filename VARCHAR(255) DEFAULT NULL COMMENT '解析后文件名',
parsed_bucket_name VARCHAR(64) DEFAULT NULL COMMENT '解析结果文件桶名',
parsed_object_key VARCHAR(512) DEFAULT NULL COMMENT '解析结果文件对象Key',
parsed_file_url VARCHAR(1024) DEFAULT NULL COMMENT '解析结果文件内部定位地址',
parsed_at DATETIME DEFAULT NULL COMMENT '解析时间',
parse_started_at DATETIME DEFAULT NULL COMMENT 'Python开始解析时间',
parse_finished_at DATETIME DEFAULT NULL COMMENT 'Python结束解析时间',
parse_duration_ms BIGINT DEFAULT NULL COMMENT '解析耗时,单位毫秒',
retry_of_task_id VARCHAR(36) DEFAULT NULL COMMENT '重试链路上一个 task_id;首次解析为 NULL',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_parse_task_id (task_id),
INDEX idx_parsed_log_original_file (document_original_file_id, updated_at),
INDEX idx_parsed_log_parse_file (document_parse_file_id, updated_at),
INDEX idx_parsed_log_retry_of (retry_of_task_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=10000 COMMENT '文件解析产物快照表';
-- 11. 文件解析流程状态表
-- 经 migration 0002/0003 新增 pretokenize_status / pretokenize_duration_ms;
-- 0007 重命名表(post_process → parse pipeline),新增 cleaning_status /
-- cleaning_duration_ms(先前的"解析+上传"语义下沉为"文档清洗"阶段),
-- 删除 chunk_count / retry_count / last_retry_at / idx_post_pipeline_retry;
-- 0009 新增 sparse_vectorizing_* 与 superseded_by_task_id。
CREATE TABLE IF NOT EXISTS document_parse_pipeline (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '解析流程主键',
document_parsed_log_id BIGINT UNSIGNED NOT NULL COMMENT '解析日志主键,对应 document_parsed_log.id',
task_id VARCHAR(36) NOT NULL COMMENT '解析任务业务唯一标识,对应 document_parsed_log.task_id',
document_original_file_id BIGINT UNSIGNED NOT NULL COMMENT '原文件主键,对应 document_original_file.id',
document_parse_file_id BIGINT UNSIGNED DEFAULT NULL COMMENT '文件解析表主键,对应 document_parse_file.id',
pipeline_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '流程状态: PENDING/PROCESSING/SUCCESS/FAILED',
cleaning_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '文档清洗(解析+上传)阶段状态: PENDING/SUCCESS/FAILED',
chunking_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '分片状态: PENDING/SUCCESS/FAILED',
vectorizing_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '向量化状态: PENDING/SUCCESS/FAILED',
pretokenize_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '预分词状态: PENDING/SUCCESS/FAILED',
es_indexing_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'ES入库状态: PENDING/SUCCESS/FAILED',
sparse_vectorizing_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '稀疏向量阶段状态: PENDING/PROCESSING/SUCCESS/FAILED',
failed_stage VARCHAR(20) DEFAULT NULL COMMENT '失败阶段: CLEANING/CHUNKING/VECTORIZING/PRETOKENIZE/ES_INDEXING/SPARSE_VECTORIZING',
recover_from_stage VARCHAR(20) DEFAULT NULL COMMENT '下次恢复阶段: CLEANING/CHUNKING/VECTORIZING/PRETOKENIZE/ES_INDEXING/SPARSE_VECTORIZING',
failure_reason VARCHAR(512) DEFAULT NULL COMMENT '最近一次失败原因摘要',
cleaning_duration_ms BIGINT DEFAULT NULL COMMENT '文档清洗阶段耗时,单位毫秒',
chunking_duration_ms BIGINT DEFAULT NULL COMMENT '分片耗时,单位毫秒',
vectorizing_duration_ms BIGINT DEFAULT NULL COMMENT '向量化耗时,单位毫秒',
pretokenize_duration_ms BIGINT DEFAULT NULL COMMENT '预分词耗时,单位毫秒',
es_indexing_duration_ms BIGINT DEFAULT NULL COMMENT 'ES入库耗时,单位毫秒',
sparse_vectorizing_duration_ms BIGINT DEFAULT NULL COMMENT '稀疏向量阶段耗时,单位毫秒',
total_duration_ms BIGINT DEFAULT NULL COMMENT '流程总耗时,单位毫秒',
superseded_by_task_id VARCHAR(36) DEFAULT NULL COMMENT '被哪个新 task_id 接班(重试 CAS 第 2 层目标列)',
started_at DATETIME DEFAULT NULL COMMENT '流程开始时间',
finished_at DATETIME DEFAULT NULL COMMENT '流程结束时间',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_parse_pipeline_parsed_log (document_parsed_log_id),
KEY idx_parse_pipeline_task_id (task_id),
KEY idx_parse_pipeline_parse_file (document_parse_file_id, updated_at),
KEY idx_parse_pipeline_status (pipeline_status, updated_at),
KEY idx_parse_pipeline_superseded (superseded_by_task_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=10000 COMMENT '文件解析流程状态表';
-- 12. 文档 Chunk 真值记录表
-- 经 migration 0004 引入稀疏向量字段;0005 把 status/error_msg/retry_count/last_retry_at/embedding_model
-- 重命名为 dense_vector_*,并删除冗余的 vector_status / vector_error_msg 与对应索引;
-- 0006 删除 dense/sparse 的 retry_count/last_retry_at/error_msg 与 es_error_msg
-- (重试治理与失败原因归 document_post_process_pipeline);
-- 0008 收敛 dense/sparse 状态为 PENDING/SUCCESS/FAILED,删除 sparse_vector_nonzero_count,
-- 并按实际查询路径重构索引;
-- 0010 新增 lifecycle_status 与生命周期查询索引。
-- (重试治理与失败原因归 document_parse_pipeline)。
CREATE TABLE IF NOT EXISTS kb_document_chunk (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '物理主键ID',
chunk_id VARCHAR(128) NOT NULL COMMENT 'Chunk业务唯一键,对应Qdrant Point ID',
doc_id BIGINT UNSIGNED NOT NULL COMMENT '文档ID',
set_id BIGINT UNSIGNED NOT NULL COMMENT '知识集ID',
user_id BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
bucket_id INT DEFAULT NULL COMMENT '路由后的Qdrant物理桶编号',
content TEXT NOT NULL COMMENT 'splitter最终产出的可检索Chunk原文',
content_hash VARCHAR(64) NOT NULL COMMENT '基于最终Chunk内容计算的SHA-256哈希',
chunk_type VARCHAR(32) NOT NULL DEFAULT 'text' COMMENT '分片类型: paragraph/image/table/code_block/heading/mixed/text',
start_line INT DEFAULT NULL COMMENT 'Chunk在源文档中的起始行号',
end_line INT DEFAULT NULL COMMENT 'Chunk在源文档中的结束行号',
chunk_index INT DEFAULT NULL COMMENT '当前Chunk在文档内的顺序编号',
dense_vector_status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '稠密向量状态: PENDING/SUCCESS/FAILED',
dense_vector_model VARCHAR(128) DEFAULT NULL COMMENT '实际使用的稠密向量模型名称',
sparse_vector_status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '稀疏向量状态: PENDING/SUCCESS/FAILED',
sparse_vector_model VARCHAR(128) DEFAULT NULL COMMENT '实际使用的稀疏向量模型名称',
es_status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT 'ES索引状态: PENDING/SUCCESS/FAILED',
lifecycle_status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT 'Chunk业务生命周期状态: ACTIVE=业务有效,可参与解析/索引/检索; REMOVED=已从业务视图移除,不再参与解析/索引/检索,外部索引清理由异步任务处理',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
UNIQUE KEY uk_chunk_id (chunk_id),
KEY idx_user_set (user_id, set_id),
KEY idx_doc_dense_status (doc_id, dense_vector_status),
KEY idx_doc_sparse_status (doc_id, sparse_vector_status),
KEY idx_doc_es_status (doc_id, es_status),
KEY idx_doc_lifecycle_status (doc_id, lifecycle_status),
KEY idx_lifecycle_update_time (lifecycle_status, update_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=10000 COMMENT '文档Chunk真值记录表';
-- 自增起始值统一为 10000
ALTER TABLE sys_user AUTO_INCREMENT = 10000;
ALTER TABLE llm_system_provider AUTO_INCREMENT = 10000;
ALTER TABLE llm_user_config AUTO_INCREMENT = 10000;
ALTER TABLE dataset AUTO_INCREMENT = 10000;
ALTER TABLE chat_conversation AUTO_INCREMENT = 10000;
ALTER TABLE chat_message AUTO_INCREMENT = 10000;
ALTER TABLE llm_usage_log AUTO_INCREMENT = 10000;
ALTER TABLE document_original_file AUTO_INCREMENT = 10000;
ALTER TABLE document_parse_file AUTO_INCREMENT = 10000;
ALTER TABLE document_parsed_log AUTO_INCREMENT = 10000;
ALTER TABLE document_parse_pipeline AUTO_INCREMENT = 10000;
ALTER TABLE kb_document_chunk AUTO_INCREMENT = 10000;