docs/architecture/mysql-schema.md 自动同步生成。首版 DDL 位于 scripts/g2rain-knowledge.sql (opens new window)。该脚本创建独立库 g2rain_knowledge,仅用于首次初始化(会 DROP 并重建本库表),禁止在已有业务数据环境重复执行。模型遵循 G2rain 现有 MySQL 规范:organ_id 作为机构/租户隔离键,服务生成 BIGINT 主键,通用审计列为 create_time、update_time、version 与 delete_flag,且不使用物理外键。含 delete_flag 的索引统一使用 MySQL 函数键 (IF(delete_flag = 0, 0, NULL)),使唯一约束与查询索引仅作用于有效记录。
# 实体关系
erDiagram
KNOWLEDGE_CATEGORY ||--o{ KNOWLEDGE_ITEM : classifies
KNOWLEDGE_ITEM ||--o{ KNOWLEDGE_REVISION : versions
KNOWLEDGE_REVISION ||--o{ KNOWLEDGE_CHUNK : manifests
KNOWLEDGE_REVISION ||--o{ KNOWLEDGE_TASK : processes
KNOWLEDGE_ITEM ||--|| KNOWLEDGE_RELEASE : selects
KNOWLEDGE_REVISION ||--o{ KNOWLEDGE_FEEDBACK : evaluates
# 表职责
| 表 | 职责 |
|---|---|
knowledge_category | 组织级扁平运营分类字典;不承担权限、隔离或检索过滤 |
knowledge_tag | 组织级扁平标签字典;organ_id + tag_code 唯一;tag_name 仅展示;不承担权限或数据隔离 |
knowledge_item | 稳定知识主题,organ_id + knowledge_key 唯一 |
knowledge_revision | 文件或 FAQ 内容的版本、解析、索引和审核状态;保存 tags_json、priority、embedding_profile 与模型标识 |
knowledge_chunk | 本地解析 chunks 与 Milvus Entity 的可重建清单,不保存正文;本表 id 直接作为 Milvus chunk_id 主键,不维护第二套向量记录 ID |
knowledge_task | 可重试的知识处理任务;主路径为审核通过后的 PROCESS(解析、切片、Embedding、Milvus staged);另有 DELETE_INDEX;不承载发布、回滚或下线 |
knowledge_release | 每个知识主题当前活动 revision 的唯一权威选择 |
knowledge_answer_template | 机构级回复模板;template_code 唯一,ACTIVE 模板可被 /knowledge/answer 选用 |
knowledge_feedback | 客服回答反馈及人工修正线索 |
# 检索与发布查询约束
Milvus 的 searchable 标量字段是 knowledge_release.active_revision_id 的派生投影,用于避免生产检索携带大量 revision ID。检索服务必须按 organ_id 和 delete_flag = 0 批量校验 Milvus 返回的 chunk:它必须映射到同一机构、未删除且 revision 为 knowledge_release.active_revision_id 的 knowledge_chunk。Milvus 不具备发布裁决权。
人工发布操作先校验目标 revision 的 index_status = INDEXED 和 chunk 清单完整,在事务外预启用目标 Milvus Entity,再以 knowledge_release.version 做 CAS,在单个 MySQL 短事务内更新 active_revision_id 与 revision 状态。事务成功后同步关闭旧 Entity;任一步出现派生索引异常时,以 MySQL 活动版本复核兜底,并由人工索引对账命令修复。
knowledge_task 只服务知识处理。Worker 只领取 PENDING 且 available_time 已到的任务,领取时写入 lease_owner 与 lease_expire_time;租约过期的 PROCESS 或删除索引任务可恢复为待执行。
权威处理顺序为 DRAFT → REVIEWING(人工审核原文/FAQ 与标签)→ APPROVED → PROCESS(解析、切片、Embedding、Milvus)→ READY_TO_PUBLISH → 人工同步发布。审核只针对源内容,不审切片与向量中间产物;审核通过前不得写入 Milvus。DDL revision_status COMMENT 若仍列举旧状态词,以本页与业务流程为准,见 DEV-001。
embedding_profile 记录该 revision 实际使用的向量配置键(首期如 qwen-4096-v1),与部署中的 collection / 维度一一对应;embedding_model 记录外部模型标识。priority 仅服务运营排序,不参与 Milvus 强制过滤。
# 标签模型
knowledge_tag 是组织级扁平标签字典。tag_code 是同一组织内的稳定业务键,创建后冻结,不得随展示名改写;tag_name 只用于运营端展示。标签是唯一的业务分类与检索筛选机制;它不承担租户隔离或权限职责,这些系统边界仍由 organ_id、发布状态和检索服务控制。
首版不建立 knowledge_revision_tag 关联表。运营端选择标签时,将 tag_code 数组写入 knowledge_revision.tags_json;PROCESS 任务将该数组同步至对应 Milvus Entity 的 tags ARRAY 字段,并建立 INVERTED 标量索引。字典改展示名或停用不直接改写历史版本的 code 快照;需要增减已发布知识的标签时,应创建新 revision 并重新发布。