docs(database): 规范脚本顺序并补全字段注释

This commit is contained in:
2026-06-01 02:10:34 +08:00
parent d92496854d
commit 6fe1209801
70 changed files with 695 additions and 178 deletions

View File

@@ -20,8 +20,15 @@ CREATE INDEX IF NOT EXISTS idx_studio_project_environment ON studio_project (env
CREATE INDEX IF NOT EXISTS idx_studio_project_publish_status ON studio_project (publish_status);
COMMENT ON TABLE studio_project IS 'Studio项目空间表';
COMMENT ON COLUMN studio_project.id IS 'ID';
COMMENT ON COLUMN studio_project.project_code IS '项目编码';
COMMENT ON COLUMN studio_project.project_name IS '项目名称';
COMMENT ON COLUMN studio_project.environment IS '环境';
COMMENT ON COLUMN studio_project.publish_status IS '发布状态';
COMMENT ON COLUMN studio_project.current_version IS '当前发布版本';
COMMENT ON COLUMN studio_project.version IS '版本';
COMMENT ON COLUMN studio_project.create_time IS '创建时间';
COMMENT ON COLUMN studio_project.update_time IS '更新时间';
COMMENT ON COLUMN studio_project.remark IS '备注';
COMMENT ON COLUMN studio_project.create_by IS '创建者';
COMMENT ON COLUMN studio_project.update_by IS '更新者';

View File

@@ -89,6 +89,65 @@ CREATE INDEX IF NOT EXISTS idx_workflow_run_status ON workflow_run (status);
CREATE INDEX IF NOT EXISTS idx_workflow_run_step_run_id ON workflow_run_step (run_id);
COMMENT ON TABLE workflow_definition IS 'Workflow定义表';
COMMENT ON COLUMN workflow_definition.id IS 'ID';
COMMENT ON COLUMN workflow_definition.project_id IS '所属项目ID';
COMMENT ON COLUMN workflow_definition.workflow_code IS 'Workflow编码';
COMMENT ON COLUMN workflow_definition.workflow_name IS 'Workflow名称';
COMMENT ON COLUMN workflow_definition.description IS 'Workflow描述';
COMMENT ON COLUMN workflow_definition.bound_agent_id IS '绑定Agent ID';
COMMENT ON COLUMN workflow_definition.status IS '状态';
COMMENT ON COLUMN workflow_definition.version IS '版本';
COMMENT ON COLUMN workflow_definition.create_time IS '创建时间';
COMMENT ON COLUMN workflow_definition.update_time IS '更新时间';
COMMENT ON COLUMN workflow_definition.remark IS '备注';
COMMENT ON COLUMN workflow_definition.create_by IS '创建者';
COMMENT ON COLUMN workflow_definition.update_by IS '更新者';
COMMENT ON TABLE workflow_version IS 'Workflow版本快照表';
COMMENT ON COLUMN workflow_version.id IS 'ID';
COMMENT ON COLUMN workflow_version.workflow_id IS 'Workflow定义ID';
COMMENT ON COLUMN workflow_version.version_no IS '版本号';
COMMENT ON COLUMN workflow_version.snapshot_name IS '快照名称';
COMMENT ON COLUMN workflow_version.graph_json IS '编排图JSON';
COMMENT ON COLUMN workflow_version.publish_status IS '发布状态';
COMMENT ON COLUMN workflow_version.published_time IS '发布时间';
COMMENT ON COLUMN workflow_version.version IS '版本';
COMMENT ON COLUMN workflow_version.create_time IS '创建时间';
COMMENT ON COLUMN workflow_version.update_time IS '更新时间';
COMMENT ON COLUMN workflow_version.remark IS '备注';
COMMENT ON COLUMN workflow_version.create_by IS '创建者';
COMMENT ON COLUMN workflow_version.update_by IS '更新者';
COMMENT ON TABLE workflow_run IS 'Workflow运行记录表';
COMMENT ON COLUMN workflow_run.id IS 'ID';
COMMENT ON COLUMN workflow_run.request_id IS '请求唯一ID';
COMMENT ON COLUMN workflow_run.workflow_id IS 'Workflow定义ID';
COMMENT ON COLUMN workflow_run.workflow_version_id IS 'Workflow版本ID';
COMMENT ON COLUMN workflow_run.agent_id IS '执行Agent ID';
COMMENT ON COLUMN workflow_run.run_source IS '运行来源';
COMMENT ON COLUMN workflow_run.status IS '运行状态';
COMMENT ON COLUMN workflow_run.input_json IS '输入参数JSON';
COMMENT ON COLUMN workflow_run.output_json IS '输出结果JSON';
COMMENT ON COLUMN workflow_run.duration_ms IS '耗时(毫秒)';
COMMENT ON COLUMN workflow_run.estimated_cost IS '预估成本';
COMMENT ON COLUMN workflow_run.version IS '版本';
COMMENT ON COLUMN workflow_run.create_time IS '创建时间';
COMMENT ON COLUMN workflow_run.update_time IS '更新时间';
COMMENT ON COLUMN workflow_run.remark IS '备注';
COMMENT ON COLUMN workflow_run.create_by IS '创建者';
COMMENT ON COLUMN workflow_run.update_by IS '更新者';
COMMENT ON TABLE workflow_run_step IS 'Workflow运行步骤表';
COMMENT ON COLUMN workflow_run_step.id IS 'ID';
COMMENT ON COLUMN workflow_run_step.run_id IS '运行记录ID';
COMMENT ON COLUMN workflow_run_step.node_id IS '节点ID';
COMMENT ON COLUMN workflow_run_step.node_type IS '节点类型';
COMMENT ON COLUMN workflow_run_step.node_name IS '节点名称';
COMMENT ON COLUMN workflow_run_step.status IS '步骤状态';
COMMENT ON COLUMN workflow_run_step.input_json IS '步骤输入JSON';
COMMENT ON COLUMN workflow_run_step.output_json IS '步骤输出JSON';
COMMENT ON COLUMN workflow_run_step.duration_ms IS '耗时(毫秒)';
COMMENT ON COLUMN workflow_run_step.error_message IS '错误信息';
COMMENT ON COLUMN workflow_run_step.version IS '版本';
COMMENT ON COLUMN workflow_run_step.create_time IS '创建时间';
COMMENT ON COLUMN workflow_run_step.update_time IS '更新时间';
COMMENT ON COLUMN workflow_run_step.remark IS '备注';
COMMENT ON COLUMN workflow_run_step.create_by IS '创建者';
COMMENT ON COLUMN workflow_run_step.update_by IS '更新者';

View File

@@ -41,4 +41,29 @@ CREATE INDEX IF NOT EXISTS idx_agent_message_session_id ON agent_message (sessio
CREATE INDEX IF NOT EXISTS idx_agent_message_role ON agent_message (role);
COMMENT ON TABLE agent_session IS 'Agent会话表';
COMMENT ON COLUMN agent_session.id IS 'ID';
COMMENT ON COLUMN agent_session.session_code IS '会话编码';
COMMENT ON COLUMN agent_session.agent_id IS 'Agent ID';
COMMENT ON COLUMN agent_session.workflow_run_id IS '来源Workflow运行ID';
COMMENT ON COLUMN agent_session.title IS '会话标题';
COMMENT ON COLUMN agent_session.status IS '会话状态';
COMMENT ON COLUMN agent_session.metadata_json IS '会话元数据JSON';
COMMENT ON COLUMN agent_session.version IS '版本';
COMMENT ON COLUMN agent_session.create_time IS '创建时间';
COMMENT ON COLUMN agent_session.update_time IS '更新时间';
COMMENT ON COLUMN agent_session.remark IS '备注';
COMMENT ON COLUMN agent_session.create_by IS '创建者';
COMMENT ON COLUMN agent_session.update_by IS '更新者';
COMMENT ON TABLE agent_message IS 'Agent消息表';
COMMENT ON COLUMN agent_message.id IS 'ID';
COMMENT ON COLUMN agent_message.session_id IS '会话ID';
COMMENT ON COLUMN agent_message.role IS '消息角色';
COMMENT ON COLUMN agent_message.content IS '消息内容';
COMMENT ON COLUMN agent_message.citation_json IS '引用信息JSON';
COMMENT ON COLUMN agent_message.token_count IS 'Token数量';
COMMENT ON COLUMN agent_message.version IS '版本';
COMMENT ON COLUMN agent_message.create_time IS '创建时间';
COMMENT ON COLUMN agent_message.update_time IS '更新时间';
COMMENT ON COLUMN agent_message.remark IS '备注';
COMMENT ON COLUMN agent_message.create_by IS '创建者';
COMMENT ON COLUMN agent_message.update_by IS '更新者';

View File

@@ -45,4 +45,34 @@ CREATE INDEX IF NOT EXISTS idx_mcp_capability_server_id ON mcp_capability (serve
CREATE INDEX IF NOT EXISTS idx_mcp_capability_type ON mcp_capability (capability_type);
COMMENT ON TABLE mcp_server IS 'MCP服务表';
COMMENT ON COLUMN mcp_server.id IS 'ID';
COMMENT ON COLUMN mcp_server.server_code IS '服务编码';
COMMENT ON COLUMN mcp_server.server_name IS '服务名称';
COMMENT ON COLUMN mcp_server.import_type IS '导入方式';
COMMENT ON COLUMN mcp_server.endpoint_url IS '服务端点地址';
COMMENT ON COLUMN mcp_server.package_name IS '安装包名称';
COMMENT ON COLUMN mcp_server.manifest_json IS 'Manifest声明JSON';
COMMENT ON COLUMN mcp_server.auth_type IS '鉴权类型';
COMMENT ON COLUMN mcp_server.secret_ref IS '密钥引用';
COMMENT ON COLUMN mcp_server.health_status IS '健康状态';
COMMENT ON COLUMN mcp_server.enabled IS '是否启用';
COMMENT ON COLUMN mcp_server.version IS '版本';
COMMENT ON COLUMN mcp_server.create_time IS '创建时间';
COMMENT ON COLUMN mcp_server.update_time IS '更新时间';
COMMENT ON COLUMN mcp_server.remark IS '备注';
COMMENT ON COLUMN mcp_server.create_by IS '创建者';
COMMENT ON COLUMN mcp_server.update_by IS '更新者';
COMMENT ON TABLE mcp_capability IS 'MCP能力表';
COMMENT ON COLUMN mcp_capability.id IS 'ID';
COMMENT ON COLUMN mcp_capability.server_id IS '所属服务ID';
COMMENT ON COLUMN mcp_capability.capability_code IS '能力编码';
COMMENT ON COLUMN mcp_capability.capability_name IS '能力名称';
COMMENT ON COLUMN mcp_capability.capability_type IS '能力类型';
COMMENT ON COLUMN mcp_capability.schema_json IS '能力Schema JSON';
COMMENT ON COLUMN mcp_capability.enabled IS '是否启用';
COMMENT ON COLUMN mcp_capability.version IS '版本';
COMMENT ON COLUMN mcp_capability.create_time IS '创建时间';
COMMENT ON COLUMN mcp_capability.update_time IS '更新时间';
COMMENT ON COLUMN mcp_capability.remark IS '备注';
COMMENT ON COLUMN mcp_capability.create_by IS '创建者';
COMMENT ON COLUMN mcp_capability.update_by IS '更新者';

View File

@@ -43,4 +43,32 @@ CREATE INDEX IF NOT EXISTS idx_skill_version_skill_id ON skill_version (skill_id
CREATE INDEX IF NOT EXISTS idx_skill_version_publish_status ON skill_version (publish_status);
COMMENT ON TABLE skill_definition IS 'Skill定义表';
COMMENT ON COLUMN skill_definition.id IS 'ID';
COMMENT ON COLUMN skill_definition.skill_code IS 'Skill编码';
COMMENT ON COLUMN skill_definition.skill_name IS 'Skill名称';
COMMENT ON COLUMN skill_definition.skill_type IS 'Skill类型';
COMMENT ON COLUMN skill_definition.description IS 'Skill描述';
COMMENT ON COLUMN skill_definition.status IS '状态';
COMMENT ON COLUMN skill_definition.version IS '版本';
COMMENT ON COLUMN skill_definition.create_time IS '创建时间';
COMMENT ON COLUMN skill_definition.update_time IS '更新时间';
COMMENT ON COLUMN skill_definition.remark IS '备注';
COMMENT ON COLUMN skill_definition.create_by IS '创建者';
COMMENT ON COLUMN skill_definition.update_by IS '更新者';
COMMENT ON TABLE skill_version IS 'Skill版本表';
COMMENT ON COLUMN skill_version.id IS 'ID';
COMMENT ON COLUMN skill_version.skill_id IS 'Skill定义ID';
COMMENT ON COLUMN skill_version.version_no IS '版本号';
COMMENT ON COLUMN skill_version.prompt_text IS '提示词内容';
COMMENT ON COLUMN skill_version.code_text IS '代码内容';
COMMENT ON COLUMN skill_version.config_json IS '运行配置JSON';
COMMENT ON COLUMN skill_version.variable_schema_json IS '变量Schema JSON';
COMMENT ON COLUMN skill_version.test_result_json IS '测试结果JSON';
COMMENT ON COLUMN skill_version.publish_status IS '发布状态';
COMMENT ON COLUMN skill_version.published_time IS '发布时间';
COMMENT ON COLUMN skill_version.version IS '版本';
COMMENT ON COLUMN skill_version.create_time IS '创建时间';
COMMENT ON COLUMN skill_version.update_time IS '更新时间';
COMMENT ON COLUMN skill_version.remark IS '备注';
COMMENT ON COLUMN skill_version.create_by IS '创建者';
COMMENT ON COLUMN skill_version.update_by IS '更新者';

View File

@@ -21,3 +21,16 @@ CREATE INDEX IF NOT EXISTS idx_agent_capability_owner ON agent_capability_bindin
CREATE INDEX IF NOT EXISTS idx_agent_capability_type ON agent_capability_binding (capability_type, capability_id);
COMMENT ON TABLE agent_capability_binding IS 'Agent能力绑定表';
COMMENT ON COLUMN agent_capability_binding.id IS 'ID';
COMMENT ON COLUMN agent_capability_binding.owner_type IS '绑定主体类型';
COMMENT ON COLUMN agent_capability_binding.owner_id IS '绑定主体ID';
COMMENT ON COLUMN agent_capability_binding.capability_type IS '能力类型';
COMMENT ON COLUMN agent_capability_binding.capability_id IS '能力ID';
COMMENT ON COLUMN agent_capability_binding.enabled IS '是否启用';
COMMENT ON COLUMN agent_capability_binding.config_json IS '绑定配置JSON';
COMMENT ON COLUMN agent_capability_binding.version IS '版本';
COMMENT ON COLUMN agent_capability_binding.create_time IS '创建时间';
COMMENT ON COLUMN agent_capability_binding.update_time IS '更新时间';
COMMENT ON COLUMN agent_capability_binding.remark IS '备注';
COMMENT ON COLUMN agent_capability_binding.create_by IS '创建者';
COMMENT ON COLUMN agent_capability_binding.update_by IS '更新者';

View File

@@ -0,0 +1,239 @@
-- 模型平台核心表。
-- 与 docs/MODEL_PROVIDER_SCHEMA.sql 保持一致,作为后续落库执行入口。
CREATE TABLE IF NOT EXISTS model_provider (
id BIGSERIAL PRIMARY KEY,
provider_code VARCHAR(64) NOT NULL,
provider_name VARCHAR(100) NOT NULL,
provider_type VARCHAR(50) NOT NULL,
protocol_type VARCHAR(50) NOT NULL DEFAULT 'OPENAI_COMPATIBLE',
base_url VARCHAR(500) NOT NULL,
auth_type VARCHAR(50) NOT NULL DEFAULT 'BEARER_TOKEN',
secret_ref VARCHAR(200),
api_key_cipher TEXT,
timeout_ms INTEGER NOT NULL DEFAULT 60000,
priority INTEGER NOT NULL DEFAULT 100,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
health_status VARCHAR(50) NOT NULL DEFAULT 'UNKNOWN',
last_health_check_time TIMESTAMP,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_provider_code UNIQUE (provider_code)
);
CREATE TABLE IF NOT EXISTS model_config (
id BIGSERIAL PRIMARY KEY,
provider_id BIGINT NOT NULL,
model_code VARCHAR(100) NOT NULL,
model_name VARCHAR(200) NOT NULL,
upstream_model VARCHAR(200) NOT NULL,
model_type VARCHAR(50) NOT NULL,
context_window INTEGER,
max_output_tokens INTEGER,
embedding_dimension INTEGER,
input_price_per_1k NUMERIC(12, 8),
output_price_per_1k NUMERIC(12, 8),
local_model BOOLEAN NOT NULL DEFAULT FALSE,
default_model BOOLEAN NOT NULL DEFAULT FALSE,
capabilities_json JSONB NOT NULL DEFAULT '{}'::jsonb,
options_json JSONB NOT NULL DEFAULT '{}'::jsonb,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_config_provider_code UNIQUE (provider_id, model_code),
CONSTRAINT fk_model_config_provider_id FOREIGN KEY (provider_id) REFERENCES model_provider (id)
);
CREATE TABLE IF NOT EXISTS model_route_rule (
id BIGSERIAL PRIMARY KEY,
route_code VARCHAR(100) NOT NULL,
route_name VARCHAR(100) NOT NULL,
task_type VARCHAR(50) NOT NULL,
match_scope VARCHAR(50) NOT NULL DEFAULT 'GLOBAL',
scope_id BIGINT,
primary_model_id BIGINT NOT NULL,
fallback_model_ids_json JSONB NOT NULL DEFAULT '[]'::jsonb,
route_strategy VARCHAR(50) NOT NULL DEFAULT 'MANUAL',
max_latency_ms INTEGER,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_route_rule_code UNIQUE (route_code),
CONSTRAINT fk_model_route_primary_model_id FOREIGN KEY (primary_model_id) REFERENCES model_config (id)
);
CREATE TABLE IF NOT EXISTS rag_store_model_config (
id BIGSERIAL PRIMARY KEY,
store_id BIGINT NOT NULL,
embedding_model_id BIGINT NOT NULL,
embedding_dimension INTEGER NOT NULL DEFAULT 1024,
chunk_strategy INTEGER,
chunk_size INTEGER,
chunk_overlap INTEGER,
delimiter VARCHAR(50),
active BOOLEAN NOT NULL DEFAULT TRUE,
index_version INTEGER NOT NULL DEFAULT 1,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_rag_store_model_config_store_active UNIQUE (store_id, active),
CONSTRAINT fk_rag_store_model_config_store_id FOREIGN KEY (store_id) REFERENCES rag_store (id),
CONSTRAINT fk_rag_store_model_config_embedding_model_id FOREIGN KEY (embedding_model_id) REFERENCES model_config (id)
);
CREATE TABLE IF NOT EXISTS model_call_log (
id BIGSERIAL PRIMARY KEY,
request_id VARCHAR(64) NOT NULL,
provider_id BIGINT,
model_id BIGINT,
task_type VARCHAR(50) NOT NULL,
biz_type VARCHAR(50),
biz_id VARCHAR(100),
call_type VARCHAR(50) NOT NULL,
status VARCHAR(50) NOT NULL,
prompt_tokens INTEGER,
completion_tokens INTEGER,
total_tokens INTEGER,
estimated_cost NUMERIC(14, 8),
duration_ms INTEGER,
request_hash VARCHAR(64),
error_code VARCHAR(100),
error_message VARCHAR(1000),
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_call_log_request_id UNIQUE (request_id)
);
CREATE INDEX IF NOT EXISTS idx_model_config_provider_id ON model_config (provider_id);
CREATE INDEX IF NOT EXISTS idx_model_config_model_type ON model_config (model_type);
CREATE INDEX IF NOT EXISTS idx_model_route_task_scope ON model_route_rule (task_type, match_scope, scope_id);
CREATE INDEX IF NOT EXISTS idx_rag_store_model_config_store_id ON rag_store_model_config (store_id);
CREATE INDEX IF NOT EXISTS idx_model_call_log_request_id ON model_call_log (request_id);
CREATE INDEX IF NOT EXISTS idx_model_call_log_task_type ON model_call_log (task_type);
COMMENT ON TABLE model_provider IS '模型服务商配置表';
COMMENT ON COLUMN model_provider.id IS 'ID';
COMMENT ON COLUMN model_provider.provider_code IS '服务商编码';
COMMENT ON COLUMN model_provider.provider_name IS '服务商名称';
COMMENT ON COLUMN model_provider.provider_type IS '服务商类型';
COMMENT ON COLUMN model_provider.protocol_type IS '协议类型';
COMMENT ON COLUMN model_provider.base_url IS '服务基础地址';
COMMENT ON COLUMN model_provider.auth_type IS '鉴权类型';
COMMENT ON COLUMN model_provider.secret_ref IS '密钥环境变量引用';
COMMENT ON COLUMN model_provider.api_key_cipher IS '密钥密文';
COMMENT ON COLUMN model_provider.timeout_ms IS '超时时间(毫秒)';
COMMENT ON COLUMN model_provider.priority IS '优先级';
COMMENT ON COLUMN model_provider.enabled IS '是否启用';
COMMENT ON COLUMN model_provider.health_status IS '健康状态';
COMMENT ON COLUMN model_provider.last_health_check_time IS '最近健康检查时间';
COMMENT ON COLUMN model_provider.version IS '版本';
COMMENT ON COLUMN model_provider.create_time IS '创建时间';
COMMENT ON COLUMN model_provider.update_time IS '更新时间';
COMMENT ON COLUMN model_provider.remark IS '备注';
COMMENT ON COLUMN model_provider.create_by IS '创建者';
COMMENT ON COLUMN model_provider.update_by IS '更新者';
COMMENT ON TABLE model_config IS '模型配置表';
COMMENT ON COLUMN model_config.id IS 'ID';
COMMENT ON COLUMN model_config.provider_id IS '服务商ID';
COMMENT ON COLUMN model_config.model_code IS '模型编码';
COMMENT ON COLUMN model_config.model_name IS '模型名称';
COMMENT ON COLUMN model_config.upstream_model IS '上游模型名称';
COMMENT ON COLUMN model_config.model_type IS '模型类型';
COMMENT ON COLUMN model_config.context_window IS '上下文窗口大小';
COMMENT ON COLUMN model_config.max_output_tokens IS '最大输出Token数';
COMMENT ON COLUMN model_config.embedding_dimension IS '向量维度';
COMMENT ON COLUMN model_config.input_price_per_1k IS '输入千Token单价';
COMMENT ON COLUMN model_config.output_price_per_1k IS '输出千Token单价';
COMMENT ON COLUMN model_config.local_model IS '是否本地模型';
COMMENT ON COLUMN model_config.default_model IS '是否默认模型';
COMMENT ON COLUMN model_config.capabilities_json IS '能力配置JSON';
COMMENT ON COLUMN model_config.options_json IS '扩展选项JSON';
COMMENT ON COLUMN model_config.enabled IS '是否启用';
COMMENT ON COLUMN model_config.version IS '版本';
COMMENT ON COLUMN model_config.create_time IS '创建时间';
COMMENT ON COLUMN model_config.update_time IS '更新时间';
COMMENT ON COLUMN model_config.remark IS '备注';
COMMENT ON COLUMN model_config.create_by IS '创建者';
COMMENT ON COLUMN model_config.update_by IS '更新者';
COMMENT ON TABLE model_route_rule IS '模型路由规则表';
COMMENT ON COLUMN model_route_rule.id IS 'ID';
COMMENT ON COLUMN model_route_rule.route_code IS '路由规则编码';
COMMENT ON COLUMN model_route_rule.route_name IS '路由规则名称';
COMMENT ON COLUMN model_route_rule.task_type IS '任务类型';
COMMENT ON COLUMN model_route_rule.match_scope IS '匹配范围';
COMMENT ON COLUMN model_route_rule.scope_id IS '匹配范围业务ID';
COMMENT ON COLUMN model_route_rule.primary_model_id IS '主模型ID';
COMMENT ON COLUMN model_route_rule.fallback_model_ids_json IS '降级模型ID列表JSON';
COMMENT ON COLUMN model_route_rule.route_strategy IS '路由策略';
COMMENT ON COLUMN model_route_rule.max_latency_ms IS '最大延迟限制(毫秒)';
COMMENT ON COLUMN model_route_rule.enabled IS '是否启用';
COMMENT ON COLUMN model_route_rule.version IS '版本';
COMMENT ON COLUMN model_route_rule.create_time IS '创建时间';
COMMENT ON COLUMN model_route_rule.update_time IS '更新时间';
COMMENT ON COLUMN model_route_rule.remark IS '备注';
COMMENT ON COLUMN model_route_rule.create_by IS '创建者';
COMMENT ON COLUMN model_route_rule.update_by IS '更新者';
COMMENT ON TABLE rag_store_model_config IS '知识库模型配置表';
COMMENT ON COLUMN rag_store_model_config.id IS 'ID';
COMMENT ON COLUMN rag_store_model_config.store_id IS '知识库ID';
COMMENT ON COLUMN rag_store_model_config.embedding_model_id IS 'Embedding模型ID';
COMMENT ON COLUMN rag_store_model_config.embedding_dimension IS '向量维度';
COMMENT ON COLUMN rag_store_model_config.chunk_strategy IS '切片策略';
COMMENT ON COLUMN rag_store_model_config.chunk_size IS '切片大小';
COMMENT ON COLUMN rag_store_model_config.chunk_overlap IS '切片重叠大小';
COMMENT ON COLUMN rag_store_model_config.delimiter IS '切片分隔符';
COMMENT ON COLUMN rag_store_model_config.active IS '是否生效';
COMMENT ON COLUMN rag_store_model_config.index_version IS '索引版本号';
COMMENT ON COLUMN rag_store_model_config.version IS '版本';
COMMENT ON COLUMN rag_store_model_config.create_time IS '创建时间';
COMMENT ON COLUMN rag_store_model_config.update_time IS '更新时间';
COMMENT ON COLUMN rag_store_model_config.remark IS '备注';
COMMENT ON COLUMN rag_store_model_config.create_by IS '创建者';
COMMENT ON COLUMN rag_store_model_config.update_by IS '更新者';
COMMENT ON TABLE model_call_log IS '模型调用日志表';
COMMENT ON COLUMN model_call_log.id IS 'ID';
COMMENT ON COLUMN model_call_log.request_id IS '请求唯一ID';
COMMENT ON COLUMN model_call_log.provider_id IS '服务商ID';
COMMENT ON COLUMN model_call_log.model_id IS '模型ID';
COMMENT ON COLUMN model_call_log.task_type IS '任务类型';
COMMENT ON COLUMN model_call_log.biz_type IS '业务类型';
COMMENT ON COLUMN model_call_log.biz_id IS '业务ID';
COMMENT ON COLUMN model_call_log.call_type IS '调用类型';
COMMENT ON COLUMN model_call_log.status IS '调用状态';
COMMENT ON COLUMN model_call_log.prompt_tokens IS '输入Token数';
COMMENT ON COLUMN model_call_log.completion_tokens IS '输出Token数';
COMMENT ON COLUMN model_call_log.total_tokens IS '总Token数';
COMMENT ON COLUMN model_call_log.estimated_cost IS '预估成本';
COMMENT ON COLUMN model_call_log.duration_ms IS '耗时(毫秒)';
COMMENT ON COLUMN model_call_log.request_hash IS '请求哈希';
COMMENT ON COLUMN model_call_log.error_code IS '错误码';
COMMENT ON COLUMN model_call_log.error_message IS '错误信息摘要';
COMMENT ON COLUMN model_call_log.version IS '版本';
COMMENT ON COLUMN model_call_log.create_time IS '创建时间';
COMMENT ON COLUMN model_call_log.update_time IS '更新时间';
COMMENT ON COLUMN model_call_log.remark IS '备注';
COMMENT ON COLUMN model_call_log.create_by IS '创建者';
COMMENT ON COLUMN model_call_log.update_by IS '更新者';

View File

@@ -1,131 +0,0 @@
-- 模型平台核心表。
-- 与 docs/MODEL_PROVIDER_SCHEMA.sql 保持一致,作为后续落库执行入口。
CREATE TABLE IF NOT EXISTS model_provider (
id BIGSERIAL PRIMARY KEY,
provider_code VARCHAR(64) NOT NULL,
provider_name VARCHAR(100) NOT NULL,
provider_type VARCHAR(50) NOT NULL,
protocol_type VARCHAR(50) NOT NULL DEFAULT 'OPENAI_COMPATIBLE',
base_url VARCHAR(500) NOT NULL,
auth_type VARCHAR(50) NOT NULL DEFAULT 'BEARER_TOKEN',
secret_ref VARCHAR(200),
api_key_cipher TEXT,
timeout_ms INTEGER NOT NULL DEFAULT 60000,
priority INTEGER NOT NULL DEFAULT 100,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
health_status VARCHAR(50) NOT NULL DEFAULT 'UNKNOWN',
last_health_check_time TIMESTAMP,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_provider_code UNIQUE (provider_code)
);
CREATE TABLE IF NOT EXISTS model_config (
id BIGSERIAL PRIMARY KEY,
provider_id BIGINT NOT NULL,
model_code VARCHAR(100) NOT NULL,
model_name VARCHAR(200) NOT NULL,
upstream_model VARCHAR(200) NOT NULL,
model_type VARCHAR(50) NOT NULL,
context_window INTEGER,
max_output_tokens INTEGER,
embedding_dimension INTEGER,
input_price_per_1k NUMERIC(12, 8),
output_price_per_1k NUMERIC(12, 8),
local_model BOOLEAN NOT NULL DEFAULT FALSE,
default_model BOOLEAN NOT NULL DEFAULT FALSE,
capabilities_json JSONB NOT NULL DEFAULT '{}'::jsonb,
options_json JSONB NOT NULL DEFAULT '{}'::jsonb,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_config_provider_code UNIQUE (provider_id, model_code),
CONSTRAINT fk_model_config_provider_id FOREIGN KEY (provider_id) REFERENCES model_provider (id)
);
CREATE TABLE IF NOT EXISTS model_route_rule (
id BIGSERIAL PRIMARY KEY,
route_code VARCHAR(100) NOT NULL,
route_name VARCHAR(100) NOT NULL,
task_type VARCHAR(50) NOT NULL,
match_scope VARCHAR(50) NOT NULL DEFAULT 'GLOBAL',
scope_id BIGINT,
primary_model_id BIGINT NOT NULL,
fallback_model_ids_json JSONB NOT NULL DEFAULT '[]'::jsonb,
route_strategy VARCHAR(50) NOT NULL DEFAULT 'MANUAL',
max_latency_ms INTEGER,
enabled BOOLEAN NOT NULL DEFAULT TRUE,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_route_rule_code UNIQUE (route_code),
CONSTRAINT fk_model_route_primary_model_id FOREIGN KEY (primary_model_id) REFERENCES model_config (id)
);
CREATE TABLE IF NOT EXISTS rag_store_model_config (
id BIGSERIAL PRIMARY KEY,
store_id BIGINT NOT NULL,
embedding_model_id BIGINT NOT NULL,
embedding_dimension INTEGER NOT NULL DEFAULT 1024,
chunk_strategy INTEGER,
chunk_size INTEGER,
chunk_overlap INTEGER,
delimiter VARCHAR(50),
active BOOLEAN NOT NULL DEFAULT TRUE,
index_version INTEGER NOT NULL DEFAULT 1,
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_rag_store_model_config_store_active UNIQUE (store_id, active),
CONSTRAINT fk_rag_store_model_config_store_id FOREIGN KEY (store_id) REFERENCES rag_store (id),
CONSTRAINT fk_rag_store_model_config_embedding_model_id FOREIGN KEY (embedding_model_id) REFERENCES model_config (id)
);
CREATE TABLE IF NOT EXISTS model_call_log (
id BIGSERIAL PRIMARY KEY,
request_id VARCHAR(64) NOT NULL,
provider_id BIGINT,
model_id BIGINT,
task_type VARCHAR(50) NOT NULL,
biz_type VARCHAR(50),
biz_id VARCHAR(100),
call_type VARCHAR(50) NOT NULL,
status VARCHAR(50) NOT NULL,
prompt_tokens INTEGER,
completion_tokens INTEGER,
total_tokens INTEGER,
estimated_cost NUMERIC(14, 8),
duration_ms INTEGER,
request_hash VARCHAR(64),
error_code VARCHAR(100),
error_message VARCHAR(1000),
version INTEGER NOT NULL DEFAULT 1,
create_time TIMESTAMP,
update_time TIMESTAMP,
remark VARCHAR(500) DEFAULT '',
create_by VARCHAR(64),
update_by VARCHAR(64),
CONSTRAINT uk_model_call_log_request_id UNIQUE (request_id)
);
CREATE INDEX IF NOT EXISTS idx_model_config_provider_id ON model_config (provider_id);
CREATE INDEX IF NOT EXISTS idx_model_config_model_type ON model_config (model_type);
CREATE INDEX IF NOT EXISTS idx_model_route_task_scope ON model_route_rule (task_type, match_scope, scope_id);
CREATE INDEX IF NOT EXISTS idx_rag_store_model_config_store_id ON rag_store_model_config (store_id);
CREATE INDEX IF NOT EXISTS idx_model_call_log_request_id ON model_call_log (request_id);
CREATE INDEX IF NOT EXISTS idx_model_call_log_task_type ON model_call_log (task_type);