【AI问数·技术】四维RAG体系深度拆解:Schema/Knowledge/Few-shot/Context
RAG(检索增强生成)是NL2SQL准确率从60%跃升到95%的核心技术。但"RAG"不是一个单一技术,而是一个多维度的知识注入体系。本文深度拆解鲲溟智能的四维RAG架构——Schema RAG、Knowledge RAG、Few-shot RAG、Context RAG,从原理、数据结构、检索策略到工程实现,逐一讲透每个维度的技术内核。
📖 导读
为什么通用大模型直接生成SQL的准确率只有60-70%,而加入RAG后能提升到95%+?
答案在于:大模型懂"语法",但不懂"你的数据"。 它不知道你的数据库里"销售额"存在哪个字段、"华东区"对应什么编码、"客单价"的计算口径是含不含税。RAG的本质,就是在生成SQL之前,把"你的数据知识"精准注入给大模型。
但"注入什么知识"大有讲究——注入太多会干扰生成,注入太少又不够用,注入不精准反而误导。鲲溟智能的四维RAG体系,正是解决"注入什么、注入多少、何时注入"的系统性方案。
关键词:RAG、NL2SQL、Schema Linking、知识图谱、Few-shot、上下文管理、鲲溟智能
一、RAG在NL2SQL中的角色
1.1 为什么NL2SQL需要RAG?

1.2 四维RAG总览

二、Dimension 1:Schema RAG
2.1 解决什么问题?
核心问题:在几百张表、几千个字段中,精准找到与用户问题相关的表和字段。
一个中型企业的数据仓库可能有200+张表、3000+个字段。如果把完整Schema全部塞给大模型:①超出上下文窗口;②大量无关信息干扰生成。Schema RAG的目标是只注入相关的5-15张表和20-50个字段。
2.2 数据结构
# Schema元数据结构(简化示意)
class TableSchema:
table_name: str # "sales_order"
description: str # "销售订单主表,记录所有客户订单"
columns: List[Column] # 字段列表
primary_key: str # "order_id"
foreign_keys: List[FK] # 外键关系
tags: List[str] # ["销售", "订单", "收入"]
sample_values: Dict # 各字段的示例值
class Column:
name: str # "net_amount"
type: str # "DECIMAL(12,2)"
description: str # "净销售额(含税,未剔除退货)"
business_name: str # "净销售额"
synonyms: List[str] # ["销售额", "营收", "收入"]
is_metric: bool # True(是度量字段)
is_dimension: bool # False
formula: str # "SUM(net_amount) WHERE is_return=0"
2.3 检索策略

2.4 工程要点
| 要点 | 实现方式 | 效果 |
|---|---|---|
| 字段描述质量 | 人工+AI辅助生成,定期审核 | 召回准确率+15% |
| 同义词维护 | 从用户查询日志自动挖掘 | 覆盖口语化表达 |
| 向量索引更新 | Schema变更时增量更新 | 保持时效性 |
| 多表关联推理 | 图数据库存储表关系 | 支持3+表JOIN |
| 示例值注入 | 每个字段附带3-5个示例值 | 帮助理解字段含义 |
三、Dimension 2:Knowledge RAG
3.1 解决什么问题?
核心问题:理解业务术语、指标口径和默认规则。
"销售额"在不同企业含义不同:是GMV还是净收入?含不含税?含不含退货?"华东区"包含哪些省份?"大客户"的标准是什么?这些业务知识不在数据库Schema里,需要额外的知识库来承载。
3.2 知识分类

