Язык структурированных запросов (SQL) — это сложный язык, требующий понимания баз данных и метаданных. Сегодня генеративный искусственный интеллект может помочь людям, не знающим SQL. Эта генеративная задача ИИ называется преобразованием текста в SQL, которая генерирует SQL-запросы на основе обработки естественного языка (NLP) и преобразует текст в семантически правильный SQL. Решение, представленное в этом посте, направлено на то, чтобы вывести операции корпоративной аналитики на новый уровень за счет сокращения пути к вашим данным с использованием естественного языка.
С появлением больших языковых моделей (LLM) генерация SQL на основе NLP претерпела значительную трансформацию. Демонстрируя исключительную производительность, LLM теперь способны генерировать точные SQL-запросы на основе описаний на естественном языке. Однако проблемы все еще остаются. Во-первых, человеческий язык по своей сути неоднозначен и зависит от контекста, тогда как SQL является точным, математическим и структурированным. Этот пробел может привести к неточному преобразованию потребностей пользователя в сгенерированный SQL. Во-вторых, вам может потребоваться создать функции преобразования текста в SQL для каждой базы данных, поскольку данные часто не хранятся в одном целевом объекте. Возможно, вам придется воссоздать возможности для каждой базы данных, чтобы предоставить пользователям возможность генерировать SQL на основе NLP. В-третьих, несмотря на более широкое внедрение решений централизованной аналитики, таких как озера данных и хранилища, сложность возрастает из-за разных имен таблиц и других метаданных, необходимых для создания SQL для нужных источников. Поэтому сбор всеобъемлющих и высококачественных метаданных также остается проблемой. Дополнительные сведения о передовых методах преобразования текста в SQL и шаблонах проектирования см. в разделе Создание ценности из корпоративных данных: лучшие практики для Text2SQL и генеративного искусственного интеллекта.
Наше решение направлено на решение этих проблем с помощью Amazon Bedrock и AWS Analytics Services. В качестве LLM мы используем Anthropic Claude v2.1 на Amazon Bedrock. Чтобы решить эти проблемы, наше решение сначала включает метаданные источников данных в каталог данных AWS Glue, чтобы повысить точность сгенерированного SQL-запроса. Рабочий процесс также включает цикл окончательной оценки и исправления на случай, если Amazon Athena выявит какие-либо проблемы с SQL, который используется в качестве механизма SQL. Athena также позволяет нам использовать множество поддерживаемых конечных точек и соединителей для покрытия большого набора источников данных.
После того, как мы пройдемся по шагам построения решения, мы представим результаты некоторых тестовых сценариев с различными уровнями сложности SQL. Наконец, мы обсудим, как легко включать различные источники данных в ваши запросы SQL.
Обзор решения
В нашей архитектуре есть три важнейших компонента: поисковая расширенная генерация (RAG) с метаданными базы данных, многоэтапный цикл самокоррекции и Athena в качестве нашего механизма SQL.
Мы используем метод RAG для получения описаний таблиц и схем (столбцов) из метахранилища AWS Glue, чтобы гарантировать, что запрос относится к правильной таблице и наборам данных. В нашем решении мы построили отдельные шаги для запуска платформы RAG с каталогом данных AWS Glue в демонстрационных целях. Однако вы также можете использовать базы знаний в Amazon Bedrock для быстрого создания решений RAG.
Многошаговый компонент позволяет LLM корректировать сгенерированный запрос SQL для обеспечения точности. Здесь сгенерированный SQL отправляется на наличие синтаксических ошибок. Мы используем сообщения об ошибках Athena, чтобы обогатить подсказку LLM для более точных и эффективных исправлений в сгенерированном SQL.
Сообщения об ошибках, время от времени поступающие от Athena, можно рассматривать как обратную связь. Стоимость этапа исправления ошибок пренебрежимо мала по сравнению с полученной ценностью. Вы даже можете включить эти корректирующие шаги в качестве примеров усиленного обучения под учителем для более точной настройки ваших LLM. Однако в целях простоты мы не рассматривали этот поток в нашей статье.
Обратите внимание, что всегда существует риск возникновения неточностей, который, естественно, связан с генеративными решениями ИИ. Даже если сообщения об ошибках Athena очень эффективны для снижения этого риска, вы можете добавить дополнительные элементы управления и представления, такие как отзывы пользователей или примеры запросов для тонкой настройки, чтобы еще больше минимизировать такие риски.
Athena не только позволяет нам исправлять SQL-запросы, но и упрощает для нас общую проблему, поскольку она служит концентратором, где лучами являются несколько источников данных. Управление доступом, синтаксис SQL и многое другое осуществляется через Athena.
На следующей диаграмме показана архитектура решения.
Технологическая схема включает в себя следующие этапы:
- Создайте каталог данных AWS Glue с помощью сканера AWS Glue (или другого метода).
- Используя модель Titan-Text-Embeddings в Amazon Bedrock, преобразуйте метаданные во встроенные элементы и сохраните их в бессерверном векторном хранилище Amazon OpenSearch, которое служит нашей базой знаний в нашей платформе RAG.
На этом этапе процесс готов принять запрос на естественном языке. Шаги 7–9 представляют собой цикл коррекции, если применимо.
- Пользователь вводит запрос на естественном языке. Вы можете использовать любое веб-приложение для предоставления пользовательского интерфейса чата. Поэтому мы не стали освещать детали пользовательского интерфейса в нашей статье.
- В решении применяется структура RAG посредством поиска по сходству, который добавляет дополнительный контекст из метаданных из базы данных векторов. Эта таблица используется для поиска правильной таблицы, базы данных и атрибутов.
- Запрос объединяется с контекстом и отправляется в Anthropic Claude v2.1 на Amazon Bedrock.
- Модель получает сгенерированный SQL-запрос и подключается к Athena для проверки синтаксиса.
- Если Athena выдает сообщение об ошибке, в котором упоминается неверный синтаксис, модель использует текст ошибки из ответа Athena.
- Новая подсказка добавляет ответ Афины.
- Модель создает исправленный SQL и продолжает процесс. Эту итерацию можно выполнять несколько раз.
- Наконец, мы запускаем SQL с помощью Athena и генерируем выходные данные. Здесь результат представляется пользователю. В целях архитектурной простоты мы не показали этот шаг.
Предварительные условия
Для этого поста вам необходимо выполнить следующие предварительные условия:
- Иметь учетную запись AWS.
- Установите интерфейс командной строки AWS (AWS CLI).
- Настройте SDK для Python (Boto3).
- Создайте каталог данных AWS Glue с помощью сканера AWS Glue (или другого метода).
- Используя модель Titan-Text-Embeddings на Amazon Bedrock, преобразуйте метаданные во встроенные элементы и сохраните их в бессерверном векторном хранилище OpenSearch.
Внедрить решение
Вы можете использовать следующее Блокнот Юпитер, который включает все фрагменты кода, представленные в этом разделе, для создания решения. Мы рекомендуем использовать Amazon SageMaker Studio, чтобы открыть этот блокнот с помощью экземпляра ml.t3.medium с ядром Python 3 (Data Science). Инструкции см. в разделе Обучение модели машинного обучения. Для настройки решения выполните следующие шаги:
- Создайте базу знаний в OpenSearch Service для платформы RAG:
- Создайте подсказку (
final_question
) путем объединения пользовательского ввода на естественном языке (user_query
), соответствующие метаданные из векторного хранилища (vector_search_match
) и наши инструкции (details
): - Вызовите Amazon Bedrock для LLM (Claude v2) и предложите ему сгенерировать SQL-запрос. В следующем коде он предпринимает несколько попыток, чтобы проиллюстрировать этап самоисправления: x
- Если возникают какие-либо проблемы с сгенерированным SQL-запросом (
{sqlgenerated}
) из ответа Афины ({syntaxcheckmsg}
), новое приглашение (prompt
) генерируется на основе ответа, и модель снова пытается сгенерировать новый SQL: - После генерации SQL вызывается клиент Athena для запуска и генерации выходных данных:
Проверьте решение
В этом разделе мы запускаем наше решение с различными примерами сценариев для тестирования SQL-запросов разных уровней сложности.
Чтобы протестировать преобразование текста в SQL, мы используем два наборы данных доступны на IMDB. Подмножества данных IMDb доступны для личного и некоммерческого использования. Вы можете загрузить наборы данных и сохранить их в Amazon Simple Storage Service (Amazon S3). Вы можете использовать следующий фрагмент Spark SQL для создания таблиц в AWS Glue. Для этого примера мы используем title_ratings
и title
:
Храните данные в Amazon S3, а метаданные — в AWS Glue.
В этом сценарии наш набор данных хранится в корзине S3. Athena имеет разъем S3, который позволяет использовать Amazon S3 в качестве источника данных, к которому можно выполнять запросы.
Для нашего первого запроса мы предоставляем входные данные: «Я новичок в этом. Можете ли вы помочь мне увидеть все таблицы и столбцы в схеме imdb?»
Ниже приведен сгенерированный запрос:
На следующем снимке экрана и в коде показан наш результат.
Для нашего второго запроса мы просим: «Покажите мне все названия и детали в регионе США, рейтинг которого превышает 9,5».
Ниже приведен сгенерированный нами запрос:
Ответ следующий.
Для нашего третьего запроса мы вводим «Отличный ответ! А теперь покажите мне все оригинальные шрифтовые названия с рейтингом выше 7,5 и не из региона США».
Создается следующий запрос:
Мы получаем следующие результаты.
Генерация самокорректируемого SQL
Этот сценарий имитирует запрос SQL, имеющий проблемы с синтаксисом. Здесь сгенерированный SQL будет автоматически корректироваться на основе ответа от Athena. В следующем ответе Афина дала COLUMN_NOT_FOUND
ошибка и упомянул, что table_description
невозможно решить:
Использование решения с другими источниками данных
Если вы хотите использовать решение с другими источниками данных, Athena выполнит эту работу за вас. Для этого Athena использует соединители источников данных, которые можно использовать с федеративными запросами. Соединитель можно рассматривать как расширение механизма запросов Athena. Существуют готовые коннекторы источников данных Athena для таких источников данных, как Amazon CloudWatch Logs, Amazon DynamoDB, Amazon DocumentDB (с совместимостью с MongoDB) и Amazon Relational Database Service (Amazon RDS), а также JDBC-совместимых реляционных источников данных, таких как MySQL и PostgreSQL, в разделе лицензия Apache 2.0. После настройки подключения к любому источнику данных вы можете использовать предыдущую базу кода для расширения решения. Дополнительную информацию см. в разделе Запрос к любому источнику данных с помощью нового интегрированного запроса Amazon Athena.
Очистить
Чтобы очистить ресурсы, вы можете начать с очистки корзины S3, в которой находятся данные. Если ваше приложение не использует Amazon Bedrock, оно не потребует никаких затрат. В целях использования передового опыта управления инфраструктурой мы рекомендуем удалить ресурсы, созданные в этой демонстрации.
Заключение
В этом посте мы представили решение, которое позволяет использовать NLP для генерации сложных SQL-запросов с использованием различных ресурсов, поддерживаемых Athena. Мы также повысили точность генерируемых SQL-запросов с помощью многоэтапного цикла оценки на основе сообщений об ошибках последующих процессов. Кроме того, мы использовали метаданные в каталоге данных AWS Glue, чтобы учитывать имена таблиц, запрашиваемые в запросе через платформу RAG. Затем мы протестировали решение в различных реалистичных сценариях с разными уровнями сложности запросов. Наконец, мы обсудили, как применить это решение к различным источникам данных, поддерживаемым Athena.
Amazon Bedrock находится в центре этого решения. Amazon Bedrock может помочь вам создать множество генеративных приложений искусственного интеллекта. Чтобы начать работу с Amazon Bedrock, мы рекомендуем выполнить быстрый старт, описанный ниже. Репозиторий GitHub и ознакомление с созданием генеративных приложений искусственного интеллекта. Вы также можете попробовать базы знаний в Amazon Bedrock, чтобы быстро создавать такие решения RAG.
Об авторах
Санджиб Панда — инженер данных и машинного обучения в Amazon. Имея опыт работы в области искусственного интеллекта и машинного обучения, науки о данных и больших данных, Санджиб проектирует и разрабатывает инновационные решения для обработки данных и машинного обучения, которые решают сложные технические задачи и достигают стратегических целей для глобальных 3P-продавцов, управляющих своим бизнесом на Amazon. Помимо работы инженером по обработке данных и машинному обучению в Amazon, Санджиб Панда является заядлым гурманом и любителем музыки.
Бурак Гозлуклу — главный специалист по архитектуре решений AI/ML в Бостоне, Массачусетс. Он помогает стратегическим клиентам внедрять технологии AWS и, в частности, решения генеративного искусственного интеллекта для достижения своих бизнес-целей. Бурак имеет докторскую степень в области аэрокосмической техники в METU, степень магистра в области системной инженерии и постдок по системной динамике в Массачусетском технологическом институте в Кембридже, штат Массачусетс. Бурак по-прежнему является научным сотрудником Массачусетского технологического института. Бурак увлечен йогой и медитацией.