231 lines
9.2 KiB
SQL
231 lines
9.2 KiB
SQL
-- IM 工作台 AI 建表 SQL
|
|
-- Run on the shared meeting_im database.
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_capability_config (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
tenant_code VARCHAR(64) NOT NULL DEFAULT '',
|
|
feature VARCHAR(64) NOT NULL,
|
|
enabled TINYINT(1) NOT NULL DEFAULT 0,
|
|
model VARCHAR(64) NOT NULL DEFAULT 'deepseek-flash',
|
|
daily_limit INT NOT NULL DEFAULT 0,
|
|
concurrency_limit INT NOT NULL DEFAULT 1,
|
|
max_input_chars INT NOT NULL DEFAULT 0,
|
|
max_file_size_mb INT NOT NULL DEFAULT 0,
|
|
config_json JSON NULL,
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_tenant_feature (tenant_id, feature)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_task (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_id VARCHAR(64) NOT NULL,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
tenant_code VARCHAR(64) NOT NULL,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
feature VARCHAR(64) NOT NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
progress INT NOT NULL DEFAULT 0,
|
|
source_type VARCHAR(32) NOT NULL DEFAULT '',
|
|
source_ref_id VARCHAR(128) NOT NULL DEFAULT '',
|
|
input_hash VARCHAR(128) NOT NULL DEFAULT '',
|
|
input_snapshot JSON NULL,
|
|
prompt_version VARCHAR(64) NOT NULL DEFAULT '',
|
|
model VARCHAR(64) NOT NULL DEFAULT '',
|
|
result_ref_id VARCHAR(64) NOT NULL DEFAULT '',
|
|
result_json JSON NULL,
|
|
error_reason VARCHAR(64) NOT NULL DEFAULT '',
|
|
error_message VARCHAR(255) NOT NULL DEFAULT '',
|
|
retry_count INT NOT NULL DEFAULT 0,
|
|
started_at DATETIME(3) NULL,
|
|
finished_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_task_id (task_id),
|
|
KEY idx_user_feature_time (tenant_id, user_id, feature, created_at),
|
|
KEY idx_status_time (status, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_task_step (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
task_id VARCHAR(64) NOT NULL,
|
|
step VARCHAR(64) NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
progress INT NOT NULL DEFAULT 0,
|
|
error_reason VARCHAR(64) NOT NULL DEFAULT '',
|
|
started_at DATETIME(3) NULL,
|
|
finished_at DATETIME(3) NULL,
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_task_step (task_id, step)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_record (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
record_id VARCHAR(64) NOT NULL,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
tenant_code VARCHAR(64) NOT NULL,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
record_type VARCHAR(64) NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
summary VARCHAR(512) NOT NULL DEFAULT '',
|
|
status VARCHAR(32) NOT NULL,
|
|
detail_id VARCHAR(64) NOT NULL DEFAULT '',
|
|
task_id VARCHAR(64) NOT NULL DEFAULT '',
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
deleted_at DATETIME(3) NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_record_id (record_id),
|
|
KEY idx_user_type_time (tenant_id, user_id, record_type, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_document (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
record_id VARCHAR(64) NOT NULL,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
document_type VARCHAR(64) NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
content_markdown MEDIUMTEXT NOT NULL,
|
|
content_plain MEDIUMTEXT NULL,
|
|
sections_json JSON NULL,
|
|
source_excerpt VARCHAR(1024) NOT NULL DEFAULT '',
|
|
prompt_version VARCHAR(64) NOT NULL DEFAULT '',
|
|
model VARCHAR(64) NOT NULL DEFAULT '',
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_record_id (record_id),
|
|
KEY idx_tenant_user_time (tenant_id, user_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_table_analysis (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
record_id VARCHAR(64) NOT NULL,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
file_id VARCHAR(128) NOT NULL,
|
|
file_name VARCHAR(255) NOT NULL,
|
|
file_type VARCHAR(16) NOT NULL,
|
|
file_size BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
topic VARCHAR(128) NOT NULL,
|
|
metrics_json JSON NULL,
|
|
preview_json JSON NULL,
|
|
alerts_json JSON NULL,
|
|
interpretation MEDIUMTEXT NULL,
|
|
export_file_id VARCHAR(128) NOT NULL DEFAULT '',
|
|
prompt_version VARCHAR(64) NOT NULL DEFAULT '',
|
|
model VARCHAR(64) NOT NULL DEFAULT '',
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_record_id (record_id),
|
|
KEY idx_file_id (tenant_id, file_id),
|
|
KEY idx_tenant_user_time (tenant_id, user_id, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_meeting_summary (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
summary_id VARCHAR(64) NOT NULL,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
tenant_code VARCHAR(64) NOT NULL,
|
|
meeting_id VARCHAR(128) NOT NULL,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
task_id VARCHAR(64) NOT NULL DEFAULT '',
|
|
conclusions_json JSON NULL,
|
|
decisions_json JSON NULL,
|
|
action_items_json JSON NULL,
|
|
source_file_ids_json JSON NULL,
|
|
prompt_version VARCHAR(64) NOT NULL DEFAULT '',
|
|
model VARCHAR(64) NOT NULL DEFAULT '',
|
|
edited_by VARCHAR(64) NOT NULL DEFAULT '',
|
|
edited_at DATETIME(3) NULL,
|
|
version INT NOT NULL DEFAULT 1,
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_summary_id (summary_id),
|
|
UNIQUE KEY uk_tenant_meeting (tenant_id, meeting_id),
|
|
KEY idx_user_time (tenant_id, user_id, updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_usage_log (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
tenant_code VARCHAR(64) NOT NULL,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
feature VARCHAR(64) NOT NULL,
|
|
task_id VARCHAR(64) NOT NULL DEFAULT '',
|
|
provider VARCHAR(32) NOT NULL,
|
|
model VARCHAR(64) NOT NULL,
|
|
provider_request_id VARCHAR(128) NOT NULL DEFAULT '',
|
|
prompt_tokens INT NOT NULL DEFAULT 0,
|
|
completion_tokens INT NOT NULL DEFAULT 0,
|
|
total_tokens INT NOT NULL DEFAULT 0,
|
|
latency_ms INT NOT NULL DEFAULT 0,
|
|
status VARCHAR(32) NOT NULL,
|
|
error_reason VARCHAR(64) NOT NULL DEFAULT '',
|
|
input_hash VARCHAR(128) NOT NULL DEFAULT '',
|
|
output_hash VARCHAR(128) NOT NULL DEFAULT '',
|
|
created_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
KEY idx_user_feature_day (tenant_id, user_id, feature, created_at),
|
|
KEY idx_provider_time (provider, model, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_idempotency_record (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
|
user_id VARCHAR(64) NOT NULL,
|
|
idempotency_key VARCHAR(128) NOT NULL,
|
|
request_hash VARCHAR(128) NOT NULL,
|
|
response_code INT NOT NULL DEFAULT 0,
|
|
response_body JSON NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_idempotency (tenant_id, user_id, idempotency_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS wb_ai_prompt_template (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
template_key VARCHAR(64) NOT NULL,
|
|
version VARCHAR(64) NOT NULL,
|
|
provider VARCHAR(32) NOT NULL DEFAULT 'deepseek',
|
|
model VARCHAR(64) NOT NULL DEFAULT 'deepseek-flash',
|
|
system_prompt MEDIUMTEXT NOT NULL,
|
|
user_prompt_template MEDIUMTEXT NOT NULL,
|
|
response_schema JSON NULL,
|
|
enabled TINYINT(1) NOT NULL DEFAULT 1,
|
|
created_at DATETIME(3) NOT NULL,
|
|
updated_at DATETIME(3) NOT NULL,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_template_version (template_key, version),
|
|
KEY idx_template_enabled (template_key, enabled)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
|
|
|
INSERT INTO wb_ai_capability_config
|
|
(tenant_id, tenant_code, feature, enabled, model, daily_limit, concurrency_limit, max_input_chars, max_file_size_mb, config_json, created_at, updated_at)
|
|
VALUES
|
|
(0, '', 'smart_document', 0, 'deepseek-flash', 20, 1, 1000, 0, JSON_OBJECT('entry_title', '智能文档'), NOW(3), NOW(3)),
|
|
(0, '', 'smart_table', 0, 'deepseek-v4-pro', 10, 1, 100, 20, JSON_OBJECT('entry_title', '智能表格', 'allowed_file_types', JSON_ARRAY('xlsx', 'xls', 'csv')), NOW(3), NOW(3)),
|
|
(0, '', 'text_polish', 0, 'deepseek-flash', 50, 3, 300, 0, JSON_OBJECT('entry_title', 'AI美文'), NOW(3), NOW(3)),
|
|
(0, '', 'daily_report_polish', 0, 'deepseek-flash', 50, 3, 300, 0, JSON_OBJECT('entry_title', 'AI美文'), NOW(3), NOW(3)),
|
|
(0, '', 'monthly_report_polish', 0, 'deepseek-flash', 30, 3, 1000, 0, JSON_OBJECT('entry_title', 'AI美文'), NOW(3), NOW(3)),
|
|
(0, '', 'meeting_summary', 0, 'deepseek-v4-pro', 10, 1, 0, 0, JSON_OBJECT('entry_title', 'AI总结'), NOW(3), NOW(3))
|
|
ON DUPLICATE KEY UPDATE
|
|
model = VALUES(model),
|
|
daily_limit = VALUES(daily_limit),
|
|
concurrency_limit = VALUES(concurrency_limit),
|
|
max_input_chars = VALUES(max_input_chars),
|
|
max_file_size_mb = VALUES(max_file_size_mb),
|
|
config_json = VALUES(config_json),
|
|
updated_at = NOW(3);
|