knowledge_base.sql 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. -- =====================================================================
  2. -- 知识库(module/knowledge):用户隔离 + 内置标记
  3. --
  4. -- 幂等脚本(可重复执行)。项目无 Flyway,按 sql/ 目录既有约定手工执行。
  5. --
  6. -- 两层隔离模型:
  7. -- 知识库本体 is_builtin=1 内置库全局可见可绑定(仅管理员 userId=1 可维护);
  8. -- is_builtin=0 自建库仅创建者可见(user_id 过滤)。
  9. -- 库内文档 列表/下载/删除/重试只对上传者本人开放(knowledge_doc.user_id 过滤);
  10. -- 内置库里管理员上传的文档清单对普通用户不可见。
  11. -- RAG 检索 search_knowledge 检索绑定知识库的全量文档(与文档列表隔离解耦)。
  12. --
  13. -- 向量表:pgvector 动态建表 kb_vec_{kbId}{tag}_d{dims}
  14. -- (tag 为嵌入模型标签,本地/在线模型物理隔离),仿 chat_att_vec_{caseId}_d{dims}。
  15. -- =====================================================================
  16. -- 知识库
  17. create table if not exists knowledge_base
  18. (
  19. id bigint primary key, -- 雪花ID;内置库固定 id=1
  20. user_id bigint not null, -- 创建者(内置库=1 平台管理员)
  21. is_builtin smallint not null default 0, -- 1=内置(全局可见只读),0=用户自建
  22. name varchar(100) not null,
  23. description varchar(500),
  24. create_time timestamp default current_timestamp,
  25. update_time timestamp
  26. );
  27. create index if not exists idx_kb_user on knowledge_base (user_id);
  28. -- 知识库文档(元数据 + 解析/索引状态;user_id 即上传者,列表/下载隔离依据)
  29. create table if not exists knowledge_doc
  30. (
  31. id bigint primary key,
  32. kb_id bigint not null,
  33. user_id bigint not null, -- 上传者(列表/下载隔离依据)
  34. file_name varchar(500) not null,
  35. file_path varchar(1000) not null, -- 原件存储相对路径(下载用)
  36. sidecar_path varchar(1000), -- Tika 全文 .txt 存储相对路径(向量化用)
  37. mime varchar(100),
  38. size_bytes bigint default 0,
  39. char_count integer default 0, -- 提取文本字符数
  40. chunk_count integer default 0, -- 已向量化块数
  41. index_status varchar(20) default 'PENDING', -- PENDING / INDEXING / READY / FAILED
  42. fail_reason varchar(1000),
  43. download_count integer default 0, -- 下载次数(我的文档列表展示)
  44. create_time timestamp default current_timestamp,
  45. update_time timestamp
  46. );
  47. create index if not exists idx_kd_kb_user on knowledge_doc (kb_id, user_id);
  48. -- 下载记录(谁在何时下载了哪个文档)
  49. create table if not exists knowledge_doc_download_log
  50. (
  51. id bigint primary key, -- 雪花ID
  52. kb_id bigint not null,
  53. doc_id bigint not null,
  54. user_id bigint not null, -- 下载人
  55. file_name varchar(500) not null, -- 下载时文件名快照
  56. download_time timestamp default current_timestamp
  57. );
  58. create index if not exists idx_kdl_doc on knowledge_doc_download_log (doc_id);
  59. create index if not exists idx_kdl_user on knowledge_doc_download_log (user_id);
  60. -- 内置知识库(文档由管理员在界面上传)
  61. insert into knowledge_base (id, user_id, is_builtin, name, description)
  62. values (1, 1, 1, '系统通用知识库', '系统内置知识库,所有用户可见可绑定(仅管理员可维护文档)')
  63. on conflict (id) do nothing;
  64. -- agent(研判方案)绑定知识库:一个方案最多绑定一个,可空
  65. ALTER TABLE agent ADD COLUMN IF NOT EXISTS knowledge_base_id BIGINT;