NL2SQL与LangChain和Azure SQL数据库

目录

开始

Notebook

总结


LangChain是一个开源框架,用于创建使用语言模型(LLM/MLM/SML)并由其提供支持的应用程序。在这篇文章中,基本的LangChain组件(工具包、链、代理)将用于创建自然语言到SQL提示符,该提示符将允许与Azure SQL数据库进行交互;只需向数据库询问您想要什么,就好像在与另一个人交谈一样。

开始

代码在哪里?

本文中使用的所有代码都位于此处Azure SQL AI示例GitHub存储库中。这篇文章中概述的notebook位于此处


查看用于此示例的python notebook,您可能会注意到存储库中有2个。一个是使用OpenAI,另一个是使用Azure OpenAI。这篇文章将使用OpenAI notebook。差异非常小,唯一的变化是对Azure OpenAI终结点所在位置的引用。

您可以在GitHub Codespace中运行此示例。

Notebook的第一部分通过requirements.txt文件安装必要的库来设置我们的python环境。

pip install -r requirements.txt

接下来,安装SQL ODBC驱动程序,Notebook中引用的是WindowsMacOSLinux的链接。存储库中包含Ubuntu的脚本,因为这是与GitHub代码空间一起使用的操作系统;运行此示例的最简单位置。

请记住填写.env文件中的值。在此示例中,只需填写py-connectionString变量的OPENAI_API_KEY和连接信息。

AZURE_OPENAI_API_KEY=""
AZURE_OPENAI_ENDPOINT=""
OPENAI_API_KEY=""
py-connectionString="mssql+pyodbc://USERNAME:PASSWORD@SERVER_NAME.database.windows.net/DATABASE_NAME?driver=ODBC+Driver+18+for+SQL+Server"

登录平台后,您可以在此处获取您的OpenAI API密钥。

LangChain with Azure SQL数据库示例的最后一个设置部分是表创建脚本。

使用NL2SQL代理时,最好与角色/权限尽可能少的用户连接,以获得最大的安全性。

create table [dbo].[langtable] (id int Identity, username nvarchar(100))
GO

insert into [dbo].[langtable] (username) values('sammy')
insert into [dbo].[langtable] (username) values('mary')
insert into [dbo].[langtable] (username) values('jane')
insert into [dbo].[langtable] (username) values('fred')
insert into [dbo].[langtable] (username) values('billy')
insert into [dbo].[langtable] (username) values('jonny')
insert into [dbo].[langtable] (username) values('kenny')
insert into [dbo].[langtable] (username) values('dan')
insert into [dbo].[langtable] (username) values('frank')
insert into [dbo].[langtable] (username) values('jenny')
GO

select * from [dbo].[langtable]
GO

Notebook

选择内核

请务必使用Python notebook右上角的选择内核按钮为Python notebook选择内核。

如果使用VS Code/Codespace,它将安装PythonJupyter扩展,并导致设置内核。


Notebook的第一站是设置要在python脚本中使用的库。该部分还加载我们在.env文件中设置的任何环境变量,以便稍后使用。

import pyodbc
import os
from dotenv import load_dotenv
from langchain.agents import create_sql_agent
from langchain.agents.agent_types import AgentType
from langchain.sql_database import SQLDatabase
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from langchain_openai import OpenAI
load_dotenv()

运行此部分后,您将创建并测试数据库连接。使用SQL Alchemy创建数据库引擎。然后,将此引擎添加到初始化LangChain SQL Database Toolkit集成的db变量中。然后,通过打印出3个测试的结果来测试连接,其中包括列出代理有权访问的所有表和SQL语句。

from sqlalchemy import create_engine

connectionString=os.environ["py-connectionString"]

db_engine = create_engine(connectionString)

db = SQLDatabase(db_engine, view_support=True, schema="dbo")

# test the connection
print(db.dialect)
print(db.get_usable_table_names())
db.run("select convert(varchar(25), getdate(), 120)")

下一节利用LangChain SQL数据库工具包创建一个使用OpenAI作为LLM和数据库连接的LangChain SQL代理。

toolkit = SQLDatabaseToolkit(db=db, llm=OpenAI(temperature=0))

agent_executor = create_sql_agent(
llm=OpenAI(temperature=0),
toolkit=toolkit,
verbose=True,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

最后,一旦所有组件都设置好了,我们就可以用自然语言执行提示,要求数据库对测试表中的行进行计数。

agent_executor.invoke("count the rows in the langtable table.")

结果类似于以下输出:

> Entering new AgentExecutor chain... 
I need to use a SQL query to count the rows in the langtable table. 
Action: sql_db_query 
Action Input: SELECT COUNT(*) FROM langtable[(10,)]10 rows were counted in the langtable table. 
Final Answer: 10 
> Finished chain.
{'input': 'count the rows in the langtable table.', 'output': '10'}

总结

你刚刚使用NL2SQL代理创建了第一个带有Azure SQL数据库的LangChain应用程序。随着AI在我们的开发环境中变得越来越重要,能够将结构化数据与LLM一起使用是创建提示的关键,这些提示可以更准确地回答用户提出的问题。

https://devblogs.microsoft.com/azure-sql/nl2sql-with-langchain-and-azure-sql-database/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值