Skip to content

feat: preserve complete metadata embeddings for tables and datasources - #1451

Merged
ulleo merged 4 commits into
mainfrom
feat/metadata-chunk-embeddings
Nov 9, 2026
Merged

ulleo merged 4 commits into
mainfrom
feat/metadata-chunk-embeddings

Conversation

@ulleo

@ulleo ulleo commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

Summary

宽表及大型数据源的元数据超过 embedding 模型输入上限时,尾部字段会被截断,无法参与召回。本次按实际 tokenizer 上限保存完整块集合,使所有已选表、字段参与表筛选和数据源预筛选。

元数据保存 / 启动 / 重新开启
  → 失效标记与有界后台补齐
  → 按 tokenizer 上限分块 → 校验完整块集合 → 原子发布
问数
  → 最大块相似度 → 既有表融合 / 数据源预筛选
  → 块集合缺失或过期时保留全部合法候选

新增独立内部存储及 schema-only 迁移;旧 embedding 字段保留,管理 DTO 不暴露新向量。后台使用单工作线程、分页扫描和有界合并队列,支持连续编辑、失败及重启恢复;模型、权重、候选数和权限边界保持原有配置。

Evidence

以下为本分支已有验证,本次提交补充测试时未重复执行产品测试;补充测试代码与已执行版本一致。

  • Before → After: 固定 110 条合成问题、真实本地模型与 PostgreSQL,表融合完整召回 109→110,表纯向量 89→108,数据源纯向量 98→110。纯向量仍有两条已知回归:“统计本月销售出库数量”“统计本月合同签订金额”。
  • PostgreSQL 集成测试 104 passed,强化的关闭开关夹具单项复验通过;迁移升级/降级/再升级通过。实际应用启动从旧结构自动迁移并后台补齐 100 表、3040 字段,启动不等待模型,重启不重复编码。
  • 默认测试 524 passed、111 skipped、9 failed;9 个 Excel 上传测试失败在相同环境的未修改 main 基线上复现。变更文件 Ruff 检查通过。
  • 用户反馈本地界面手工测试通过;未执行真实外部 LLM 关键词提取、完整 SQL 问数及镜像部署验收。
  • 依赖沿用已准备环境:Python 3.11.17、sentence-transformers 5.6.1、transformers 5.14.1、torch 2.13.0、sqlbot-xpack wheel 0.0.5.40,未更新依赖。

补充组合条件诊断:25 个候选中仅一个同时具备 A+B,11 个仅 A、11 个仅 B、2 个均无;固定取前 10、融合向量权重 0.4。4 组主题各含直接及同义表达,真实模型编码 5584 块,逐块确认没有截断,最大 128 tokens。

布局 表融合 表纯向量 数据源纯向量
A、B 同块,全部宽表 8/8 8/8 7/8
A、B 跨块,全部宽表 7/8 5/8 6/8
A、B 跨块,干扰表缩短 5/8 0/8 5/8

共 51 passed、21 failed,失败为正确候选未进入前 10,保留为明确的召回限制。同块改跨块新增 5 项漏选;精确字段关键词融合三种布局均为 4/4,同义关键词更易失败。这是人工关键词、合成干扰项的压力对照,不代表生产失败率,也不能将全部失败视为相对旧版本的回归。

可复现用例:backend/tests/test_metadata_conjunction_evaluation.py。从 backend 目录,在已授权的独立 PostgreSQL 与本地模型环境,显式设置 SQLBOT_RUN_METADATA_CONJUNCTION=1、SQLBOT_TEST_DATABASE_URL、SQLBOT_DB_URL 后执行 python -m pytest -q tests/test_metadata_conjunction_evaluation.py;可设置 SQLBOT_METADATA_CONJUNCTION_REPORT 输出逐项 JSON。默认跳过该文件的 72 项诊断,不访问外部服务;它目前不是全绿的质量门槛。

Merge Danger

Door: two-way

新增存储不删除业务数据,但版本切换需协调后台写者与向量重建。升级先停止旧服务及后台写者,再启动新版本迁移和补齐;未承诺新旧版本滚动混跑。

Blast Radius: retrieval

影响表筛选、数据源预筛选与后台向量生成。补齐期间保留全部合法候选会增加上下文和耗时;最大块相似度仍可能漏选跨块组合条件,尤其同义表达及短干扰项场景,数据源纯向量同样受影响。该限制应作为后续召回优化的明确输入,本 PR 不宣称解决所有召回质量问题。

@ulleo
ulleo merged commit f10255b into main Nov 9, 2026
3 checks passed
@ulleo
ulleo deleted the feat/metadata-chunk-embeddings branch November 9, 2026 08:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant