如何使用Azure OpenAI生成SQL查询

在不断发展的数据管理和人工智能领域中,利用自然语言输入生成SQL查询的能力是一项改变游戏规则的技能。Azure OpenAI拥有强大的语言模型,提供了一种无缝的方式将自然语言转换为SQL查询,使数据交互更直观、更易访问。本文将指导您如何利用Azure OpenAI生成SQL查询,增强您的数据查询能力。

介绍Azure OpenAI

Azure OpenAI服务通过Azure平台提供对OpenAI强大的语言模型的访问。这些模型能够理解并生成类似人类的文本,使它们非常适用于自然语言处理、文本生成以及重要的将自然语言翻译成SQL查询的任务。

设置 Azure OpenAI 和 Azure SQL 数据库

在开始生成SQL查询之前,您需要设置您的Azure OpenAI环境。以下是步骤:

  1. 创建Azure账户:如果您还没有Azure账户,请注册一个Azure账户。
  2. 在Azure门户中设置OpenAI服务:导航至Azure门户并创建一个Azure OpenAI资源。
  3. 在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()

在成功执行时,您将看到类似于以下响应:

开心查询!

2024-10-11 04:29:36 AI中文站翻译自原文