如何使用Azure OpenAI生成SQL查询
在不断发展的数据管理和人工智能领域中,利用自然语言输入生成SQL查询的能力是一项改变游戏规则的技能。Azure OpenAI拥有强大的语言模型,提供了一种无缝的方式将自然语言转换为SQL查询,使数据交互更直观、更易访问。本文将指导您如何利用Azure OpenAI生成SQL查询,增强您的数据查询能力。
介绍Azure OpenAI
Azure OpenAI服务通过Azure平台提供对OpenAI强大的语言模型的访问。这些模型能够理解并生成类似人类的文本,使它们非常适用于自然语言处理、文本生成以及重要的将自然语言翻译成SQL查询的任务。
设置 Azure OpenAI 和 Azure SQL 数据库
在开始生成SQL查询之前,您需要设置您的Azure OpenAI环境。以下是步骤:
- 创建Azure账户:如果您还没有Azure账户,请注册一个Azure账户。
- 在Azure门户中设置OpenAI服务:导航至Azure门户并创建一个Azure OpenAI资源。
- 在Azure SQL数据库中设置:您应该在Azure SQL数据库中准备好您的表。如果没有,您可以使用以下脚本为自己创建示例表。
以下是用于创建3个表格(学生、课程和部门)以及适当关系的脚本:
-- Creating the Department table
CREATE TABLE Department (
DepartmentID INT PRIMARY KEY,
DepartmentName NVARCHAR(100) NOT NULL
);
-- Creating the Course table
CREATE TABLE Course (
CourseID INT PRIMARY KEY,
CourseName NVARCHAR(100) NOT NULL,
DepartmentID INT,
FOREIGN KEY (DepartmentID) REFERENCES Department(DepartmentID)
);
-- Creating the Student table
CREATE TABLE Student (
StudentID INT PRIMARY KEY,
StudentName NVARCHAR(100) NOT NULL,
CourseID INT,
FOREIGN KEY (CourseID) REFERENCES Course(CourseID)
);
在这个脚本中:
- 部门表包含部门。
- 课程表包含每个部门提供的课程,并通过DepartmentID引用部门表。
- 学生表包含学生,并通过CourseID引用课程表。
这个设置确保每门课程都与一个系相关联,每个学生都与一门课程相关联。现在你可以继续使用你的插入脚本为这些表插入数据。
到这一点,我们可以开始深入代码了。让我们从安装所需的软件包开始。
安装所需软件包
以下是您需要安装的内容:
! pip install requests
! pip install azure-core
! pip install azure-identity
导入所需的包
这里是我们需要导入的软件包以开始工作:
import requests
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
设置凭证和标题
我将选择DefaultAzureCredentials,因为我已经在编辑器中登录,您可以选择自己的身份验证方式。您也可以选择基于密钥的身份验证。
azure_credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(azure_credential,<SCOPE_GOES_HERE>)
token= token_provider()
# Headers for the API request
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {token}"
}
构建提示和有效载荷
这是我为一个SQL查询准备的提示:
prompt = """
Generate a SQL query to get courses and their respective departments.
The table schemas are as below:
- Department(DepartmentID, DepartmentName)
- Course(CourseID,CourseName,DepartmentID)
- Student(StudentID,StudentName,CourseID)
"""
这里是有效载荷:
data = {
"messages": [
{
"role": "system",
"content": [
{
"type": "text",
"text": "You are an AI assistant that can generate SQL queries very efficiently using given table schemas. <ADD_MORE_INSTRUCTIONS_IF_REQUIRE>"
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
}
]
},
],
"max_tokens": 200
}
发起 API 请求并获取响应
endpoint = "<ENDPOINT_GOES_HERE>/openai/deployments/<MODEL_GOES_HERE>/chat/completions?api-version=<VERSION_GOES_HERE>"
response = requests.post(endpoint, headers=headers, json=data)
response.json()["choices"][0]["message"]["content"].strip()
在成功执行时,您将看到类似于以下响应:
开心查询!