介绍项目的召回、重排和 SQL 生成链路。
未标记
考查重点:元数据召回与 SQL 生成。问题召回表/字段/指标,重排合并补关联,构上下文生成SQL,校语法/口径后只读限时执行
本题目录
参考答案
核心回答
以电商问数为例,项目面向需要查询经营指标的业务用户。用户问“上月华北地区的销售额”,系统需要把“销售额”映射到确定的指标口径,把“华北”映射到真实字段取值,把“上月”换成明确时间区间,最后才能生成可执行的查询。
完整链路可以概括为:在授权范围内召回表、字段、指标和取值,精筛并补齐关联,生成 SQL,再经独立校验与受限执行返回结果。 召回负责不漏关键知识,重排负责把有限上下文留给当前问题真正需要的内容,SQL 生成负责组合查询逻辑。
召回与重排具体做什么
先由后端确定用户可见的数据源和元数据范围,再从问题中提取指标、维度、实体和时间。字段与指标描述适合语义检索;字段名称、别名和具体取值可以结合关键词检索;已审核的问句与 SQL 示例能提供写法参考。精确名称匹配和语义匹配可以互补,不必把所有知识都放进同一种索引。
合并时按稳定的表、字段或指标 ID 去重,保留来源和版本。重排可以采用专门的模型,也可以用规则或大模型精筛,但应看它是否改善下游查询正确性,不能仅凭文本相似度判断成功。筛选后还要补齐必需的连接键、关联路径和计算依赖:某张桥接表与问句字面上不相似,也可能是正确连接必需的。
如果两个“销售额”指标口径冲突,或业务上没有唯一确定的关联,应先澄清,不能让重排悄悄替用户决定。
从上下文到查询结果
给生成模型的上下文应包括选中的表字段、关联关系、指标公式与过滤条件、单位、时间边界、数据库方言和少量相关示例。字段取值只提供当前任务必要且允许披露的部分,不把整张表样本传给模型。
生成的 SQL 仍是候选。后端解析语句,检查对象与操作权限;在受控连接上检查语法、执行计划和资源预算;通过后以只读账号限时执行。校正后的 SQL 必须重新走相同检查,并限制校正次数。
返回前再核对结果粒度、单位、时间和异常规模,基于实际结果解释答案。追踪记录应能区分“没召回正确指标”“重排删掉了连接字段”“生成写错条件”和“执行超时”,这样优化才有针对性。
对应教程
- 《电商问数:SQL生成前的信息过滤与补全》:对应候选表字段、指标精筛,以及日期和数据库环境补全。
参考资料
- 国内:飞致云:数据源概览:采用字段类型、注释与表关联的组织方式,说明召回后必须保留的结构信息。
- 国内:飞致云:术语配置:采用标准术语与同义词映射,解释自然语言指标如何对齐业务概念。
- 国内:飞致云:SQL示例库:采用按数据源维护问句、
SQL与解释的示例组织方式,限定示例的适用范围。 - 国内:飞致云:智能问数常见问题:借鉴结构、术语、示例共同占用上下文的说明,解释精筛时要保留必要依赖并控制噪声。
- 国外:Yale University:Spider: A Large-Scale Human-Labeled Dataset:参考跨表结构与复杂查询组合,说明只看字段字面相似度不足以生成正确
SQL。 - 国外:PostgreSQL:Row Security Policies (PostgreSQL 18):采用数据库独立执行数据范围策略的原则,避免把生成上下文当成权限保障。
相关面经
1 篇多益网络
游戏后端开发工程师讲下你们项目完整的召回、重排、SQL生成链路