# 问题陈述 按“图谱知识库”独立模块设计知识抽取与图检索链路,明确总部与教师内容入库策略,并把租户隔离作为图检索默认约束。 ## 当前状态(已确认) * 架构层已定义图数据库主选 NebulaGraph,AI 链路为业务服务 -> ai-client -> python-ai -> 图谱/向量。参考 `docs/architecture/base-services.md (9-16)`、`docs/architecture/logical-view.md (50-72)`。 * AI SQL 已有图谱实体、关系、同步任务等基础结构,且同步任务支持 `target_store=GRAPH|VECTOR`。参考 `init/pg/ai/10_create_ai_tables.sql (1-215)`。 * 现有 `python-ai` 仅暴露 `/health`,尚无图谱入库与检索 API。参考 `backend/python-ai/app/main.py (1-13)`。 * 功能清单强调知识库用于错题关联课程与内容检索,但当前运行时链路未落地。参考 `docs/AI智能学习系统功能清单.md (91-98)`。 ## 模块拆分与设计细节 ### 1) 子模块边界 * `kg-ingestion`:知识文件到图谱实体/关系抽取、去重、版本管理。 * `kg-model`:实体类型体系(知识点/题目/课程/课件)与关系类型体系。 * `kg-sync`:图谱同步任务编排、重试、失败补偿。 * `kg-retrieval`:图检索 API(按场景返回知识点路径、关联题、关联课程)。 * `kg-governance`:内容审核、来源追踪、删除回收策略。 ### 2) 入库策略(按你给定口径) * 知识库分两类:图谱知识库、向量知识库。 * 总部创建知识库:同时进入图谱 + 向量。 * 教师班级课程/课件内容:仅进入图谱,不进入向量。 * 设计实现:在 `tb_ai_knowledge_file` 增加 `source_owner_type`(HQ/TEACHER)、`knowledge_scope`(GLOBAL/TENANT/CLASS/COURSE)、`ingest_policy`(BOTH/GRAPH_ONLY),同步任务根据策略自动生成。 ### 3) 图检索与租户隔离 * 图检索默认过滤 `tenant_id`,并在班级场景附加 `class_id/course_id` 可见域约束。 * 总部全局知识仅在授权租户可见,禁止跨租户回查实体细节。 * 返回结果附带 `source_table/source_pk` 以支持业务回查,但回查前再次执行租户一致性校验。 ### 4) 与业务域联动 * `course`:知识点树与课程节点建立双向可追溯引用。 * `question`:题目-知识点关系可回写图谱关系,支持错题知识路径解释。 * `upms`:复用班级与租户结构进行图谱可见域控制。 ## 问题点与风险 * 目前仅有表结构,图谱入库/检索服务未实现,链路停留在设计层。 * 现有 AI 表缺少“来源归属与入库策略”显式字段,无法直接表达 HQ 双入库、教师图谱单入库规则。 * 没有图检索访问日志与越权审计,难以定位租户隔离问题。 * python-ai 未落地图数据库客户端与查询协议,接口冻结前需先定义查询契约。 ## 需确认的设计决策 * 图检索首期采用“模板化查询 + 场景参数”还是开放式图查询 DSL(推荐模板化)。 * 总部知识对分校是否默认可见,或需要租户级授权开关。 * 图谱实体冲突(同名知识点跨租户)采用“租户隔离命名空间”还是“全局实体+租户可见边”模型。