当前位置:   article > 正文

玩转大模型:以自然语言查询SQL数据库(二)_自然语言识别sql语句

自然语言识别sql语句

作者:宋文欣,智领云科技联合创始人兼CTO

01 简介

随着人工智能技术的发展,尤其是自然语言处理(NLP)和机器学习的进步,使得将自然语言转换为结构化查询成为可能。这种技术的应用场景广泛,从简化数据库查询操作到提高数据分析的效率,都有着重要的实际价值。文章通过介绍 LangChain 和 Ollama 框架,提供了一种在本地或云服务器上部署和运行 LLMs 的方法,使得开发者和最终用户都能够轻松地实现自然语言到SQL查询的转换。

本文旨在向读者展示如何在Docker容器环境中利用大型语言模型(LLMs)构建一个端到端的Text2SQL 流程。通过这一流程,用户可以以自然语言提出问题,系统则自动将这些问题转化为SQL 查询语句,进而在关系型数据库上执行,从而获取所需的数据,实现从自然语言问题到关系型数据库上的 SQL 查询的转化。

02 技术背景

在本文中,我们将深入探讨两个关键技术框架:LangChain 和 Ollama,它们是构建端到端Text2SQL 流程的基础。这些框架使得在 Docker 容器中部署和运行大型语言模型(LLMs)成为可能,从而实现了从自然语言到SQL查询语句的高效转换。

LangChain框架

LangChain 提供了SQL 查询链和 SQL 代理的核心功能。SQL 查询链负责将用户的自然语言查询转换为 SQL 语句,可以通过定制和扩展来适应不同的应用场景。SQL 代理则提供了高度的灵活性和定制性,允许开发者根据具体的任务和数据结构进行优化,以实现更准确和高效的自然语言查询转换。这两个组件共同为关系型数据库提供了一个易用且便捷的自然语言查询界面。

Ollama框架

Ollama 框架则提供了与 OpenAI 兼容的接口,使得在本地环境中部署和运行 LLMs 变得简单。它允许应用程序在 OpenAI 后端和本地运行的 LLMs 之间进行无缝切换,这种灵活性使得开发者可以根据需求选择最合适的部署方式。无论是在云端还是本地环境中,Ollama 都能够帮助开发者轻松实现模型的部署和运行。

这两个框架的结合,为 Text2SQL 任务提供了坚实的技术基础。通过 LangChain 的 SQL 查询链和 SQL 代理,以及 Ollama 的本地 LLM 部署功能,开发者能够构建出能够理解和执行自然语言查询的应用程序。这些技术不仅提高了数据库查询的效率,也为非技术用户提供了更加友好的交互方式,使得他们能够更容易地从数据库中获取信息。

03 成果展示

Text2SQL 应用展示了自然语言处理技术在数据库查询领域的强大潜力。它不仅简化了查询过程,还通过提供详细的推理跟踪,让用户能够更加深入地参与到查询的每一个步骤中。这种创新的应用无疑将推动数据库查询技术的发展,为用户提供更加智能和个性化的服务。

通过应用,用户可以直观地了解数据库的结构和内容,并通过“DATABASE Information”功能浏览每个表的示例数据。为用户提供了一个清晰的视图,帮助他们更好地构建查询。此外,用户界面提供了两种模式选择:“ChatGPT”和“Local_LLM”,让用户能够根据自己的需求和偏好进行查询。为了增强用户体验,Text2SQL 还提供了 “LLM 推理跟踪”功能。

Text2SQL推理的这个过程集成了自然语言处理和数据库管理系统,通过逐步将用户的自然语言输入转化为结构化的SQL查询,使得用户能够以自然且直观的方式与数据库交互。

Text2SQL推理过程详细介绍如下:

(1)用户输入

用户以自然语言形式提出一个问题或请求,例如:“旧金山的办公室在哪里?”。

(2)文本解析

输入文本首先会被解析以确定关键词、短语、意图和实体,自然语言处理(NLP)技术,如分词、词性标注、命名实体识别(NER)等,被用于提取和理解查询中的重要信息。

(3)意图识
别与实体链接

系统识别查询的意图,包括选择(SELECT)、计数(COUNT)、更新(UPDATE)等,确定与数据库中实体(如表格、列名)的映射关系。

(4)SQL模板生成

使用预定义的模板和规则来生成SQL查询,这些模板可根据用户输入的意图和识别出的实体进行填充。

(5)深度学习模型

Text2SQL使用序列到序列(Seq2Seq)模型、注意力机制或基于Transformer的架构,如BERT或GPT,来生成SQL查询。在结合ChatGPT模型的情况下,LangChain框架提供了与ChatGPT模型集成的关键点,LangChain使用ChatOpenAI类来建立与OpenAI以及开源大语言模型(LLMs)的连接。

(6)SQL生成

使用上述技术生成的SQL查询会根据用户的原始文本输入构建,包括JOIN操作(如果需要关联不同的表)、WHERE子句(用于过滤结果)、GROUP BY语句(用于聚合操作)等。

(7)验证与优化

生成的SQL查询,可以通过执行部分查询或使用查询优化器来进行优化。

(8)执行SQL查询

生成的SQL查询在数据库上执行,执行结果是数据库返回的数据,通常是表格形式。

(9)结果展示

返回的结果以用户能理解的格式展示,涉及到将表格转换为自然语言的摘要,或以图形界面显示。

04 操作步骤

本机电脑(

Mac,非GPU配置)

1.将以下是在本机电脑(Mac,非GPU配置) 上启动演示的逐步指南:

1)选择合适路径,右键 Open in Terminal,输入如下命令克隆仓库:

