# RAG 前瞻性架构评审与新数据库接入方法 ## 一、当前能力边界 现有系统已经具备多源检索、Schema 自动发现、白名单、动态 Few-shot、SQL/Cypher 只读校验、`EXPLAIN` 预检和一次修复。距离高准确率生产级 Text-to-SQL/Text-to-Cypher 仍有以下差距: 1. 仅有结构 Schema,缺少索引、约束、主外键、基数、典型属性值和业务术语等语义层。 2. 只按名称相似度选择 Schema 容易得到互不连接的 Label 和 Relationship。 3. 用户问题中的实体值尚未形成独立的实体链接链路,例如“爱达号”应先定位到 `Vessel.name` 或 `Mission.name`。 4. Few-shot 数量少时覆盖不足,数量多时需要语义召回、去重、质量评分和版本管理。 5. 白名单建议不能由模型直接生效,必须经过真实 Schema 对齐、查询预检和人工审核。 6. 缺少稳定评测集,无法量化生成正确率、执行正确率、答案一致性和回归变化。 ## 二、本轮落地优化 ### 0. 实体链接与增强元数据 - 从问题中抽取引号实体及“号、船、队、任务、阶段、事件、机构”等领域实体短语,要求模型把它们落到已授权的 `name/title/code` 等真实属性。 - SQL Schema Prompt 增加 JDBC 外键连接路径,避免模型猜测 JOIN。 - Neo4j 接入画像增加索引、约束、Label 节点规模。 - Few-shot 记录 Schema 版本;Schema 变化后自动取消审核并等待复审。 ### 1. 拓扑感知业务子图 新的选择流程: ```text 业务意图/用户问题 → 向量匹配 Label 与 Relationship 种子 → 在已授权 Schema 内筛选 → 按关系端点扩展相邻 Label → 形成连通业务子图 → 再交给 Schema Linker 与 LLM ``` 它解决了“选中了任务和队伍,却没有选中连接二者的关系”问题。白名单候选和运行时大型 Schema 裁剪共用同一拓扑选择逻辑。 ### 2. 向量化 Few-shot 召回 已审核案例不再只按字面重合排序。系统优先对当前问题与候选问题做本地向量相似度排序,Embedding Bridge 不可用时才退回词法相似度。Prompt 仍只加入最相关的少量案例,避免案例过多稀释约束。 ### 3. Few-shot 候选预检 治理生成的 SQL/Cypher 在进入待审核案例库前执行: - SQL:只读检查与数据库 `EXPLAIN`。 - Cypher:写操作拦截、真实 Label/Relationship/Property 校验、最大深度检查和 Neo4j `EXPLAIN`。 导入接口返回通过和拒绝数量及拒绝原因。只有通过预检的案例才能进入人工审核阶段。 ### 4. 图数据库接入成熟度评估 新增: ```http GET /api/rag/capabilities/GRAPH/{sourceId}/readiness ``` 返回 Label、关系模式、关系类型、Property、孤立 Label、语义目录覆盖、已审核 Few-shot 数量、成熟度评分和整改建议。 ## 三、高准确率 Text-to-SQL 方法 推荐链路: 1. 发现表、字段、类型、备注、主键、外键、索引和方言。 2. 建立业务术语到表字段的语义目录。 3. 识别问题中的指标、维度、过滤条件、时间范围和排序要求。 4. 先生成逻辑查询计划,再生成 SQL。 5. 只向模型提供相关且授权的表及必要连接路径。 6. 召回同方言、同问题类型的已验证 Few-shot。 7. 静态校验表字段、只读操作、聚合和行数限制。 8. 执行 `EXPLAIN`;仅允许一次基于错误信息的修复。 9. 执行后检查结果形状和空结果,只有返回有效证据的查询才进入动态案例库。 后续应补充主外键发现、枚举值字典、时间字段识别和结果语义校验。 ## 四、高准确率 Text-to-Cypher 方法 拿到一个新图数据库时,建议严格执行以下过程。 ### 第一步:结构盘点 - 读取所有 Label、Relationship、方向和 Property 类型。 - 读取唯一约束、索引、全文索引和向量索引。 - 统计 Label 节点数、关系基数、孤立节点类型和高频路径。 - 识别名称、编码、状态、时间、坐标等实体关键属性。 ### 第二步:语义画像 - 为 Label、Relationship、Property 建立业务说明和同义词。 - 将 Schema、说明和连接端点向量化。 - 对敏感属性建立禁止暴露策略。 - 将技术图谱拆成若干可解释的业务子图。 ### 第三步:问法体系 至少覆盖五类基准问题: 1. 单节点查找。 2. 属性过滤与排序。 3. 聚合统计。 4. 一跳关系查询。 5. 多跳路径与因果链查询。 每类生成若干 Cypher,经过 Schema Validator 和 Neo4j `EXPLAIN` 后进入待审核案例库。 ### 第四步:运行时生成 - 先做实体识别和实体值链接。 - 通过语义种子和关系端点形成连通子图。 - 从已审核案例中向量召回相同问法。 - 要求模型只返回查询,不返回解释。 - 校验 Label、关系、属性、方向、深度、返回形状和写操作。 - `EXPLAIN` 失败后最多修复一次。 - 查询成功后检查是否返回节点、关系或路径证据。 ### 第五步:持续评测 为每个图数据库保存固定问题集,至少记录: - Schema linking Recall@K。 - Cypher 语法通过率。 - `EXPLAIN` 一次通过率。 - 执行成功率。 - 结果集正确率。 - 路径/实体覆盖率。 - 平均耗时和 P95。 - 修复率、空结果率和越权拦截率。 ## 五、智能白名单和 Few-shot 的安全原则 智能化不等于让模型直接修改生产权限。正确状态机应为: ```text 自动发现 → 智能推荐 → 真实 Schema 对齐 → EXPLAIN 验证 → 人工审核 → 版本化发布 → 监控与回滚 ``` 自动学习案例也必须是未审核状态。建议后续增加质量分、来源、Schema 版本、执行次数、最近成功时间和失效检测;Schema 变化后自动将受影响案例标记为待复审。 ## 六、下一阶段优先级 1. 实体值链接与属性值字典。 2. Neo4j 索引、约束、基数和高频路径发现。 3. SQL 主外键和连接路径发现。 4. 白名单/Few-shot 版本、发布、回滚及 Schema 变更失效机制。 5. 固定评测集和自动回归看板。 6. 生成逻辑计划与结果语义校验。 批量执行评测可调用: ```http POST /api/rag/evaluation/run ``` 请求包含 `knowledgeBaseId` 与 `cases`;每个案例提供 `question`、可选 `expectedSource`。响应返回通过率、平均耗时、证据数和逐题诊断。