加入日志管理
This commit is contained in:
+259
-127
@@ -22,79 +22,123 @@ Text2SQL 系统由以下三个核心智能体组成:
|
||||
flowchart TD
|
||||
subgraph 输入层
|
||||
A[自然语言问题]
|
||||
Actx[可选会话上文
|
||||
dialog_context]
|
||||
end
|
||||
|
||||
|
||||
subgraph 核心处理层
|
||||
A --> B[意图分类
|
||||
Dialog Classifier]
|
||||
B -->|非查询意图| C[返回对话回复]
|
||||
|
||||
subgraph "智能体 1: Schema Linker"
|
||||
D[表选择]
|
||||
D1[向量检索粗筛
|
||||
SchemaIndexer]
|
||||
D2[LLM 精筛
|
||||
DeepSeek]
|
||||
D3[外键扩展
|
||||
关联表处理]
|
||||
A --> B[意图分类 classify_dialog]
|
||||
Actx --> B
|
||||
B -->|conversation| C[直接返回引导性中文回复]
|
||||
B -->|text2sql| N0[问句归一 normalize_nl_question
|
||||
TRANSLATE_EN_TO_ZH=true 默认开启]
|
||||
N0 --> D0[合并上文用于检索选表
|
||||
_merge_dialog_for_model]
|
||||
|
||||
subgraph "Schema Linker 表选择模块"
|
||||
D[表选择流程]
|
||||
D1[向量粗筛 _coarse_filter
|
||||
SchemaIndexer Chroma 或全表降级]
|
||||
D2[LLM 精筛 _llm_select_tables
|
||||
select_tables]
|
||||
D2b[经纪商维度表优先
|
||||
_prioritize_broker_tables]
|
||||
D3[外键双向扩展
|
||||
_expand_relations]
|
||||
D4[生成紧凑 Schema 字符串
|
||||
to_compact_string]
|
||||
D --> D1
|
||||
D1 --> D2
|
||||
D2 --> D3
|
||||
D2 --> D2b
|
||||
D2b --> D3
|
||||
D3 --> D4
|
||||
end
|
||||
|
||||
B -->|查询意图| D
|
||||
|
||||
subgraph "智能体 2: SQL Generator"
|
||||
E[SQL 生成]
|
||||
E1[Few-shot 示例增强]
|
||||
E2[LLM 生成 SQL
|
||||
DeepSeek]
|
||||
|
||||
D0 --> D
|
||||
|
||||
subgraph "SQL Generator SQL生成模块"
|
||||
E[SQL 生成 _generate_sql]
|
||||
E1[Few-shot 示例增强 FewShotSelector
|
||||
Chroma 或 JSONL FEWSHOT_USE_CHROMA]
|
||||
E2[LLM chat 生成
|
||||
temperature=0.0 top_p=1.0]
|
||||
E3[sqlglot 方言归一
|
||||
normalize_sql_for_dialect]
|
||||
E --> E1
|
||||
E1 --> E2
|
||||
E2 --> E3
|
||||
end
|
||||
|
||||
D3 --> E
|
||||
|
||||
subgraph "智能体 3: Validator"
|
||||
F[SQL 验证]
|
||||
F1[程序验证
|
||||
语法检查]
|
||||
F1b[数据库试执行
|
||||
行列探针 0/1/-1]
|
||||
F2[LLM 语义验证
|
||||
未探针时]
|
||||
F3[结果评估]
|
||||
|
||||
D4 --> E
|
||||
|
||||
subgraph "Validator SQL验证模块 _validate_sql"
|
||||
F[程序校验]
|
||||
F1[语法验证 sqlglot]
|
||||
F1a[表列一致性验证 SchemaManager]
|
||||
F1b[危险操作检查 check_dangerous_operations]
|
||||
F1c[T-SQL 字面量规则检查
|
||||
check_no_cjk_in_sql_string_literals]
|
||||
F1d[库探针 probe_sql_execution_status_ex
|
||||
需 database_url 配置]
|
||||
F2[LLM 语义验证 validate_sql
|
||||
仅探针为 None 时调用]
|
||||
F0a[探针 1 交付说明
|
||||
sql_probe_success_delivery_message]
|
||||
F0b[探针 0 无数据说明
|
||||
empty_result_user_feedback]
|
||||
F --> F1
|
||||
F1 --> F1b
|
||||
F1b --> F2
|
||||
F2 --> F3
|
||||
F1 --> F1a
|
||||
F1a --> F1b
|
||||
F1b --> F1c
|
||||
F1c -->|无程序错误| F1d
|
||||
F1c -->|有程序错误| I[未通过 max_retry 内重试]
|
||||
F1d -->|探针 None| F2
|
||||
F1d -->|探针 1| F0a
|
||||
F1d -->|探针 0| F0b
|
||||
F1d -->|探针 -1| I
|
||||
F2 -->|LLM 报错| I
|
||||
F2 -->|通过| H[GenerationResult 有效 SQL]
|
||||
F0a --> H
|
||||
F0b --> H
|
||||
end
|
||||
|
||||
E2 --> F
|
||||
F3 -->|验证通过| H[返回有效 SQL]
|
||||
F3 -->|验证失败| I[重试逻辑
|
||||
最多 max_retry 次]
|
||||
I -->|重试| E
|
||||
|
||||
E3 --> F
|
||||
|
||||
I --> R[重试回合]
|
||||
R --> R1[extract_tables 合并上次SQL引用的表]
|
||||
R1 --> R2[外键再扩展 _expand_relations]
|
||||
R2 --> R3[重新生成紧凑 Schema to_compact_string]
|
||||
R3 -->|下一 attempt| E
|
||||
end
|
||||
|
||||
|
||||
subgraph 数据层
|
||||
J[Schema 管理
|
||||
SchemaManager]
|
||||
K[向量数据库
|
||||
Chroma]
|
||||
L[Few-shot 示例库
|
||||
JSONL]
|
||||
M[DeepSeek API
|
||||
大语言模型]
|
||||
N[业务数据库
|
||||
J[SchemaManager
|
||||
加载 Schema 元数据]
|
||||
K[Chroma 持久化
|
||||
schema 向量索引 SchemaIndexer]
|
||||
K2[Few-shot 向量库或 JSONL
|
||||
FewShotSelector]
|
||||
Emb[嵌入模型
|
||||
OpenAI 兼容 Embeddings API]
|
||||
M[DeepSeek LLM
|
||||
统一接口 deepseek.chat/select_tables
|
||||
/validate_sql 等方法]
|
||||
N[业务库 SQLAlchemy
|
||||
database_url]
|
||||
J --> D
|
||||
J --> D1
|
||||
J --> F1a
|
||||
Emb --> D1
|
||||
Emb --> E1
|
||||
K --> D1
|
||||
L --> E1
|
||||
K2 --> E1
|
||||
M --> N0
|
||||
M --> D2
|
||||
M --> E2
|
||||
M --> F2
|
||||
N --> F1b
|
||||
M --> F0a
|
||||
M --> F0b
|
||||
M --> B
|
||||
N --> F1d
|
||||
end
|
||||
```
|
||||
|
||||
@@ -103,66 +147,115 @@ database_url]
|
||||
### 1. 意图分类
|
||||
|
||||
- **Dialog Classifier**:对用户输入的自然语言进行意图分类
|
||||
- **分类结果**:非查询意图直接返回对话回复,查询意图进入 SQL 生成流程
|
||||
- **分类模式**:支持 `rules`(仅规则)和 `hybrid`(混合)两种模式
|
||||
- `rules` 模式:仅使用关键词和短语规则,无 LLM 调用
|
||||
- `hybrid` 模式(默认):明显查数词/寒暄/元问题走规则快速返回;其余交 LLM 判断
|
||||
- **分类结果**:非查询意图(conversation)直接返回对话回复,查询意图(text2sql)进入 SQL 生成流程
|
||||
- **规则关键词**:包含查数词(查、查询、统计、汇总)、业务词(余额、交易、账户、持仓)、寒暄词(元问题、致谢等)
|
||||
|
||||
### 2. Schema Linker 算法
|
||||
### 2. Schema Linker 表选择模块
|
||||
|
||||
- **向量检索粗筛**:使用 `SchemaIndexer` 对用户问题进行向量检索,获取相关表的候选列表
|
||||
- 利用预训练的嵌入模型将表名和描述转换为向量
|
||||
- **问句归一化(可选)**:`normalize_nl_question_for_text2sql`
|
||||
- 将用户中英文问题归一为标准中文(默认开启,`TRANSLATE_EN_TO_ZH=true`)
|
||||
- 使同一语义的中英文表述对齐,保证 SQL 一致性
|
||||
- 使用 LLM temperature=0 贪心解码
|
||||
|
||||
- **对话上文合并**:`_merge_dialog_for_model`
|
||||
- 拼接上文与当前问句,控制总长度(默认 4000 字符用于检索,6000 字符用于选表)
|
||||
- 优先保留当前问句完整
|
||||
|
||||
- **向量检索粗筛**:`_coarse_filter` → `SchemaIndexer`
|
||||
- 使用嵌入模型将表结构转换为向量
|
||||
- 使用 Chroma DB 进行相似度搜索
|
||||
- 返回 top-k 个最相关的表
|
||||
- 返回 top-k 个最相关的候选表
|
||||
- 可配置是否启用向量检索(`use_vector_search`)
|
||||
|
||||
* **LLM 精筛**:调用 DeepSeek 模型对候选表进行精筛,选择最相关的表
|
||||
- 构造包含表名和描述的提示
|
||||
- 让 LLM 基于用户问题选择最相关的表
|
||||
* **外键扩展**:自动添加与选中表相关的关联表,确保查询完整性
|
||||
- 分析表之间的外键关系
|
||||
- 自动添加被引用和引用当前表的关联表
|
||||
- **LLM 精筛**:`_llm_select_tables` → `select_tables`
|
||||
- 构造包含候选表名和注释的提示
|
||||
- 调用 DeepSeek 模型选择最相关的表
|
||||
- 返回相关表列表和选择理由
|
||||
|
||||
### 3. SQL Generator 算法
|
||||
- **经纪商维度表优先(可选)**:`_prioritize_broker_tables`
|
||||
- 问题涉及对手方/经纪商时,优先纳入 `TSBBrokerContract` 与 `MCBroker`
|
||||
- 避免仅选中报表视图却无 BrokerID
|
||||
|
||||
- **Few-shot 示例增强**:根据用户问题从示例库中选择相似的示例,增强 SQL 生成质量
|
||||
- 计算用户问题与示例库中问题的相似度
|
||||
- 选择 top-k 个最相似的高质量示例
|
||||
- **外键双向扩展**:`_expand_relations`
|
||||
- 自动添加被引用的表(外键指向的表)
|
||||
- 自动添加引用当前表的表(反向外键)
|
||||
- 确保 JOIN 完整性
|
||||
|
||||
- **生成紧凑 Schema 字符串**:`to_compact_string`
|
||||
- 根据选中的表生成紧凑的 Schema 描述
|
||||
- 包含表名、注释、字段、类型、主键、外键等信息
|
||||
|
||||
### 3. SQL Generator SQL生成模块
|
||||
|
||||
- **Few-shot 示例增强**:`FewShotSelector`
|
||||
- 支持 Chroma 向量库或 JSONL 两种存储方式
|
||||
- 根据用户问题计算语义相似度
|
||||
- 选择 top-k 个最相似的高质量示例(支持评分、标签、难度过滤)
|
||||
- 将示例注入到提示中,指导 SQL 生成
|
||||
- **LLM 生成 SQL**:调用 DeepSeek 模型,根据选中的表结构和示例生成 SQL 语句
|
||||
- 构造包含表结构、用户问题和示例的提示
|
||||
- 指导 LLM 生成符合特定 SQL 方言的语句
|
||||
- 清理和规范化生成的 SQL
|
||||
- 可配置 `FEWSHOT_USE_CHROMA=true/false`
|
||||
|
||||
### 4. Validator 算法
|
||||
- **LLM 生成 SQL**:`_generate_sql` → `deepseek.chat`
|
||||
- 构造包含 Schema、用户问题、示例(可选)、对话上文的提示
|
||||
- 使用 `temperature=0.0, top_p=1.0` 贪心解码
|
||||
- T-SQL 特殊要求:使用方括号 `[]`、禁止反引号、`+` 拼接字符串、今日用 `CAST(GETDATE() AS DATE)`
|
||||
|
||||
- **程序验证**:检查 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 方言归一**:`normalize_sql_for_dialect`
|
||||
- 使用 sqlglot 清理和规范化生成的 SQL
|
||||
- 提取 markdown 代码块中的 SQL
|
||||
|
||||
### 4. Validator SQL验证模块
|
||||
|
||||
- **程序校验**(确定性规则,按顺序执行):
|
||||
- **语法验证**:`validate_sql_syntax`(sqlglot)
|
||||
- **Schema 一致性验证**:`validate_schema_consistency`(检查表和列是否存在于 Schema 中)
|
||||
- **危险操作检查**:`check_dangerous_operations`(DROP、DELETE、UPDATE、INSERT、ALTER、TRUNCATE 等)
|
||||
- **T-SQL 字面量规则检查**:`check_no_cjk_in_sql_string_literals`(禁止在字符串字面量中出现中文)
|
||||
|
||||
- **数据库试执行(探针)**:`probe_sql_execution_status_ex`
|
||||
- 仅在程序校验全部通过后执行
|
||||
- 需要配置 `database_url` 环境变量
|
||||
- 返回状态码:
|
||||
- **1**:执行成功,且**有返回行** → **跳过 LLM 语义验证**,直接将 SQL 交付用户,可调用 `sql_probe_success_delivery_message` 生成交付说明
|
||||
- **0**:执行成功,但**数据行数为 0** → 跳过 LLM 语义验证,调用 `empty_result_user_feedback` 生成补充说明和追问引导
|
||||
- **-1**:执行失败 → 进入重试流程,不交付 SQL
|
||||
- **None**:未配置 `database_url`,跳过探针
|
||||
|
||||
- **LLM 语义验证**:`validate_sql`(仅探针为 None 时调用)
|
||||
- 构造包含 SQL、表结构和用户问题的提示
|
||||
- 让 LLM 评估 SQL 是否正确回答了用户问题
|
||||
- 收集错误和警告信息
|
||||
- **结果评估**:验证通过则返回有效 SQL,失败则进入重试逻辑
|
||||
- 最多重试 max\_retry 次
|
||||
- 每次重试使用相同的表结构,但重新生成 SQL
|
||||
- 如果程序校验已通过 Schema 一致性,则过滤掉 LLM 常误报的 `unknown_table` 和 `unknown_column` 错误
|
||||
|
||||
- **重试逻辑**:
|
||||
- 最多重试 `max_retry` 次(默认 2)
|
||||
- 每次重试:
|
||||
- 合并上次失败 SQL 中引用的表(`extract_tables_from_sql`)
|
||||
- 外键再扩展
|
||||
- 重新生成紧凑 Schema
|
||||
- 将上次校验错误反馈给 LLM
|
||||
|
||||
### 5. 数据层支持
|
||||
|
||||
- **Schema 管理**:管理数据库表结构和元数据
|
||||
- 从 JSON 文件加载表结构
|
||||
- **Schema 管理**:`SchemaManager` 管理数据库表结构和元数据
|
||||
- 从 JSON/G3SB 文件加载表结构
|
||||
- 提供表和列的查询接口
|
||||
- 分析表之间的外键关系
|
||||
- **向量数据库**:存储表和列的向量表示,用于快速检索
|
||||
- 使用 Chroma DB 存储向量
|
||||
- 生成紧凑的 Schema 描述字符串
|
||||
- **向量数据库**:`SchemaIndexer` + Chroma DB 存储和检索表向量
|
||||
- 支持增量更新和查询
|
||||
- **Few-shot 示例库**:存储高质量的自然语言到 SQL 的示例
|
||||
- 从 JSONL 文件加载示例
|
||||
- 支持基于相似度的示例检索
|
||||
- **DeepSeek API**:提供大语言模型能力,用于表选择、SQL 生成和验证
|
||||
- 调用 DeepSeek 聊天模型
|
||||
- 可配置向量数据库路径
|
||||
- **Few-shot 示例库**:`FewShotSelector` 管理高质量示例
|
||||
- 支持 Chroma 向量库或 JSONL 文件两种存储方式
|
||||
- 基于语义相似度检索示例
|
||||
- 支持评分、标签、难度过滤
|
||||
- **DeepSeek API**:统一接口提供大语言模型能力
|
||||
- `deepseek.chat` 通用对话
|
||||
- `select_tables` 表选择
|
||||
- `validate_sql` SQL 验证
|
||||
- `normalize_nl_question` 问句归一
|
||||
- 支持不同的模型参数配置
|
||||
|
||||
## 技术栈
|
||||
@@ -177,12 +270,16 @@ database_url]
|
||||
|
||||
## 算法特点
|
||||
|
||||
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. **可配置性**:支持多种配置参数,如温度、最大重试次数、向量检索开关等,适应不同场景需求
|
||||
1. **模块化编排架构**:Text2SQLOrchestrator 统一编排表选择、SQL 生成、SQL 验证三大模块,各模块协同工作形成完整处理流程
|
||||
2. **问句归一化**:支持中英文问句归一为标准中文(默认开启),保证同一语义的查询生成一致的 SQL
|
||||
3. **向量检索增强**:Schema Linker 使用 Chroma 向量数据库快速筛选相关表,提高表选择效率,可配置启用/禁用
|
||||
4. **经纪商维度表优先**:针对证券/期货业务场景,涉及对手方/经纪商的问题自动优先纳入经纪商维度表
|
||||
5. **Few-shot 学习**:SQL Generator 利用示例库增强 SQL 生成质量,支持 Chroma 向量库或 JSONL 存储方式,可配置启用/禁用
|
||||
6. **多层验证机制**:程序校验(语法 + Schema 一致性 + 危险操作 + T-SQL 字面量规则)+ 库上探针 + LLM 语义验证
|
||||
7. **智能探针分流**:探针返回 1(有数据)直接交付、0(无数据)附带说明引导用户补充条件、-1(失败)自动重试,None 时走 LLM 语义验证兜底
|
||||
8. **自动关联表扩展**:通过外键关系双向扩展相关表,确保 JOIN 完整性
|
||||
9. **对话上下文支持**:支持多轮对话的上下文合并,处理指代消解和续问
|
||||
10. **可配置性**:支持多种配置参数,如最大重试次数、向量检索开关、Few-shot 配置、问句归一开关等,适应不同场景需求
|
||||
|
||||
## Few-shot 学习详细说明
|
||||
|
||||
@@ -192,28 +289,54 @@ Few-shot 学习是一种机器学习方法,指通过少量示例来指导模
|
||||
|
||||
### 在 Text2SQL 系统中的应用
|
||||
|
||||
在 Text2SQL 系统中,Few-shot 学习主要应用于 SQL Generator 智能体,具体流程如下:
|
||||
在 Text2SQL 系统中,Few-shot 学习应用于 SQL 生成阶段,通过 `FewShotSelector` 组件实现,具体流程如下:
|
||||
|
||||
1. **示例库构建**:系统维护一个存储高质量自然语言到 SQL 示例的库,从 JSONL 文件加载。这些示例包含各种类型的 SQL 查询场景,如简单查询、复杂连接、聚合操作等。
|
||||
2. **相似度匹配**:当用户提出自然语言问题时,系统会计算该问题与示例库中问题的语义相似度。
|
||||
3. **示例选择**:基于相似度排序,选择最相关的 top-k 个高质量示例。
|
||||
4. **提示增强**:将这些示例注入到给大语言模型的提示中,指导模型生成更准确的 SQL 语句。
|
||||
5. **生成指导**:模型参考示例的结构和风格,结合用户问题和表结构,生成符合要求的 SQL 语句。
|
||||
1. **示例库构建**:系统维护一个存储高质量自然语言到 SQL 示例的库,支持两种存储方式:
|
||||
- **Chroma 向量库**:`FEWSHOT_USE_CHROMA=true` 时使用,提供高效的相似度检索
|
||||
- **JSONL 文件**:传统方式,从 `all_samples.jsonl` 加载示例
|
||||
- 每条示例包含:问题(中文/英文)、SQL 语句、评分、标签、难度等级等元数据
|
||||
|
||||
2. **相似度匹配**:当用户提出自然语言问题时,使用嵌入模型将问题转换为向量,计算向量相似度
|
||||
|
||||
3. **示例选择**:基于相似度排序,支持多维度过滤:
|
||||
- `top_k`:选择最相关的 top-k 个示例(默认 3)
|
||||
- `min_rating`:最低评分过滤(默认 7)
|
||||
- `required_tags`:必须包含的标签
|
||||
- `max_difficulty`:最大难度过滤
|
||||
|
||||
4. **提示增强**:将选中的示例注入到给大语言模型的提示中,格式为:
|
||||
```
|
||||
参考以下相似示例的SQL编写风格:
|
||||
|
||||
示例 1:
|
||||
问题:xxx
|
||||
SQL:
|
||||
xxx
|
||||
|
||||
【当前Schema】
|
||||
xxx
|
||||
```
|
||||
|
||||
5. **生成指导**:模型参考示例的结构和风格,结合用户问题和表结构,生成符合要求的 SQL 语句
|
||||
|
||||
### 技术实现
|
||||
|
||||
- **示例存储**:使用 JSONL 格式存储示例,每条示例包含自然语言问题和对应的 SQL 语句。
|
||||
- **相似度计算**:利用预训练的嵌入模型将问题转换为向量,计算向量相似度。
|
||||
- **示例选择**:根据相似度得分选择最相关的示例。
|
||||
- **提示构造**:将选中的示例与用户问题、表结构一起构造提示,确保模型能理解任务要求。
|
||||
- **示例存储**:支持 Chroma 向量库持久化或 JSONL 文件加载两种方式
|
||||
- **向量索引**:
|
||||
- Chroma 模式:使用 Chroma DB 存储和检索向量
|
||||
- JSONL 模式:内存 numpy 数组 + 可选 .npy 缓存
|
||||
- **相似度计算**:利用预训练的嵌入模型将问题转换为向量,使用余弦相似度计算
|
||||
- **示例选择**:根据相似度得分和元数据过滤选择最相关的示例
|
||||
- **提示构造**:将选中的示例与用户问题、表结构一起构造提示,确保模型能理解任务要求
|
||||
|
||||
### 优势
|
||||
|
||||
1. **减少数据需求**:不需要大量的标注数据,仅需少量高质量示例。
|
||||
2. **提高生成质量**:通过示例指导,模型能生成更符合特定场景的 SQL 语句。
|
||||
3. **学习最佳实践**:示例库可以包含领域专家编写的高质量 SQL,使模型学习到最佳实践。
|
||||
4. **适应不同场景**:通过扩展示例库,可以适应不同领域和复杂度的 SQL 生成需求。
|
||||
5. **灵活性**:可以根据具体应用场景调整示例库,提高系统的适应性。
|
||||
1. **减少数据需求**:不需要大量的标注数据,仅需少量高质量示例
|
||||
2. **提高生成质量**:通过示例指导,模型能生成更符合特定场景的 SQL 语句
|
||||
3. **学习最佳实践**:示例库可以包含领域专家编写的高质量 SQL,使模型学习到最佳实践
|
||||
4. **适应不同场景**:通过扩展示例库,可以适应不同领域和复杂度的 SQL 生成需求
|
||||
5. **灵活性**:支持 Chroma 和 JSONL 两种存储方式,可根据场景选择
|
||||
6. **高质量保障**:通过评分、标签、难度等元数据过滤,确保选用高质量示例
|
||||
|
||||
### 应用效果
|
||||
|
||||
@@ -223,20 +346,29 @@ Few-shot 学习是一种机器学习方法,指通过少量示例来指导模
|
||||
- 生成更符合用户意图的 SQL 语句
|
||||
- 减少生成错误
|
||||
- 提高系统的泛化能力
|
||||
- 通过示例学习特定业务场景的 SQL 编写风格
|
||||
|
||||
## 性能优化
|
||||
|
||||
1. **向量索引预构建**:提前构建向量索引,加速首次查询
|
||||
2. **缓存机制**:缓存常见查询的结果,提高响应速度
|
||||
3. **并行处理**:对多个查询进行并行处理,提高系统吞吐量
|
||||
4. **模型调优**:调整 LLM 参数,平衡生成质量和速度
|
||||
1. **向量索引预构建**:`build_vector_index` 方法提前构建向量索引,加速首次查询
|
||||
2. **懒加载机制**:向量索引在首次使用时才加载,避免启动开销
|
||||
3. **Few-shot 缓存**:向量缓存到 `.npy` 文件,换模型自动重建
|
||||
4. **贪心解码**:SQL 生成使用 `temperature=0.0` 贪心解码,提高一致性和速度
|
||||
5. **库探针优化**:仅取 1 行数据(`max_rows=1`)判断探针状态,最小化数据库负载
|
||||
6. **SQL 执行优化**:
|
||||
- 聚合查询优先直接执行而非 COUNT 包裹
|
||||
- 自动去掉派生表内无意义的 ORDER BY
|
||||
- 支持多种 SQL 方言的语法处理
|
||||
|
||||
## 扩展性
|
||||
|
||||
1. **支持多种数据库**:通过配置支持不同的 SQL 方言
|
||||
2. **可插拔的 LLM**:支持替换不同的大语言模型
|
||||
3. **自定义示例库**:可根据特定领域扩展示例库
|
||||
1. **支持多种数据库**:通过 sqlglot 支持不同的 SQL 方言(T-SQL、MySQL、PostgreSQL 等)
|
||||
2. **可插拔的 LLM**:统一通过 `DeepSeekClient` 接口调用,支持替换不同的大语言模型
|
||||
3. **可配置的嵌入模型**:通过环境变量支持 OpenAI、ModelScope、DashScope 等多种嵌入 API
|
||||
4. **自定义示例库**:可根据特定领域扩展示例库,支持 Chroma 或 JSONL 格式
|
||||
5. **Schema 灵活加载**:支持从 JSON 文件或 G3SB 格式加载 Schema
|
||||
6. **意图分类可扩展**:支持 rules 和 hybrid 两种模式,可扩展更多分类策略
|
||||
|
||||
## 总结
|
||||
|
||||
Text2SQL 算法通过多智能体协作、向量检索和大语言模型技术,实现了从自然语言到 SQL 的高效准确转换。算法流程清晰,逻辑完善,具有良好的可扩展性和可配置性,能够满足不同场景下的 SQL 生成需求。
|
||||
Text2SQL 算法通过模块化编排架构、向量检索、问句归一化和 Few-shot 学习技术,实现了从自然语言到 SQL 的高效准确转换。系统采用多层验证机制(程序校验 + 库上探针 + LLM 语义验证),配合智能探针分流策略,确保生成的 SQL 既正确又符合用户意图。算法流程清晰,逻辑完善,具有良好的可扩展性和可配置性,能够满足证券/期货等金融业务场景下的 SQL 生成需求。
|
||||
|
||||
Reference in New Issue
Block a user