git clone https://github.com/LinkTime-Corp/llm-in-containers.git
cd llm-in-containers/text2sql
  • 1
  • 2

2)若需要使用 OpenAI 的模型进行推理,将您的OpenAI API密钥设置到conf/config.json的“OPENAI_API_KEY”中:

如果用户的OpenAI 未进行订阅,这里则需要修改model为:“OPENAI_API_MODEL”: “gpt-3.5-turbo”,

3)打开 Docker Desktop

4)启动演示

bash run.sh
  • 1

修改 run.sh :

text2sql_ollama_1 -> text2sql-ollama-1
  • 1

修改 load_data.sh :

text2sql_mysql_1 -> text2sql-mysql-1
  • 1

(备注:将_修改为-)

5)将样本数据加载到 MySQL 中

bash load_data.sh
  • 1

6)访问 http://localhost:8501/ 上的用户界面

7)关闭演示

bash shutdown.sh
  • 1

阿里云/AWS服务器

过程类似,详情可参见完整博客内容,博客链接:https://www.linktimecloud.com/posts/7686

05 要点笔记

与 LLMs 交互的简化之道:LangChain 与 ChatOpenAI 的协同

在探索自然语言处理的前沿,LangChain 框架为我们提供了一种优雅的方式来与大型语言模型(LLMs)进行交互。通过使用 ChatOpenAI 类,我们不仅能够与 OpenAI 的模型建立连接,还能轻松地集成开源模型,这为开发者带来了极大的灵活性。

  • 无缝集成:
    LangChain 通过 ChatOpenAI 类,为开发者提供了一个统一的接口来与不同的LLMs 进行交互,无论是 OpenAI 的商业模型还是开源模型。
  • 配置灵活性:
    在集成开源模型时,只需向 ChatOpenAI 构造器添加 openai_api_base 参数,即可定义本地 LLM 服务的 URI。
  • Ollama 的多功能性:
    在我们的演示中,我们选择将 openai_api_base 直接指向 Ollama 的API 服务。Ollama 以其对多种开源 LLMs 的支持而受到推崇,这使得开发者可以在不同的模型之间自由切换,而无需修改代码。

以下代码片段,演示了此配置:

openai_llm = ChatOpenAI(model_name=OPENAI_API_MODEL)
local_llm = ChatOpenAI(model_name=LOCAL_MODEL_NAME, openai_api_base=API_BASE)
  • 1
  • 2

使用 LangChain 实现 Text2SQL

在自然语言处理中,LangChain 框架以其强大的 Text2SQL 能力脱颖而出。它通过两个核心组件:SQL Chain 和 SQL Agent 让自然语言到 SQL 查询的转换变得简单而高效。

  • SQL Agent 的集成:
    SQL Agent 集成了两种代理类型:“openai-tools”和“openai-functions”,专门为与 GPT 模型的工具和函数调用 API 配合设计,以优化 GPT 模型的使用。不过,由于大多数开源 LLMs 并未针对这类工具和函数进行特别训练,导致在实践中,这些工具和函数的效果可能不尽人意。
  • SQL Chain 的优势:
    虽然 SQL Agent 为 GPT 模型提供了高级特性,但在开源 LLMs 的环境中,SQL Chain 因其高效性成为了首选。它简化了 Text2SQL 任务的处理,使得开发者能够更快地实现自然语言查询到SQL查询的转换。

以下代码片段,演示了如何实现 SQL Chain 和 SQL Agent 配置:

from langchain_community.agent_toolkits import create_sql_agent
def init_openai_agent(self, db):
    openai_llm = ChatOpenAI(model_name=OPENAI_API_MODEL)
    return create_sql_agent(openai_llm, db=db,
        agent_type="openai-tools", verbose=True)

from langchain.chains import create_sql_query_chain
def init_local_chain(self, db):
    local_llm = ChatOpenAI(model_name=LOCAL_MODEL_NAME, openai_api_base=API_BASE)
    write_query = create_sql_query_chain(local_llm, db)
    return write_query
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

LLMs 在 Text2SQL 任务上的准确性探索

准确性是衡量 LLMs 在 Text2SQL 任务上性能的关键指标,直接影响模型将自然语言查询转换成SQL语句的能力。虽然本文未深入探讨准确性指标,但我们鼓励读者参考公开的性能测试,以了解不同LLMs在这一任务上的表现。

Defog公司在这篇文章(https://defog.ai/blog/open-sourcing-sqlcoder2-7b/)中提供了一项详细的性能测试,对比了 SQLCoder2 与其他多种 LLMs的准确性,可以为我们选择最合适的模型提供参考。

06 链接

本文Github 链接:

https://github.com/LinkTime-Corp/llm-in-containers/tree/main/text2sql

博客原文链接:

https://blog.gopenai.com/text2sql-pipeline-with-llms-in-docker-containers-34ae1097df46

作者:宋文欣,智领云科技联合创始人兼CTO

武汉大学计算机系本科及硕士,美国纽约州立大学石溪分校计算机专业博士。曾先后就职于Ask.com和EA(电子艺界)。在Ask.com期间,担任大数据部门技术负责人及工程经理,使用Hadoop集群处理实时搜索数据,形成全球规模领先的Search Ads Arbitrage用户;在EA期间,担任数字平台部门高级研发经理,从无到有组建EA数据平台团队,建设公司大数据平台,为EA全球工作室提供数据能力支持。

2016年回国联合创立智领云科技有限公司,组建智领云技术团队,开发了BDOS大数据平台操作系统。

  • Fin -

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/886691
推荐阅读
相关标签