3.3 检索与注入
# Knowledge RAG检索流程(简化示意)
class KnowledgeRetriever:
def retrieve(self, question, entities):
knowledge_items = []
# 1. 术语匹配:识别问题中的业务术语
for term in self.extract_terms(question):
matched = self.term_index.search(term)
knowledge_items.extend(matched)
# 2. 口径匹配:识别涉及的指标
for metric in entities['metrics']:
caliber = self.caliber_db.get(metric)
knowledge_items.append(caliber)
# 3. 规则匹配:加载适用的默认规则
rules = self.rule_engine.match(
metrics=entities['metrics'],
dimensions=entities['dimensions']
)
knowledge_items.extend(rules)
# 4. 编码映射:维度值→SQL条件
for dim_value in entities['dim_values']:
mapping = self.dim_mapping.get(dim_value)
knowledge_items.append(mapping)
# 5. 去重+排序+截断(避免注入过多)
return self.rank_and_truncate(knowledge_items, max_items=10)
3.4 知识库运营
| 运营动作 | 频率 | 负责人 | 来源 |
|---|---|---|---|
| 新术语录入 | 按需 | 数据分析师 | 业务部门反馈 |
| 口径变更更新 | 按需 | 数据治理团队 | 财务/业务变更 |
| 规则审核 | 月度 | 数据治理团队 | 错误case分析 |
| 行业知识补充 | 季度 | 产品团队 | 行业研究 |
| 自动挖掘 | 每日 | AI系统 | 用户查询日志 |
四、Dimension 3:Few-shot RAG
4.1 解决什么问题?
核心问题:给大模型"参考答案",让它学会"你的SQL写法"。
同一个查询意图,SQL可以有多种写法。Few-shot示例让大模型学习:①企业偏好的写法;②复杂查询的正确模式;③特殊业务的处理逻辑。
4.2 示例库结构
# Few-shot示例结构
class SQLExample:
question: str # "上个月各区域销售额排名"
sql: str # "SELECT r.name, SUM(s.amount) ..."
explanation: str # "按区域分组,汇总销售额,降序排列"
difficulty: str # "medium"
tags: List[str] # ["销售", "区域", "排名", "聚合"]
embedding: Vector # 问题的向量表示(用于相似度检索)
verified: bool # 是否经过人工验证
usage_count: int # 被引用次数
success_rate: float # 引用后SQL正确率
4.3 检索策略

4.4 示例库建设

五、Dimension 4:Context RAG
5.1 解决什么问题?
核心问题:理解多轮对话中的指代、省略和修改。
第1轮:"上个月华东区销售额多少?" → 正常查询
第2轮:"华南呢?" → 省略了"销售额"和"上个月"
第3轮:"按产品线拆分看看" → 省略了所有条件,只要改GROUP BY
第4轮:"去掉华南,加上西南" → 修改WHERE条件
第5轮:"改成按季度看" → 修改时间粒度
没有Context RAG,每轮都是"全新问题",无法理解"华南呢?"是什么意思。
5.2 上下文管理
# Context RAG数据结构
class ConversationContext:
session_id: str
turns: List[Turn]
current_state: QueryState # 当前查询的完整语义状态
class QueryState:
metrics: List[str] # 当前指标 ["销售额"]
dimensions: List[str] # 当前维度 ["区域"]
filters: List[Filter] # 当前过滤条件
time_range: TimeRange # 当前时间范围
order_by: str # 当前排序
limit: int # 当前限制
last_sql: str # 上一轮生成的SQL
last_result: DataFrame # 上一轮的结果(用于追问)
# 上下文解析逻辑
class ContextResolver:
def resolve(self, new_question, context):
# 1. 指代消解
# "华南呢?" → 理解为"上个月华南区销售额多少?"
# 2. 省略补全
# "按产品线拆分" → 补全为"上个月华东区各产品线销售额"
# 3. 修改应用
# "去掉华南" → 修改filters,移除华南条件
# 4. 状态更新
# 更新QueryState,传递给下一轮
return resolved_full_question, updated_state
5.3 上下文窗口策略
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 完整保留 | 保留所有历史轮次 | 短对话(<5轮) |
| 滑动窗口 | 只保留最近3轮 | 长对话(>5轮) |
| 状态压缩 | 只保留QueryState,不保留原始对话 | 超长对话 |
| 话题切换检测 | 检测到新话题时重置上下文 | 话题跳转 |
六、四维协同:Prompt工程
6.1 最终Prompt结构

