Files
ai-g3sb-backman2.0/tech_architecture.md
T
2026-04-14 10:28:22 +08:00

243 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Text2SQL 算法技术方案
## 算法架构概述
Text2SQL 是一个将自然语言转换为 SQL 查询语句的智能算法系统,采用多智能体协作架构,结合向量检索和大语言模型技术,实现高效准确的 SQL 生成。
## 智能体组成
Text2SQL 系统由以下三个核心智能体组成:
| 智能体名称 | 主要职责 | 核心功能 |
| ------------- | ------ | ------------------------ |
| Schema Linker | 表选择 | 向量检索粗筛、LLM 精筛、外键扩展 |
| SQL Generator | SQL 生成 | Few-shot 示例增强、LLM 生成 SQL |
| Validator | SQL 验证 | 程序验证、库执行探针(0/1/-1)、LLM 语义验证、结果评估 |
这些智能体协同工作,形成完整的自然语言到 SQL 的转换流程。
## 核心算法流程
```mermaid
flowchart TD
subgraph 输入层
A[自然语言问题]
end
subgraph 核心处理层
A --> B[意图分类
Dialog Classifier]
B -->|非查询意图| C[返回对话回复]
subgraph "智能体 1: Schema Linker"
D[表选择]
D1[向量检索粗筛
SchemaIndexer]
D2[LLM 精筛
DeepSeek]
D3[外键扩展
关联表处理]
D --> D1
D1 --> D2
D2 --> D3
end
B -->|查询意图| D
subgraph "智能体 2: SQL Generator"
E[SQL 生成]
E1[Few-shot 示例增强]
E2[LLM 生成 SQL
DeepSeek]
E --> E1
E1 --> E2
end
D3 --> E
subgraph "智能体 3: Validator"
F[SQL 验证]
F1[程序验证
语法检查]
F1b[数据库试执行
行列探针 0/1/-1]
F2[LLM 语义验证
未探针时]
F3[结果评估]
F --> F1
F1 --> F1b
F1b --> F2
F2 --> F3
end
E2 --> F
F3 -->|验证通过| H[返回有效 SQL]
F3 -->|验证失败| I[重试逻辑
最多 max_retry 次]
I -->|重试| E
end
subgraph 数据层
J[Schema 管理
SchemaManager]
K[向量数据库
Chroma]
L[Few-shot 示例库
JSONL]
M[DeepSeek API
大语言模型]
N[业务数据库
database_url]
J --> D
K --> D1
L --> E1
M --> D2
M --> E2
M --> F2
N --> F1b
end
```
## 详细算法流程说明
### 1. 意图分类
- **Dialog Classifier**:对用户输入的自然语言进行意图分类
- **分类结果**:非查询意图直接返回对话回复,查询意图进入 SQL 生成流程
### 2. Schema Linker 算法
- **向量检索粗筛**:使用 `SchemaIndexer` 对用户问题进行向量检索,获取相关表的候选列表
- 利用预训练的嵌入模型将表名和描述转换为向量
- 使用 Chroma DB 进行相似度搜索
- 返回 top-k 个最相关的表
* **LLM 精筛**:调用 DeepSeek 模型对候选表进行精筛,选择最相关的表
- 构造包含表名和描述的提示
- 让 LLM 基于用户问题选择最相关的表
* **外键扩展**:自动添加与选中表相关的关联表,确保查询完整性
- 分析表之间的外键关系
- 自动添加被引用和引用当前表的关联表
### 3. SQL Generator 算法
- **Few-shot 示例增强**:根据用户问题从示例库中选择相似的示例,增强 SQL 生成质量
- 计算用户问题与示例库中问题的相似度
- 选择 top-k 个最相似的高质量示例
- 将示例注入到提示中,指导 SQL 生成
- **LLM 生成 SQL**:调用 DeepSeek 模型,根据选中的表结构和示例生成 SQL 语句
- 构造包含表结构、用户问题和示例的提示
- 指导 LLM 生成符合特定 SQL 方言的语句
- 清理和规范化生成的 SQL
### 4. Validator 算法
- **程序验证**:检查 SQL 语法是否正确,表和列是否存在于 Schema 中,是否包含危险操作
- 使用 sqlglot 进行语法检查
- 验证表和列是否存在于 Schema 中
- 检查是否包含危险操作(如 DROP、DELETE 等)
- **数据库试执行(探针)**:在程序验证全部通过后,于已配置的业务库上对 SQL 做只读试执行,结果用单一状态码表示,**不把具体行列数据交给 Validator LLM**:
- **1**:执行成功,且**有返回行或有返回列**(列名或数据行至少其一非空)→ **跳过** Validator 的语义审核 LLM,**直接将 SQL 交付用户**
- **0**:执行成功,但**既无列也无行** → 仍交付 SQL,**跳过** Validator 语义审核 LLM,另调 LLM 生成简短中文说明(可能原因 + 请用户补充条件),随响应一并返回
- **-1**:执行失败 → 视为本次 SQL 不可用,**不交付**,进入重试;**不调用** Validator 语义审核 LLM
- 未配置 `database_url` 时跳过探针(可选告警),此时走 **LLM 语义验证** 作为兜底
- **LLM 语义验证**:在未命中上述探针结果(即未配置库、未执行探针)时调用 DeepSeek,验证 SQL 语义是否符合用户意图
- 构造包含 SQL、表结构和用户问题的提示
- 让 LLM 评估 SQL 是否正确回答了用户问题
- 收集错误和警告信息
- **结果评估**:验证通过则返回有效 SQL,失败则进入重试逻辑
- 最多重试 max\_retry 次
- 每次重试使用相同的表结构,但重新生成 SQL
### 5. 数据层支持
- **Schema 管理**:管理数据库表结构和元数据
- 从 JSON 文件加载表结构
- 提供表和列的查询接口
- 分析表之间的外键关系
- **向量数据库**:存储表和列的向量表示,用于快速检索
- 使用 Chroma DB 存储向量
- 支持增量更新和查询
- **Few-shot 示例库**:存储高质量的自然语言到 SQL 的示例
- 从 JSONL 文件加载示例
- 支持基于相似度的示例检索
- **DeepSeek API**:提供大语言模型能力,用于表选择、SQL 生成和验证
- 调用 DeepSeek 聊天模型
- 支持不同的模型参数配置
## 技术栈
| 类别 | 技术/库 | 用途 |
| ------ | ------------ | ----------- |
| 编程语言 | Python | 算法实现 |
| LLM | DeepSeek API | 提供大语言模型能力 |
| 向量检索 | Chroma DB | 存储和检索表的向量表示 |
| SQL 处理 | sqlglot | SQL 语法解析和验证 |
| 环境管理 | dotenv | 管理环境变量 |
## 算法特点
1. **多智能体协作**:Schema Linker、SQL Generator、Validator 三个智能体协同工作,各负责专门任务,形成完整的处理流程
2. **向量检索增强**:Schema Linker 使用向量数据库快速筛选相关表,提高表选择效率
3. **Few-shot 学习**:SQL Generator 利用示例库增强 SQL 生成质量,学习最佳实践
4. **多层验证**:程序校验 + 库上探针;探针为 1/0/-1 时不再走 Validator 语义 LLM(1 直接交付、0 附带无数据说明、-1 重试),未配置库时仍以 LLM 语义验证兜底
5. **自动关联表扩展**:Schema Linker 通过外键关系自动扩展相关表,提高查询完整性
6. **可配置性**:支持多种配置参数,如温度、最大重试次数、向量检索开关等,适应不同场景需求
## Few-shot 学习详细说明
### 概念介绍
Few-shot 学习是一种机器学习方法,指通过少量示例来指导模型学习和执行任务。与传统的监督学习需要大量标注数据不同,Few-shot 学习仅需提供少量(通常为个位数)的示例,就能让模型理解任务的模式和要求。
### 在 Text2SQL 系统中的应用
在 Text2SQL 系统中,Few-shot 学习主要应用于 SQL Generator 智能体,具体流程如下:
1. **示例库构建**:系统维护一个存储高质量自然语言到 SQL 示例的库,从 JSONL 文件加载。这些示例包含各种类型的 SQL 查询场景,如简单查询、复杂连接、聚合操作等。
2. **相似度匹配**:当用户提出自然语言问题时,系统会计算该问题与示例库中问题的语义相似度。
3. **示例选择**:基于相似度排序,选择最相关的 top-k 个高质量示例。
4. **提示增强**:将这些示例注入到给大语言模型的提示中,指导模型生成更准确的 SQL 语句。
5. **生成指导**:模型参考示例的结构和风格,结合用户问题和表结构,生成符合要求的 SQL 语句。
### 技术实现
- **示例存储**:使用 JSONL 格式存储示例,每条示例包含自然语言问题和对应的 SQL 语句。
- **相似度计算**:利用预训练的嵌入模型将问题转换为向量,计算向量相似度。
- **示例选择**:根据相似度得分选择最相关的示例。
- **提示构造**:将选中的示例与用户问题、表结构一起构造提示,确保模型能理解任务要求。
### 优势
1. **减少数据需求**:不需要大量的标注数据,仅需少量高质量示例。
2. **提高生成质量**:通过示例指导,模型能生成更符合特定场景的 SQL 语句。
3. **学习最佳实践**:示例库可以包含领域专家编写的高质量 SQL,使模型学习到最佳实践。
4. **适应不同场景**:通过扩展示例库,可以适应不同领域和复杂度的 SQL 生成需求。
5. **灵活性**:可以根据具体应用场景调整示例库,提高系统的适应性。
### 应用效果
通过 Few-shot 学习,Text2SQL 系统能够:
- 处理更复杂的查询场景
- 生成更符合用户意图的 SQL 语句
- 减少生成错误
- 提高系统的泛化能力
## 性能优化
1. **向量索引预构建**:提前构建向量索引,加速首次查询
2. **缓存机制**:缓存常见查询的结果,提高响应速度
3. **并行处理**:对多个查询进行并行处理,提高系统吞吐量
4. **模型调优**:调整 LLM 参数,平衡生成质量和速度
## 扩展性
1. **支持多种数据库**:通过配置支持不同的 SQL 方言
2. **可插拔的 LLM**:支持替换不同的大语言模型
3. **自定义示例库**:可根据特定领域扩展示例库
## 总结
Text2SQL 算法通过多智能体协作、向量检索和大语言模型技术,实现了从自然语言到 SQL 的高效准确转换。算法流程清晰,逻辑完善,具有良好的可扩展性和可配置性,能够满足不同场景下的 SQL 生成需求。