2025-12-02 13:21:18 +08:00
-- =============================
-- 知识库管理模块
-- 支持:招投标知识库、客服知识库、企业内部知识库
-- =============================
CREATE SCHEMA IF NOT EXISTS knowledge ;
-- 知识库表(多租户知识库定义)
DROP TABLE IF EXISTS knowledge . tb_knowledge_base CASCADE ;
CREATE TABLE knowledge . tb_knowledge_base (
optsn VARCHAR ( 50 ) NOT NULL , -- 流水号
2025-12-02 14:59:34 +08:00
agent_id VARCHAR ( 50 ) NOT NULL , -- 智能体id
knowledge_id VARCHAR ( 50 ) NOT NULL , -- 知识库ID
2025-12-02 13:21:18 +08:00
name VARCHAR ( 255 ) NOT NULL , -- 知识库名称
kb_type VARCHAR ( 50 ) NOT NULL , -- 知识库类型: bidding-招投标/customer_service-客服/internal-内部协同
access_level VARCHAR ( 20 ) NOT NULL DEFAULT ' private ' , -- 访问级别: public-公开/private-私有/internal-内部
description TEXT , -- 知识库描述
storage_path VARCHAR ( 500 ) , -- 存储路径
version VARCHAR ( 20 ) DEFAULT ' 1.0 ' , -- 当前版本号
config JSONB DEFAULT NULL , -- 知识库配置( JSON格式: 索引配置、检索参数等)
2025-12-02 14:59:34 +08:00
service_type VARCHAR ( 50 ) , -- 服务类型( bidding/customer_service/internal, 冗余kb_type便于查询)
2025-12-02 13:21:18 +08:00
dept_path VARCHAR ( 255 ) DEFAULT NULL , -- 部门全路径
status VARCHAR ( 20 ) NOT NULL DEFAULT ' active ' , -- 状态: active-激活/inactive-停用/archived-归档
creator VARCHAR ( 50 ) DEFAULT NULL , -- 创建者
updater VARCHAR ( 50 ) DEFAULT NULL , -- 更新者
2025-12-02 13:36:09 +08:00
create_time TIMESTAMPTZ NOT NULL DEFAULT now ( ) , -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL , -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL , -- 删除时间
2025-12-02 13:21:18 +08:00
deleted BOOLEAN NOT NULL DEFAULT false , -- 是否删除
2025-12-02 14:59:34 +08:00
PRIMARY KEY ( knowledge_id ) ,
2025-12-02 13:21:18 +08:00
UNIQUE ( optsn )
) ;
CREATE INDEX idx_kb_type ON knowledge . tb_knowledge_base ( kb_type ) WHERE deleted = false ;
2025-12-02 14:59:34 +08:00
CREATE INDEX idx_kb_service ON knowledge . tb_knowledge_base ( service_type ) WHERE deleted = false ;
2025-12-02 13:21:18 +08:00
CREATE INDEX idx_kb_dept_path ON knowledge . tb_knowledge_base ( dept_path ) WHERE deleted = false ;
COMMENT ON TABLE knowledge . tb_knowledge_base IS ' 知识库表 ' ;
COMMENT ON COLUMN knowledge . tb_knowledge_base . kb_type IS ' 知识库类型: bidding-招投标/customer_service-客服/internal-内部协同 ' ;
2025-12-02 14:59:34 +08:00
COMMENT ON COLUMN knowledge . tb_knowledge_base . service_type IS ' 服务类型( 冗余存储便于快速过滤, 与kb_type保持一致) ' ;
2025-12-02 13:21:18 +08:00
COMMENT ON COLUMN knowledge . tb_knowledge_base . access_level IS ' 访问级别: public-公开/private-私有/internal-内部 ' ;
-- 知识文档表
DROP TABLE IF EXISTS knowledge . tb_knowledge_document CASCADE ;
CREATE TABLE knowledge . tb_knowledge_document (
optsn VARCHAR ( 50 ) NOT NULL , -- 流水号
doc_id VARCHAR ( 50 ) NOT NULL , -- 文档ID
2025-12-02 14:59:34 +08:00
knowledge_id VARCHAR ( 50 ) NOT NULL , -- 所属知识库ID
2025-12-02 13:21:18 +08:00
title VARCHAR ( 500 ) NOT NULL , -- 文档标题
doc_type VARCHAR ( 50 ) NOT NULL , -- 文档类型: text-文本/pdf/word/excel/image/video
category VARCHAR ( 100 ) , -- 文档分类(自动或手动分类)
content TEXT , -- 文档内容(文本类型)
content_summary TEXT , -- 内容摘要( AI生成)
file_id VARCHAR ( 50 ) , -- 关联文件表ID
file_path VARCHAR ( 500 ) , -- 文件路径
file_size BIGINT , -- 文件大小(字节)
mime_type VARCHAR ( 100 ) , -- MIME类型
2025-12-04 17:23:04 +08:00
version INTEGER DEFAULT 1 , -- 文档版本号(仅做记录)
root_doc_id VARCHAR ( 50 ) , -- 根文档ID( 版本组标识, 保留用于整体版本管理)
2025-12-02 13:21:18 +08:00
tags TEXT [ ] , -- 文档标签数组
keywords TEXT [ ] , -- 关键词数组( AI提取)
embedding_status VARCHAR ( 20 ) DEFAULT ' pending ' , -- 向量化状态: pending-待处理/processing-处理中/completed-完成/failed-失败
embedding_model VARCHAR ( 100 ) , -- 使用的向量化模型
chunk_count INTEGER DEFAULT 0 , -- 切片数量
metadata JSONB DEFAULT NULL , -- 文档元数据( JSON格式)
source_url VARCHAR ( 500 ) , -- 来源URL
2025-12-02 14:59:34 +08:00
service_type VARCHAR ( 50 ) , -- 服务类型(继承自知识库)
2025-12-02 13:21:18 +08:00
dept_path VARCHAR ( 255 ) DEFAULT NULL , -- 部门全路径
status VARCHAR ( 20 ) NOT NULL DEFAULT ' active ' , -- 状态: active-激活/inactive-停用/archived-归档
creator VARCHAR ( 50 ) DEFAULT NULL , -- 创建者
updater VARCHAR ( 50 ) DEFAULT NULL , -- 更新者
2025-12-02 13:36:09 +08:00
create_time TIMESTAMPTZ NOT NULL DEFAULT now ( ) , -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL , -- 更新时间
delete_time TIMESTAMPTZ DEFAULT NULL , -- 删除时间
2025-12-02 13:21:18 +08:00
deleted BOOLEAN NOT NULL DEFAULT false , -- 是否删除
PRIMARY KEY ( doc_id ) ,
2025-12-05 15:34:02 +08:00
UNIQUE ( optsn )
2025-12-02 13:21:18 +08:00
) ;
2025-12-02 14:59:34 +08:00
CREATE INDEX idx_doc_kb ON knowledge . tb_knowledge_document ( knowledge_id ) WHERE deleted = false ;
CREATE INDEX idx_doc_service ON knowledge . tb_knowledge_document ( service_type ) WHERE deleted = false ;
2025-12-02 13:21:18 +08:00
CREATE INDEX idx_doc_category ON knowledge . tb_knowledge_document ( category ) WHERE deleted = false ;
CREATE INDEX idx_doc_embedding_status ON knowledge . tb_knowledge_document ( embedding_status ) WHERE deleted = false ;
CREATE INDEX idx_doc_tags ON knowledge . tb_knowledge_document USING GIN ( tags ) WHERE deleted = false ;
2025-12-04 17:23:04 +08:00
CREATE INDEX idx_doc_root ON knowledge . tb_knowledge_document ( root_doc_id ) WHERE deleted = false ;
2025-12-02 13:21:18 +08:00
2025-12-04 17:23:04 +08:00
COMMENT ON TABLE knowledge . tb_knowledge_document IS ' 知识文档表( 文档级元数据, 版本控制在chunk级别) ' ;
2025-12-02 14:59:34 +08:00
COMMENT ON COLUMN knowledge . tb_knowledge_document . service_type IS ' 服务类型(从知识库继承,用于服务间隔离) ' ;
2025-12-04 17:23:04 +08:00
COMMENT ON COLUMN knowledge . tb_knowledge_document . version IS ' 文档版本号( 仅做记录, 实际版本控制在chunk级别) ' ;
COMMENT ON COLUMN knowledge . tb_knowledge_document . root_doc_id IS ' 根文档ID( 用于文档整体版本管理, 可选) ' ;
2025-12-02 13:21:18 +08:00
COMMENT ON COLUMN knowledge . tb_knowledge_document . embedding_status IS ' 向量化状态: pending/processing/completed/failed ' ;
-- 知识文档片段表( 用于RAG检索)
DROP TABLE IF EXISTS knowledge . tb_knowledge_chunk CASCADE ;
CREATE TABLE knowledge . tb_knowledge_chunk (
optsn VARCHAR ( 50 ) NOT NULL , -- 流水号
chunk_id VARCHAR ( 50 ) NOT NULL , -- 片段ID
doc_id VARCHAR ( 50 ) NOT NULL , -- 所属文档ID
2025-12-02 14:59:34 +08:00
knowledge_id VARCHAR ( 50 ) NOT NULL , -- 所属知识库ID
2025-12-02 13:21:18 +08:00
chunk_index INTEGER NOT NULL , -- 片段索引(在文档中的顺序)
content TEXT NOT NULL , -- 片段内容
content_length INTEGER , -- 内容长度
embedding vector ( 1536 ) , -- 向量嵌入( 假设使用OpenAI 1536维)
chunk_type VARCHAR ( 20 ) DEFAULT ' text ' , -- 片段类型: text-文本/table-表格/image-图片
2025-12-04 17:23:04 +08:00
version INTEGER DEFAULT 1 , -- chunk版本号( 每次修改自动+1)
root_chunk_id VARCHAR ( 50 ) , -- 根chunk ID( 同一chunk的不同版本共享此ID)
is_current BOOLEAN DEFAULT true , -- 是否当前使用的版本
2025-12-02 13:21:18 +08:00
position_info JSONB , -- 位置信息(页码、坐标等)
metadata JSONB , -- 片段元数据
dept_path VARCHAR ( 255 ) DEFAULT NULL , -- 部门全路径
creator VARCHAR ( 50 ) DEFAULT NULL , -- 创建者
2025-12-02 13:36:09 +08:00
create_time TIMESTAMPTZ NOT NULL DEFAULT now ( ) , -- 创建时间
update_time TIMESTAMPTZ DEFAULT NULL , -- 更新时间
2025-12-02 13:21:18 +08:00
deleted BOOLEAN NOT NULL DEFAULT false , -- 是否删除
PRIMARY KEY ( chunk_id ) ,
2025-12-05 15:34:02 +08:00
UNIQUE ( optsn )
2025-12-02 13:21:18 +08:00
) ;
CREATE INDEX idx_chunk_doc ON knowledge . tb_knowledge_chunk ( doc_id ) WHERE deleted = false ;
2025-12-02 14:59:34 +08:00
CREATE INDEX idx_chunk_kb ON knowledge . tb_knowledge_chunk ( knowledge_id ) WHERE deleted = false ;
2025-12-04 17:23:04 +08:00
CREATE INDEX idx_chunk_root_current ON knowledge . tb_knowledge_chunk ( root_chunk_id , is_current ) WHERE deleted = false ;
CREATE INDEX idx_chunk_current ON knowledge . tb_knowledge_chunk ( is_current ) WHERE deleted = false AND is_current = true ;
-- 向量检索索引( 需要安装pgvector扩展, 建议只索引当前版本)
-- CREATE INDEX idx_chunk_embedding ON knowledge.tb_knowledge_chunk USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100) WHERE deleted = false AND is_current = true;
2025-12-02 13:21:18 +08:00
2025-12-04 17:23:04 +08:00
COMMENT ON TABLE knowledge . tb_knowledge_chunk IS ' 知识文档片段表( RAG检索基本单位, 支持chunk级版本控制) ' ;
COMMENT ON COLUMN knowledge . tb_knowledge_chunk . version IS ' chunk版本号( 整数, 每次修改自动+1) ' ;
COMMENT ON COLUMN knowledge . tb_knowledge_chunk . root_chunk_id IS ' 根chunk ID( 同一chunk的所有版本共享此ID, 首次创建时等于chunk_id) ' ;
COMMENT ON COLUMN knowledge . tb_knowledge_chunk . is_current IS ' 是否当前使用的版本( 每个root_chunk_id只有一个is_current=true, RAG检索时只使用当前版本) ' ;
COMMENT ON COLUMN knowledge . tb_knowledge_chunk . embedding IS ' 向量嵌入( 需要pgvector扩展, 建议只为is_current=true的chunk生成) ' ;
2025-12-02 13:21:18 +08:00
-- 知识访问日志表
DROP TABLE IF EXISTS knowledge . tb_knowledge_access_log CASCADE ;
CREATE TABLE knowledge . tb_knowledge_access_log (
optsn VARCHAR ( 50 ) NOT NULL , -- 流水号
log_id VARCHAR ( 50 ) NOT NULL , -- 日志ID
2025-12-02 14:59:34 +08:00
knowledge_id VARCHAR ( 50 ) , -- 知识库ID
2025-12-02 13:21:18 +08:00
doc_id VARCHAR ( 50 ) , -- 文档ID
user_id VARCHAR ( 50 ) NOT NULL , -- 用户ID
access_type VARCHAR ( 20 ) NOT NULL , -- 访问类型: view-查看/download-下载/search-搜索/edit-编辑
query_text TEXT , -- 搜索查询文本
result_count INTEGER , -- 搜索结果数量
ip_address VARCHAR ( 45 ) , -- IP地址
user_agent TEXT , -- 用户代理
dept_path VARCHAR ( 255 ) DEFAULT NULL , -- 部门全路径
2025-12-02 13:36:09 +08:00
create_time TIMESTAMPTZ NOT NULL DEFAULT now ( ) , -- 创建时间
2025-12-02 13:21:18 +08:00
PRIMARY KEY ( log_id ) ,
UNIQUE ( optsn )
) ;
CREATE INDEX idx_access_log_user ON knowledge . tb_knowledge_access_log ( user_id , create_time DESC ) ;
2025-12-02 14:59:34 +08:00
CREATE INDEX idx_access_log_kb ON knowledge . tb_knowledge_access_log ( knowledge_id , create_time DESC ) ;
2025-12-02 13:21:18 +08:00
COMMENT ON TABLE knowledge . tb_knowledge_access_log IS ' 知识访问日志表 ' ;