feat: add workbench AI integration
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,230 @@
|
||||
-- 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);
|
||||
Reference in New Issue
Block a user