当前位置:   article > 正文

Text2SQL的三种实现方法

text2sql

传统BI工具通常分为数据接入层、分析工具层和基于该工具平台的各种行业应用层面,大模型可以在这些环节发挥作用。

  • 在数据处理层面,大模型可以帮助传统的ETL过程简化难度,提高实时交互效率。
  • 在数据分析层面,大模型可以替代拖拽交互方式,让业务用户用更简单、更高效的方式以自然语言形式与底层数据交互,构建需要的报表和看板。
  • 在行业应用层面,大模型可以真正发挥对行业知识的理解能力,与具体数据结合,形成具针对客户、特定项目、指标体系的输出,再加上数据准备,可能直接输出标准化的项目成果。

在LLM赋能BI的过程中,Text2SQL(或者称为NL2SQL)将自然语言表述的查询语句转化为SQL语句,是构建智能BI不可缺少的步骤。

Text2SQL的实现路径有几种:

  • 基于prompt template的方法
  • 基于SQLDatabaseChain的方法
  • 基于Agent的方法

基于prompt template的方法

NL2SQL核心在于如何把自然语言组装成Prompt,并交给LLM转化成SQLOpenAI官网上一个标准的chatGPT做自然语言转SQL的例子:

  1. System
  2. /*系统指令*/
  3. Given the following SQL tables, your job is to write queries given a user’s request.
  4. /*数据库内表结构*/
  5. CREATE TABLE Orders (
  6. OrderID int,
  7. CustomerID int,
  8. OrderDate datetime,
  9. OrderTime varchar(8),
  10. PRIMARY KEY (OrderID)
  11. );
  12. ...此处省略其他表...
  13. /*问题*/
  14. 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。

  1. from langchain.llms import OpenAI
  2. from langchain.utilities import SQLDatabase
  3. from langchain_experimental.sql import SQLDatabaseChain
  4. import os
  5. os.environ["OPENAI_API_KEY"] = "Your openai key"
  6. db = SQLDatabase.from_uri("sqlite:///..../Chinook.db")
  7. llm = OpenAI(temperature=0, verbose=True)
  8. db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)
  9. 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科技智库 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/865286

推荐阅读