feat(db): 启动本项目专属知识库容器并完成法规数据无损迁移与解耦

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WeiCHEN
2026-09-07 23:40:23 +08:00
co-authored by Cursor
parent d8a7254c1b
commit 0f21060bce
4 changed files with 485 additions and 27 deletions
+83 -27
View File
@@ -1,34 +1,90 @@
-- 共享知识库 (Shared Knowledge Base) 初始化脚本
-- pgvector 扩展及基础条目库
-- =============================================================================
-- 共享知识库基础设施 (Shared Knowledge Base) 数据库初始化脚本
-- 适用于三套环境服务共享的 pgvector 向量数据库 (shuimu-kb-shared:5432)
-- 支持多领域知识中枢:法规标准 (Regulatory) + 项目数字资产 (ProjectAsset) + 员工能力模型 (StaffCapability)
-- =============================================================================
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE TABLE IF NOT EXISTS kb_documents (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
doc_no TEXT NOT NULL DEFAULT '',
category TEXT NOT NULL DEFAULT '',
content TEXT NOT NULL,
embedding vector(1024),
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
-- =============================================================================
-- 领域一:法规标准知识领域 (Domain: Regulatory)
-- 包含医疗器械法律法规、国家标准(GB/T)、行业标准(YY)及指导原则
-- 注:reg_* 系列表结构及 2,907 篇法规基线数据由流式迁移转储脚本导入
-- =============================================================================
-- =============================================================================
-- 领域二:项目数字资产知识领域 (Domain: ProjectAsset, 预留与扩展)
-- 沉淀已完成项目的可行性报告、CDO 报价模型、系统方案、BOM、踩坑避险记录
-- =============================================================================
CREATE TABLE IF NOT EXISTS asset_projects (
id BIGSERIAL PRIMARY KEY,
project_code TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
device_type TEXT NOT NULL DEFAULT '',
customer_name TEXT NOT NULL DEFAULT '',
stage_reached TEXT NOT NULL DEFAULT '',
summary TEXT NOT NULL DEFAULT '',
metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_kb_doc_title ON kb_documents USING gin (title gin_trgm_ops);
CREATE INDEX IF NOT EXISTS idx_kb_doc_no ON kb_documents(doc_no);
CREATE INDEX IF NOT EXISTS idx_kb_category ON kb_documents(category);
-- 共享法规/知识切片表
CREATE TABLE IF NOT EXISTS kb_chunks (
id BIGSERIAL PRIMARY KEY,
document_id BIGINT REFERENCES kb_documents(id) ON DELETE CASCADE,
chunk_index INT NOT NULL DEFAULT 0,
chunk_text TEXT NOT NULL,
embedding vector(1024),
tokens_count INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
CREATE TABLE IF NOT EXISTS asset_documents (
id BIGSERIAL PRIMARY KEY,
project_id BIGINT REFERENCES asset_projects(id) ON DELETE CASCADE,
doc_type TEXT NOT NULL, -- feasibility, quote, cad, pcb, bom, testing
title TEXT NOT NULL,
file_path TEXT NOT NULL,
metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_kb_chunk_doc ON kb_chunks(document_id);
CREATE TABLE IF NOT EXISTS asset_chunks (
id BIGSERIAL PRIMARY KEY,
project_id BIGINT REFERENCES asset_projects(id) ON DELETE CASCADE,
document_id BIGINT REFERENCES asset_documents(id) ON DELETE CASCADE,
chunk_title TEXT NOT NULL DEFAULT '',
content TEXT NOT NULL,
cite_key TEXT NOT NULL DEFAULT '',
embedding vector(1024),
tsv tsvector,
metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_asset_chunks_project ON asset_chunks(project_id);
CREATE INDEX IF NOT EXISTS idx_asset_chunks_doc ON asset_chunks(document_id);
CREATE INDEX IF NOT EXISTS idx_asset_chunks_tsv ON asset_chunks USING gin (tsv);
-- =============================================================================
-- 领域三:员工工作能力知识领域 (Domain: StaffCapability, 预留与扩展)
-- 沉淀研发工程师专长技能图谱、历史人效系数、工时评估模型,辅助智能排班与精准估算
-- =============================================================================
CREATE TABLE IF NOT EXISTS staff_profiles (
id BIGSERIAL PRIMARY KEY,
staff_code TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
role_category TEXT NOT NULL, -- optical, mechanical, hardware, firmware, algorithm, regulatory, qa
seniority_level TEXT NOT NULL DEFAULT 'senior',
skills TEXT[] NOT NULL DEFAULT '{}',
hourly_rate_cny NUMERIC(10,2) NOT NULL DEFAULT 0.00,
metadata_json JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS staff_experience_records (
id BIGSERIAL PRIMARY KEY,
staff_id BIGINT REFERENCES staff_profiles(id) ON DELETE CASCADE,
project_code TEXT NOT NULL DEFAULT '',
task_type TEXT NOT NULL,
planned_hours NUMERIC(8,2) NOT NULL DEFAULT 0.00,
actual_hours NUMERIC(8,2) NOT NULL DEFAULT 0.00,
variance_ratio NUMERIC(5,2) NOT NULL DEFAULT 1.00,
learnings TEXT NOT NULL DEFAULT '',
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_staff_exp_staff ON staff_experience_records(staff_id);
CREATE INDEX IF NOT EXISTS idx_staff_exp_task ON staff_experience_records(task_type);