| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- -- =====================================================================
- -- 知识库(module/knowledge):用户隔离 + 内置标记
- --
- -- 幂等脚本(可重复执行)。项目无 Flyway,按 sql/ 目录既有约定手工执行。
- --
- -- 两层隔离模型:
- -- 知识库本体 is_builtin=1 内置库全局可见可绑定(仅管理员 userId=1 可维护);
- -- is_builtin=0 自建库仅创建者可见(user_id 过滤)。
- -- 库内文档 列表/下载/删除/重试只对上传者本人开放(knowledge_doc.user_id 过滤);
- -- 内置库里管理员上传的文档清单对普通用户不可见。
- -- RAG 检索 search_knowledge 检索绑定知识库的全量文档(与文档列表隔离解耦)。
- --
- -- 向量表:pgvector 动态建表 kb_vec_{kbId}{tag}_d{dims}
- -- (tag 为嵌入模型标签,本地/在线模型物理隔离),仿 chat_att_vec_{caseId}_d{dims}。
- -- =====================================================================
- -- 知识库
- create table if not exists knowledge_base
- (
- id bigint primary key, -- 雪花ID;内置库固定 id=1
- user_id bigint not null, -- 创建者(内置库=1 平台管理员)
- is_builtin smallint not null default 0, -- 1=内置(全局可见只读),0=用户自建
- name varchar(100) not null,
- description varchar(500),
- create_time timestamp default current_timestamp,
- update_time timestamp
- );
- create index if not exists idx_kb_user on knowledge_base (user_id);
- -- 知识库文档(元数据 + 解析/索引状态;user_id 即上传者,列表/下载隔离依据)
- create table if not exists knowledge_doc
- (
- id bigint primary key,
- kb_id bigint not null,
- user_id bigint not null, -- 上传者(列表/下载隔离依据)
- file_name varchar(500) not null,
- file_path varchar(1000) not null, -- 原件存储相对路径(下载用)
- sidecar_path varchar(1000), -- Tika 全文 .txt 存储相对路径(向量化用)
- mime varchar(100),
- size_bytes bigint default 0,
- char_count integer default 0, -- 提取文本字符数
- chunk_count integer default 0, -- 已向量化块数
- index_status varchar(20) default 'PENDING', -- PENDING / INDEXING / READY / FAILED
- fail_reason varchar(1000),
- download_count integer default 0, -- 下载次数(我的文档列表展示)
- create_time timestamp default current_timestamp,
- update_time timestamp
- );
- create index if not exists idx_kd_kb_user on knowledge_doc (kb_id, user_id);
- -- 下载记录(谁在何时下载了哪个文档)
- create table if not exists knowledge_doc_download_log
- (
- id bigint primary key, -- 雪花ID
- kb_id bigint not null,
- doc_id bigint not null,
- user_id bigint not null, -- 下载人
- file_name varchar(500) not null, -- 下载时文件名快照
- download_time timestamp default current_timestamp
- );
- create index if not exists idx_kdl_doc on knowledge_doc_download_log (doc_id);
- create index if not exists idx_kdl_user on knowledge_doc_download_log (user_id);
- -- 内置知识库(文档由管理员在界面上传)
- insert into knowledge_base (id, user_id, is_builtin, name, description)
- values (1, 1, 1, '系统通用知识库', '系统内置知识库,所有用户可见可绑定(仅管理员可维护文档)')
- on conflict (id) do nothing;
- -- agent(研判方案)绑定知识库:一个方案最多绑定一个,可空
- ALTER TABLE agent ADD COLUMN IF NOT EXISTS knowledge_base_id BIGINT;
|