LLM Agent 之数据库应用设计(一)
上一章我们主要讲搜索引擎和 LLM 的应用设计,这一章我们来聊聊大模型和数据库之间的交互方案。目前已有多个数据平台接入 Text-to-SQL 功能,建议先体验相关工具再深入理解实现方案。
本章会提到的前置知识点包括 Chain-of-thought(思维链)、Least-to-Most Prompt、Self-Consistency Prompt,建议不熟悉的同学先查阅相关资料。
DB Agent 设计
和数据库进行交互的应用设计,主要涉及以下几个子模块:
- Decomposition:将 SQL 生成任务拆分成多个子问题,如先定位表,再定位字段,最后基于以上信息生成 SQL。这降低了每一步的任务难度,并有效控制了输入长度。
- Schema Linking:在数据表较多的数据库中,不能一次性将所有表结构作为上下文输入。需要先针对用户问题筛选相关的数据表和字段。
- Schema Description:如何描述 Table 和 Column 让模型更好理解每张表的用途及字段的含义。真实世界中的庞大数据库往往存在大量噪音,甚至需要领域知识和详细字段描述才能明确每个字段的实际作用。
- Self-Correction:对 SQL 执行结果或代码本身进行自我修正,以提高 SQL 语句的准确率。
下面我们将分别基于 C3、DIN-SQL、SQL-PALM、BIRD 这四篇论文了解 DB 应用中可以提升 SQL 生成效果的各个子模块。前三篇主要基于传统的 Spider 数据集,而 BIRD 则提出了全新的、难度更高且更符合真实世界应用的新基准 A Big Bench for Large-Scale Database Grounded Text-to-SQLs。
DIN-SQL
DIN-SQL: Decomposed In-Context Learning of Text-to-SQL with Self-Correction
- GitHub: https://github.com/madhup-google/DIN-SQL
- Spider Benchmark 的 SOTA 模型,提出了问题分解的 NL2SQL 范式。

DIN-SQL 是当前 Spider 榜单上的领先模型。它采用子问题拆解的方案,把 SQL 生成的任务像思维链一样拆解成几个固定的任务,串联执行。主要包含以下 4 个模块:
1. Schema Linking
方案是使用 10-Shot Prompt + zero-shot COT 的引导词(Let's think Step by Step),让模型逐步思考给出针对用户问题应该查询的表,以及表中需要查询的字段、过滤条件字段和 Join 条件字段。
Schema Link 的输出会作为后续 SQL 生成任务的输入,帮助模型先定位字段,再编写 SQL。Prompt 示例如下:

2. Classification
把用户的提问按查询的难易程度分成以下 3 类:
- easy:单表查询
- medium:允许多表 Join,但是没有嵌套查询
- hard:多表 Join + 嵌套查询