6.2 Token预算管理
| 维度 | 预算占比 | Token数(约) | 说明 |
|---|---|---|---|
| System Prompt | 10% | 400 | 角色定义+输出格式 |
| Schema RAG | 35% | 1,400 | 5-15张表的精简Schema |
| Knowledge RAG | 25% | 1,000 | 5-10条知识项 |
| Few-shot RAG | 20% | 800 | 2-3个示例 |
| Context RAG | 5% | 200 | 最近1-3轮上下文 |
| 用户问题+输出 | 5% | 200 | 问题+生成空间 |
| 总计 | 100% | ~4,000 | 控制在4K Token内 |
七、效果验证
7.1 消融实验
| 配置 | 综合准确率 | 说明 |
|---|---|---|
| 无RAG(纯LLM) | 62% | 基线 |
| +Schema RAG | 72% | +10% |
| +Knowledge RAG | 84% | +12% |
| +Few-shot RAG | 92% | +8% |
| +Context RAG(多轮) | 95.6% | +3.6%(多轮场景+5%) |
| 四维全开 | 95.6% | +33.6% |
7.2 各维度对不同查询类型的影响
| 查询类型 | 无RAG | +Schema | +Knowledge | +Few-shot | +Context |
|---|---|---|---|---|---|
| 简单查询 | 78% | 92% | 94% | 96% | 96% |
| 业务术语 | 45% | 55% | 90% | 93% | 93% |
| 复杂多表 | 52% | 72% | 78% | 92% | 92% |
| 模糊表达 | 48% | 58% | 72% | 85% | 88% |
| 多轮追问 | 35% | 45% | 55% | 65% | 92% |
关键发现:Knowledge RAG对业务术语查询贡献最大(+35pp),Context RAG对多轮追问贡献最大(+27pp)。
📌 本文要点回顾
- RAG是NL2SQL准确率从60%→95%的核心技术,本质是"在正确时间注入正确知识"
- Schema RAG(+10%):在几百张表中精准定位相关表和字段,多路召回+关联扩展
- Knowledge RAG(+12%):业务术语、指标口径、默认规则、维度编码——让AI"懂业务"
- Few-shot RAG(+8%):相似问题的正确SQL示例,让AI学会"你的写法"
- Context RAG(+5%,多轮+27%):指代消解、省略补全、修改应用——让多轮对话自然流畅
- 四维协同的关键是Token预算管理:4K Token内精准注入,不多不少
❓ FAQ
Q1:RAG的知识库需要人工维护吗?成本高不高?
A:初始建设需要人工投入(Schema描述、术语定义、口径规范),但后续运营主要靠AI自动化:①从用户查询日志自动挖掘新术语;②从错误case自动补充知识;③Schema变更时自动更新索引。鲲溟智能提供知识库管理工具,数据分析师即可完成日常维护,无需专业AI工程师。
Q2:不同行业/企业的RAG知识库差异大吗?
A:Schema RAG完全不同(每家企业数据库不同),Knowledge RAG部分通用(行业术语可复用)+部分定制(企业口径需定制),Few-shot RAG完全定制(每家SQL风格不同)。鲲溟智能预置了行业通用知识(汽车56条/金融48条/零售38条),企业只需补充自身特有的口径和规则。
Q3:RAG检索的延迟会影响用户体验吗?
A:不会。四维RAG检索总耗时控制在200ms以内(Schema 50ms + Knowledge 60ms + Few-shot 50ms + Context 40ms),加上LLM生成时间(1-3秒),用户感知总响应时间<5秒。检索使用向量数据库(Milvus/Qdrant)+缓存机制,高频查询直接命中缓存(<10ms)。
💬 互动话题:你在做NL2SQL或Text-to-SQL相关的工作吗?你在实践中遇到的最大挑战是什么——是Schema匹配、业务理解还是多轮对话?
欢迎在评论区分享你的NL2SQL技术实践!
本文作者:鲲溟智能 · 产品与解决方案部
鲲溟智能官网:www.trionesagent.com
下一篇预告:【AI问数·技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
作者:IT行者-何戈洲
出处:http://www.cnblogs.com/hegezhou_hot/
2007年大学毕业后便投入到计算机行业中,先后涉足(电信、电子商务、教育、医疗、工程建筑、项目管理、房产)等行业,目前有比较丰富的技术及行业经验,技术方面涉及(Java、Go、.NET、Python、设计模式、系统架构、PM管理流程、软件工程、敏捷开发、SOA、云计算、大数据、区块链、WF、SAAS等领域),结合业务可提供(EIP、ERP、HIS、B2B、B2C、B2B2C、CRM、OA、O2O等)业务及技术解决方案,随着时间的推移,目前已逐步转向管理方面,欢迎同行一起交流学习,个人平时爱好体育运动、音乐、旅游等,向往丰富多彩的生活旅程。如有问题或建议,请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过hegezhou_hot@163.com 联系我,非常感谢。
其他联系方式:
电话:13716055594
联系人:何戈洲
微信联系我:


浙公网安备 33010602011771号