Как установить систему NL2SQL с Azure OpenAI Studio

Установка системы NL2SQL с помощью Azure OpenAI Studio шаг за шагом

Мы увидим, как использовать Azure OpenAI Studio, чтобы настроить конечную точку вывода, которую мы можем вызывать для генерации SQL-команд.

Эта статья является частью бесплатного курса по большим языковым моделям, доступного на GitHub.

Создано автором с помощью Dall-E2

В предыдущей статье мы узнали, как настроить подсказку, способную генерировать SQL-команды на основе запросов пользователя.

Теперь мы увидим, как использовать Azure OpenAI Studio, чтобы создать конечную точку вывода, которую мы можем вызывать для генерации SQL-команд.

Хотя, если вы читаете эти строки, вероятно, вы уже соответствуете требованиям, я напомню вам, что необходимо иметь:

  • Вам потребуется подписка Azure, которая является бесплатной и поставляется с начальными бесплатными кредитами при первой регистрации. Создайте подписку Azure.
  • Вам также потребуется получить доступ к ресурсам OpenAI. В настоящее время Microsoft сократили требования и времена ожидания. Форма заявки может показаться более запутанной, чем она есть на самом деле. Я запросил доступ, используя электронную почту, зарегистрированную на домене, и указал, что хочу получить информацию для курса. Они предоставили мне доступ практически сразу. Запросите доступ к Azure OpenAI Studio.

Вероятно, в скором времени потребность в запросе доступа исчезнет. Так что я бы все равно попробовал, даже если вы не подали заявку на разрешение.

Настройка Azure OpenAI Studio.

Мы можем получить к нему прямой доступ из портала Azure: https://portal.azure.com/#home

Однажды внутри сервисов, нам нужно выбрать Azure AI Services.

Мы нажимаем на Azure OpenAI Account.

На этом экране нам нужно выбрать Подписку. Если у вас есть студенческая подписка, скорее всего она не будет работать. Создайте другую.

Для группы ресурсов я бы создал новую. Вы можете назвать ее любым именем, которое вам нравится. Это всего лишь логическая группировка, которая объединяет все ресурсы в одну группу. Таким образом, удаление группы позволит удалить все созданные ресурсы без воздействия на другие проекты или группы. Поскольку это всего лишь временный проект, хорошая практика заключается в его удалении в конце, чтобы избежать дополнительных затрат.

Для региона, я бы выбрал тот, который находится ближе к вашему местоположению. Azure покажет вам только регионы, где доступны службы OpenAI.

Для имени выберите уникальное имя для вашего проекта

Для уровня ценообразования выберите Standard S0. Вероятно, это единственный доступный вариант для вас.

С помощью этого вы можете нажать кнопку Review+Create, проверить данные и начать пользоваться услугой.

Настройка займет несколько минут, и когда она будет завершена, вы увидите экран, похожий на этот:

Нажмите на Перейти к ресурсу.

Теперь вы можете создать новое развертывание в разделе Размещение моделей. Просто дайте ему имя и выберите модель: GPT-3.5-Turbo.

Всего за несколько секунд Azure OpenAI Studio будет готовить развертывание.

Просто щелкните по имени развертывания, чтобы начать работу.

В разделе Песочница выберите Чат и начните вводить свой запрос.

Мы создали запрос, следуя документу “Как использовать промпты LLM для текстового SQL: исследование в настройках нулевого запуска, в одной области и в перекрестной области.

create table employees(        ID_Usr INT primary key,        name VARCHAR);    /*3 примерных строки    select * from employees limit 3;    ID_Usr    name    1344      George StPierre    2122      Jon jones    1265      Anderson Silva    */    create table salary(        ID_Usr INT,        year DATE,        salary FLOAT,        foreign key (ID_Usr) references employees(ID_Usr));    /*3 примерных строки    select * from salary limit 3    ID_Usr    date          salary    1344      01/01/2023    61000    1344      01/01/2022    60000    1265      01/01/2023    55000    */    create table studies(        ID_study INT,        ID_Usr INT,        educational_level INT,  /* 5=phd, 4=Master, 3=Bachelor */        Institution VARCHAR,        Years DATE,        Speciality VARCHAR,        primary key (ID_study, ID_Usr),        foreign key(ID_Usr) references employees (ID_Usr));    /*3 примерных строки    select * from studies limit 3    ID_Study ID_Usr educational_level Institution    Years       Speciality    2782     1344   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    2334     1344   5                 MIT            01/01/2023  Phd. Data Science.    2782     2122   3                 UC San Diego   01/01/2010  Bachelor of Science in Marketing    */-Сохраняйте порядок SQL простым и эффективным, используя действительный SQL Lite, ответьте на следующие вопросы для предоставленной таблицы. Вопрос: Сколько сотрудников у нас с зарплатой больше 50000?SELECT COUNT(*) AS total_employeesFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000;  Вопрос: Вернуть имена трех человек, у которых был наибольший рост зарплаты за последние три года.SELECT e.nameFROM employees eJOIN salary s ON e.ID_usr = s.ID_usrWHERE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)GROUP BY e.nameORDER BY (MAX(s.salary) - MIN(s.salary)) DESCLIMIT 3;Вопрос: Имя самого высокооплачиваемого сотрудника.

