SuperAPI AI 工具集

rag-on-azure-sql

数据与分析

查看项目

更新于 10-16 00:31

技能介绍

用途:在 Azure SQL Database 上端到端搭建检索增强生成(RAG),明确有哪些表、何时写入什么、检索查询必须携带什么,以及如何验证其有效。资料基于 Azure SQL Database(General Purpose serverless,兼容级别 170)实测。

主要能力与要点:

  1. 维度先于架构确定。维度由模型决定,上限 1998,且即使空表也不能用 ALTER COLUMN 加宽;3072 维模型需在生成时请求更短向量。vector(n) 与向模型请求的维度必须一致,否则插入失败。
  2. 两张表:dbo.documents 为权威源,dbo.document_chunks 为派生块。块表需携带 tenant_id、ordinal、source_hash(HASHBYTES 去重键)、embed_model、embed_dims、embedded_at、embedding。chunk_id 需为聚集主键,否则无法创建向量索引。
  3. 分块:文本已在库内则在库内分块,来自文件则在应用侧分块;每次分块方式保持一致,保留 ordinal 以便取邻居。
  4. 分批可重启嵌入:用 UPDATE TOP (200) 循环,直到影响 0 行;向量与三个溯源列在同一语句写入。
  5. 向量索引在加载后创建,至少 100 行非空向量;度量在建时固定,检索须用同一度量。索引存在后 TRUNCATE 被拒绝。
  6. 检索:用 VECTOR_SEARCH 做相似度、租户过滤与排序;过滤条件必须放在搜索内部,且问题须用与语料相同的模型嵌入。
  7. 接地:传入块文本、文档标识与 ordinal 以便引用;允许模型回答“上下文不含答案”;不要把距离当置信度。
  8. 保持更新:源行变更时删除其块并重新分块;模型或分块方式变更时整体失效,需新增带溯源列、回填、切换、再删除旧列并重建索引。

限制:带向量索引的表不能创建安全策略(Msg 37579),因此块表无法有谓词,检索查询的 WHERE 子句就是全部边界,需当作安全代码测试;若必须有谓词,只能放弃向量索引(退化为暴力扫描)或拆分表。

校验:提供四项检查(溯源一致性、策略与向量索引互斥、索引版本、哈希一致性),可用 sqlcmd 非交互运行并保留输出。注意 -m-1 为 ODBC sqlcmd 指令,go-sqlcmd 1.x 在严重级别 10 时不打印消息号。

适用场景:在 Azure SQL Database 内构建带多租户过滤、可溯源、可验证的 RAG 流水线。具体模型调用与分块函数细节见配套技能文档,本资料未展开。