一、背景

随着企业数字化转型的深入,业务部门和管理层对数据洞察的需求日益增长。传统的数据分析方式依赖专业人员编写SQL或使用可视化工具,门槛较高,难以满足非技术人员快速获取数据支持的需求。为此,构建一个支持自然语言交互的“智能问数”系统成为提升数据服务效率的重要方向。

旨在打造一套面向业务用户的自然语言查询平台,使用户能够以日常语言提问,系统自动理解语义、解析意图、关联数据模型并生成准确的SQL查询,最终返回结构化结果。该系统通过融合大模型能力与知识增强技术,实现从“人找数据”到“数据主动服务”的转变。


二、整体架构设计

系统采用分层架构设计,分为场景层、平台层、大模型层与基础硬件层,形成完整的端到端智能问答闭环。

1. 场景层

  • 支持多种典型业务场景下的自然语言查询需求。
  • 典型输入包括:“3月份xx相关事件有多少?”、“最近一周客户投诉量趋势如何?”等。
  • 用户可直接输入问题,系统自动完成后续处理流程。

2. 平台层(核心功能模块)

(1)Agent平台 —— 知识问数工具链

作为系统的调度中枢,负责协调各子系统协同工作:

  • 接受问题:接收原始自然语言输入。
  • 对接RAG平台进行问题改写:结合上下文与领域知识优化表达。
  • 对接NL2SQL获取答案:调用下游组件生成执行SQL。
  • 答案返回:将查询结果以结构化形式反馈给用户。
  • 问题建议:基于当前问题推荐相似或扩展性问题。
  • 多轮对话:支持上下文理解,实现连续追问与澄清机制。
(2)NL2SQL平台

实现自然语言向SQL的转换,包含以下关键步骤:

  • 意图识别:判断用户是否为统计类、趋势类、对比类等问题。
  • 元数据检索:根据问题内容匹配相关表和字段信息。
  • SQL生成:基于DSL中间表示生成标准SQL语句。
  • 查询结果返回:执行SQL后返回结果集。
(3)RAG平台(Retrieval-Augmented Generation)

增强模型推理能力,提供精准的知识支撑:

  • 知识库:存储行业术语、分类体系、工单类别等结构化/半结构化知识。
  • 提示工程:设计高质量prompt模板,引导大模型输出更符合业务逻辑的结果。
(4)数据平台

保障数据质量与AI训练底座:

  • 数据治理:统一管理元数据、血缘关系、权限控制。
  • AI知识工程:构建可被大模型理解的知识图谱与语义映射。

3. 大模型层

  • 使用两个主流大模型作为核心推理引擎:
    • Deepseek R1满血版:用于文本理解、意图分析、实体抽取等任务。
    • Qwen-QwQ-32B:承担重排序(reranker)、问题改写、DSL转SQL等高阶任务。

4. 基础硬件层

  • 提供高性能计算资源支持:
    • 鲲鹏VM(10VM):部署轻量级服务及部分推理任务。
    • 昇腾910B(2卡):专用于大模型推理加速,保障响应速度与吞吐能力。

三、核心技术流程详解

整个智能问数流程遵循“理解 → 改写 → 检索 → 转换 → 执行 → 返回”的闭环路径。

步骤1:用户输入与初步处理

用户提出自然语言问题,例如:

“3月份xxx相关事件有多少?”

系统首先进行如下处理:

(1)意图识别

利用大模型分析问题类型(如计数、聚合、时间序列等),确定查询目标。

(2)问题改写

由于用户可能使用模糊表达或行业黑话,需先进行规范化处理:

  • 从RAG知识库中提取关键词替换规则(如“电驴”→“电动自行车”)。
  • 将时间词“3月份”转化为具体日期范围(如2024-03-01 至 2024-03-31)。
  • 利用大模型进一步润色问题,使其更贴近标准查询格式。

改写后示例:
“查询2024年3月期间,涉及‘电动自行车’的事件数量。”

步骤2:Schema Linking(表列匹配)

这是系统最关键的环节之一,确保自然语言能正确映射到数据库中的实际字段。

(1)实体切分与分类

调用大模型对改写后的句子进行实体识别,并划分为两类:

  • 指标类:如“数量”、“总数”、“平均值”等,对应SELECT中的聚合函数。
  • 维度类:如“时间”、“地区”、“类别”等,对应GROUP BY或WHERE条件。
(2)向量化召回(三阶段策略)

为了避免单一召回导致漏检,引入多向量召回机制,共三个阶段:

表格

召回类型 方法说明
类型一 将所有指标实体合并成数组,进行批量向量召回(Top10)
类型二 对相邻实体两两组合,生成新实体组合进行召回(Top10)
类型三 将完整用户问题本身作为查询向量进行召回(Top10)

所有召回均使用同一嵌入模型 bge-m3 进行编码,保证一致性。

(3)去重与精排
  • 对上述三组召回结果分别进行去重,整合为候选列集合。
  • 使用 Qwen-QwQ-32B 作为重排序器(Reranker),构建Prompt如下:
请根据用户问题和候选列列表,评估每列的相关性分数,输出JSON格式:
[
  { "column": "event_count", "score": 0.95 },
  { "column": "event_date", "score": 0.87 }
]
  • 依据得分排序,选取TopN作为最终选中的列。
(4)选表与选列
  • 表选择:基于候选表的相关性评分,取最高分者作为主表。
  • 列选择:结合精排结果,确定参与查询的具体字段。

此过程即为 Schema Linking 的完整实现。

步骤3:SQL生成与执行

(1)Text2DSL2SQL 流程

为了提高SQL生成准确性,避免直接从自然语言生成复杂SQL带来的错误,采用两阶段转化:

  1. Text → DSL:将自然语言转化为内部定义的领域特定语言(Domain-Specific Language),例如:

     
    {
      "action": "count",
      "from": "events",
      "where": {
        "type": "electric_bike",
        "time_range": ["2024-03-01", "2024-03-31"]
      }
    }
  2. DSL → SQL:由大模型将DSL翻译为标准SQL语句:

    SELECT COUNT(*) 
    FROM events 
    WHERE type = 'electric_bike' 
      AND event_date BETWEEN '2024-03-01' AND '2024-03-31';
(2)执行SQL

将生成的SQL提交至数据库执行,获取结果集。

(3)结果返回

将查询结果以表格、图表等形式呈现给用户,并支持导出与分享。


四、关键技术亮点

表格

技术点 实现方式 优势
多向量召回 分别对指标、组合实体、原始问题进行召回 提升召回完整性,减少遗漏
大模型重排序 使用Qwen-QwQ-32B进行相关性打分 强化语义理解,提升匹配精度
RAG增强 结合行业术语库与工单分类文档 支持黑话识别与模糊匹配
DSL中间层 引入DSL作为过渡语言 解耦自然语言与SQL语法,降低生成误差
多轮对话支持 记录上下文状态,支持追问与澄清 提升用户体验与交互灵活性

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