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