Text2SQL的三种实现方法
传统BI工具通常分为数据接入层、分析工具层和基于该工具平台的各种行业应用层面,大模型可以在这些环节发挥作用。在LLM赋能BI的过程中,Text2SQL(或者称为NL2SQL)将自然语言表述的查询语句转化为SQL语句,是构建智能BI不可缺少的步骤。
传统BI工具通常分为数据接入层、分析工具层和基于该工具平台的各种行业应用层面,大模型可以在这些环节发挥作用。
- 在数据处理层面,大模型可以帮助传统的ETL过程简化难度,提高实时交互效率。
- 在数据分析层面,大模型可以替代拖拽交互方式,让业务用户用更简单、更高效的方式以自然语言形式与底层数据交互,构建需要的报表和看板。
- 在行业应用层面,大模型可以真正发挥对行业知识的理解能力,与具体数据结合,形成具针对客户、特定项目、指标体系的输出,再加上数据准备,可能直接输出标准化的项目成果。
在LLM赋能BI的过程中,Text2SQL(或者称为NL2SQL)将自然语言表述的查询语句转化为SQL语句,是构建智能BI不可缺少的步骤。
Text2SQL的实现路径有几种:
- 基于prompt template的方法
- 基于SQLDatabaseChain的方法
- 基于Agent的方法
基于prompt template的方法
NL2SQL核心在于如何把自然语言组装成Prompt,并交给LLM转化成SQL。OpenAI官网上一个标准的chatGPT做自然语言转SQL的例子:
System
/*系统指令*/
Given the following SQL tables, your job is to write queries given a user’s request.
/*数据库内表结构*/
CREATE TABLE Orders (
OrderID int,
CustomerID int,
OrderDate datetime,
OrderTime varchar(8),
PRIMARY KEY (OrderID)
);
...此处省略其他表...
/*问题*/
Write a SQL query which computes the average total order value for all orders on 2023-04-01.
NL2SQL的Prompt基本上就是几个部分组成:
- 指令(Instruction):比如,“你是一个SQL生成专家。请参考如下的表格结构,直接输出SQL语句,不要多余的解释。”
- 数据结构(Table Schema):类似于语言翻译中的“词汇表”。即需要使用的数据库表结构,由于大模型无法直接访问数据库,需要把数据的结构组装进入Prompt,通常包括表名、列名、列的类型、列的含义、主外键信息。
- 用户问题(Questions):自然语言表达的问题,比如,“统计上个月的平均订单额”。
- 参考样例(Few-shot):这是一个可选项,当然也是提示工程的常见技巧。即指导大模型生成本次SQL的参考样例。
- 其他提示(Tips):其他认为有必要的指示。比如要求生成的SQL中不允许出现的表达式,或者要求列名必须用“table.column"的形式等。
基于SQLDatabaseChain的方法
LangChain提供基于LLM的SQLDatabaseChain,可以利用LLM的能力将自然语言表述的query转化为SQL,连接DB进行查询,并利用LLM组装润色结果,返回最终answer。
from langchain.llms import OpenAI
from langchain.utilities import SQLDatabase
from langchain_experimental.sql import SQLDatabaseChain
import os
os.environ["OPENAI_API_KEY"] = "Your openai key"
db = SQLDatabase.from_uri("sqlite:///..../Chinook.db")
llm = OpenAI(temperature=0, verbose=True)
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)
db_chain.run("总共有多少员工?")
基于SQLDatabaseChain实现的Text2SQL是最基础的实践方式,但对于逻辑复杂的查询在稳定性、可靠性、安全性方面可能无法达到预期,比如输出幻觉问题、数据安全问题。
基于Agent的方法
LangChain的SQL Agent提供一种比Chain更灵活的与SQL数据库交互的方式。使用SQL Agent主要有以下优点:
- 可以根据Database Schema和数据库的内容(如描述特定的表)回答问题
- 可以通过运行生成的查询、捕获回溯信息并正确地重新生成,以此来纠错
- 可以根据需要多次查询数据库以回答用户问题
- 仅检索相关表格的schema节省token
使用create_sql_agent构造器来初始化SQL Agent,Agent使用的SQLDatabaseToolkit包含用于执行以下操作的工具:
- 创建和执行查询
- 检查查询语法
- 检索表格的描述
- ……等等
AI科技智库👉️👉️👉️www.aigchouse.com,一站式AI工具、资料、课程资源学习平台,每日持续更新。通过分享最新AI工具、AI资源等,帮助更多人了解使用AI,提升工作和学习效率。这里有海量AI工具整合包、AI学习资料、AI免费课程和AI咨询服务,AI之路不迷路,2024我们一起变强。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)