Это наш полный запрос. Нам понадобится разделить его на части, чтобы поместить каждый раздел в соответствующую его коробку.

В коробке Системное сообщение мы разместим весь запрос, за исключением примеров:

создать таблицу employees (ID_Usr INT primary key, name VARCHAR); /*3 примеры строк select * from employees limit 3; ID_Usr name 1344      George StPierre 2122      Jon jones 1265      Anderson Silva */ создать таблицу зарплаты (ID_Usr INT, year DATE, зарплата float, внешний ключ (ID_Usr) ссылается на employees (ID_Usr)); /*3 примеры строк select * from зарплата limit 3 ID_Usr дата зарплата 1344      01/01/2023    61000 1344      01/01/2022    60000 1265      01/01/2023    55000 */ создать таблицу studies (ID_study INT, ID_Usr INT, educational_level INT, /* 5=phd, 4=мастер, 3=бакалавр */ учебное заведение VARCHAR, года дата, специальность VARCHAR, первичный ключ (ID_study, ID_Usr), внешний ключ (ID_Usr) ссылается на employees (ID_Usr)); /*3 примеры строк select * from studies limit 3 ID_Study ID_Usr уровень_образования учебное заведение года специальность 2782     1344   3                 UC San Diego   01/01/2010  Бакалавр наук по маркетингу 2334     1344   5                 MIT            01/01/2023  Докторфилософия. Data Science. 2782     2122   3                 UC San Diego   01/01/2010  Бакалавр наук по маркетингу */-Следуйте простому и эффективному порядку SQL, используя действительный SQL Lite, ответьте на следующие вопросы по предоставленной таблице.

В этом разделе мы предоставили структуру базы данных, некоторые примеры ее содержимого и инструкции для модели по генерации SQL-запросов.

Теперь пришло время заполнить раздел Примеры примерами из нашего запроса. В исходном запросе у нас их два:

Вопрос: Сколько у нас сотрудников с зарплатой больше 50000?SELECT COUNT(*) AS total_employeesFROM employees eINNER JOIN salary s ON e.ID_Usr = s.ID_UsrWHERE s.salary > 50000;  Вопрос: Вернуть имена трех человек, у которых был самый высокий прирост зарплаты за последние три года.SELECT e.nameFROM employees eJOIN salary s ON e.ID_usr = s.ID_usrWHERE s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)GROUP BY e.nameORDER BY (MAX(s.salary) - MIN(s.salary)) DESCLIMIT 3;Вопрос: Имя самого высокооплачиваемого сотрудника.

Как вы можете видеть, мы создали по одному примеру для каждого запроса. Эта техника известна как few-shot sampling и позволяет модели понять, как она должна отвечать на пользовательские запросы.

Оптимальное количество примеров обычно варьируется от одного до шести; добавление большего количества примеров может не иметь значительного положительного влияния на ответ модели.

Мы также можем изменить настройки гиперпараметров.

Для генерации кода рекомендуется использовать температуру 0. Нет необходимости, чтобы модель была слишком изобретательной со своими ответами.

Пора начать играть и тестировать запросы.

Отсюда, если нам нравятся ответы, мы можем сделать две вещи:

  • Экспортировать конфигурацию. Это сохранит файл, который мы можем использовать для повторной настройки Playground.
  • Щелкнуть See Code, и он предоставит пример кода для вызова нашей модели.

Вызов служб Azure OpenAI из блокнота.

Блокнот доступен в репозитории курса по Большим языковым моделям на Github.

Курс по большим языковым моделям/P1-NL2SQL/NL2SQL_OpenAI_Azure.ipynb на главной странице ·…

Практический курс по большим языковым моделям. Внести вклад в курс по блокнотам больших языковых моделей перемартра/курс по блокнотам больших языковых моделей…

github.com

Давайте начнем с установки и импорта библиотеки OpenAI.

#Установка openai!pip install -q "openai<1.0.0"import osimport openai

Теперь нам нужно настроить доступ к Azure.

#Конфигурация Azureopenai.api_type = "azure"#Здесь указана точка вывода, которую можно получить из Azureopenai.api_base = "https://openaicourseperemartra.openai.azure.com/"openai.api_version = "2023-07-01-preview"openai.api_key = "ваш_ключ_azure_openai"

Сообщите подсказку:

context = [ {'role':'system', 'content':"""создать таблицу employees(    ID_Usr INT primary key,    name VARCHAR);/* 3 примерных строксделать выборку * from employees limit 3;ID_Usr    name1344      George StPierre2122      Jon jones1265      Anderson Silva*/создать таблицу salary(    ID_Usr INT,    year DATE,    salary FLOAT,    foreign key (ID_Usr) references employees(ID_Usr));/* 3 примерных строксделать выборку * from salary limit 3ID_Usr    date          salary1344      01/01/2023    610001344      01/01/2022    600001265      01/01/2023    55000*/создать таблицу studies(    ID_study INT,    ID_Usr INT,    educational_level INT,  /* 5=phd, 4=Master, 3=Бакалавр */    Institution VARCHAR,    Years DATE,    Speciality VARCHAR,    primary key (ID_study, ID_Usr),    foreign key(ID_Usr) references employees (ID_Usr));/* 3 примерных строксделать выборку * from studies limit 3ID_Study ID_Usr educational_level Institution    Years       Speciality2782     1344   3                 UC San Diego   01/01/2010  Бакалавр науки по маркетингу2334     1344   5                 MIT            01/01/2023  Phd. Data Science.2782     2122   3                 UC San Diego   01/01/2010  Бакалавр науки по маркетингу*/-Сделайте SQL-запрос простым и эффективным, используя допустимый SQL Lite, ответьте на следующие вопросы для предоставленной выше таблицы. Вопрос: Сколько у нас сотрудников с зарплатой больше 50000?ВЫБРАТЬ COUNT(*) КАК total_employeesFROM employees eВНУТРЕННЕЕ СОЕДИНЕНИЕ salary s по e.ID_Usr = s.ID_UsrГДЕ s.salary > 50000;Вопрос: Вернуть имена трех человек, которые имели наибольшее увеличение зарплаты за последние три года.ВЫБРАТЬ e.nameFROM employees eСОЕДИНЕНИЕ salary s по e.ID_Usr = s.ID_UsrГДЕ s.year >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)ГРУППИРОВАТЬ ПО e.nameУПОРЯДОЧИТЬ ПО (MAX(s.salary) - MIN(s.salary)) DESCLIMIT 3;"""} ]

Я собираюсь создать функцию, чтобы инкапсулировать вызов API OpenAI.

#Функция для вызова модели.def return_CCRMSQL(user_message, context):    newcontext = context.copy()    newcontext.append({'role':'user', 'content':"question: " + user_message})    response = openai.ChatCompletion.create(      engine="GPT3NL2SQLSample1Deployment", #Наше развертывание      messages = newcontext,      temperature=0,      max_tokens=800)    return (response.choices[0].message["content"])

Теперь мы можем приступить к необходимым тестам и получить SQL-код для запроса нашей базы данных:

context_user = context.copy()print(return_CCRMSQL("The name of the employee best paid", context_user))

SELECT e.name FROM employees e JOIN salary s ON e.ID_usr = s.ID_usr WHERE s.salary = (SELECT MAX(salary) FROM salary); Этот запрос вернет имя сотрудника с самой высокой зарплатой.

print(return_CCRMSQL("Return the Institution with a higher average salary", context_user))

SELECT st.Institution, AVG(sa.salary) AS avg_salary FROM studies st JOIN employees e ON st.ID_Usr = e.ID_Usr JOIN salary sa ON e.ID_Usr = sa.ID_Usr GROUP BY st.Institution ORDER BY avg_salary DESC LIMIT 1;

Выводы.

После определения необходимого промпта, конфигурирование служб Azure OpenAI и использование моделей OpenAI, размещенных на Azure, вместо OpenAI API – это простая задача.

Выбор между использованием одного или другого зависит от решений вашей компании. Модели OpenAI, используемые через службы Azure OpenAI, не находятся внутри OpenAI. Другими словами, предоставленные вами данные никогда не покидают вашу учетную запись Azure и никогда не будут использованы для обучения будущих моделей OpenAI.

С технической точки зрения различия минимальны и сложности практически нет.

Ресурсы.

Весь курс о Больших языковых моделях доступен на Github. Чтобы быть в курсе новых статей, рассмотрите возможность следовать за репозиторием или поставить ему звезду. Таким образом, вы будете получать уведомления о появлении нового контента.

GitHub – peremartra/Large-Language-Model-Notebooks-Course: Практический курс о Больших языковых моделях…

Практический курс о Больших языковых моделях. . Сотрудничайте с peremartra/Large-Language-Model-Notebooks-Course…

github.com

Используемый в решениях промпт основан на статье ‘How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings.

Эта статья является частью серии, в которой мы исследуем практические применения Больших языковых моделей. Вы можете найти остальные статьи в следующем списке:

Pere Martra

Pere Martra

Практический курс по Большим языковым моделям

Посмотреть список12 историй

Я регулярно пишу о глубоком обучении и искусственном интеллекте. Рассмотрите подписку на VoAGI, чтобы получать обновления о новых статьях. И, конечно же, вы можете связаться со мной в LinkedIn и Twitter.