paint-brush
Как создать Text2SQL-движок промышленного уровняк@datastax
1,323 чтения
1,323 чтения

Как создать Text2SQL-движок промышленного уровня

к DataStax11m2024/08/13
Read on Terminal Reader

Слишком долго; Читать

Узнайте о роли LLM в text2SQL, обсудите проблемы, присущие этой возможности, и изучите SherloQ — новый движок text2SQL от команды Skypoint.
featured image - Как создать Text2SQL-движок промышленного уровня
DataStax HackerNoon profile picture

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


Но text2SQL, возможность, которая преобразует естественный язык в структурированные операторы языка запросов, изменила правила игры. С text2SQL финансовый руководитель может напрямую взаимодействовать с базой данных, используя естественный язык. Например, пользователь может ввести вопрос, касающийся бизнеса, такой как «Какова была средняя стоимость заказа для каждого клиента в прошлом месяце?»


Механизм искусственного интеллекта Text-to-SQL обработает вопрос и сгенерирует соответствующий SQL-запрос:


Select customer_id, AVG(order_value) AS average_order_value FROM orders WHERE order_date >= DATE_SUB(CURRDATE(), INTERVAL 1 MONTH) GROUP BY customer_id;


Затем выполните его в базе данных и отобразите результаты пользователю.


В этой статье мы объясним роль LLM в text2SQL, обсудим проблемы, присущие этой возможности, и рассмотрим SherloQ — высокоточный и надежный движок text2SQL, разработанный командой Skypoint .

Роль LLM в text2SQL

Возможность преобразования text2SQL значительно улучшилась с помощью больших языковых моделей (LLM). Эти модели используют огромные объемы данных и мощные архитектуры нейронных сетей для понимания и генерации текста, похожего на человеческий. Обучаясь на разнообразных наборах данных, LLM могут обобщать различные задачи, включая перевод естественного языка в запросы SQL.


Например, статья « Языковые модели — это маломощные ученики » демонстрирует, как LLM могут выполнять задачи с минимальными примерами, подчеркивая их способность адаптироваться к новым задачам с ограниченными данными. Такой подход значительно снижает потребность в обширных данных, специфичных для задач, что упрощает развертывание LLM в различных приложениях.


" Spider: крупномасштабный набор данных, маркированный человеком, для комплексного и кросс-доменного семантического анализа и задачи преобразования текста в SQL " предоставляет комплексный набор данных для обучения и оценки моделей на сложных SQL-запросах в различных доменах. Этот набор данных сыграл решающую роль в продвижении современного уровня в text2SQL, предоставив надежный бенчмарк для производительности модели.


Кроме того, в статье « PALM: масштабирование языкового моделирования с помощью путей » рассматривается, как передовые методы обучения, такие как масштабирование размеров моделей и оптимизация путей обучения, могут повысить производительность моделей в различных приложениях, включая text2SQL.


Хотя эти LLM очень эффективны в контролируемых средах, они часто сталкиваются с трудностями в производственных условиях. К ним относятся обработка неоднозначных запросов, управление сложными схемами баз данных и обеспечение производительности в реальном времени. Кроме того, интеграция этих моделей в существующие системы требует значительных усилий и постоянного обслуживания для адаптации к изменяющимся данным и требованиям пользователей. Вот три LLM, которые хорошо подходят для этой задачи:

SQLкодер

Основная цель SQLcoder — преобразовать ввод на естественном языке в запросы SQL. В отличие от других моделей общего назначения, SQLCoder был усовершенствован на данных, специфичных для SQL, поэтому он особенно эффективен для понимания и генерации запросов SQL. SQLCoder демонстрирует заметную производительность на наборе данных Spider, сложном и кросс-доменном бенчмарке для систем text2SQL.


SQLCoder генерирует правильный SQL-запрос для новых схем, не встречавшихся в обучении, с точностью 64,6% . Он превосходит GPT-3.5-turbo и text-davinci-003, которые являются моделями, превышающими его размер более чем в 10 раз. Это подчеркивает способность SQLCoder обрабатывать разнообразные и сложные SQL-запросы, что имеет решающее значение для производственных сред.

GPT 3.5/GPT 4

GPT-3.5 и GPT-4 (Generative Pre-trained Transformer) — одни из самых продвинутых и эффективных моделей языка общего назначения. Обе модели отлично справляются с обучением за несколько попыток, быстро адаптируясь к новым задачам с минимальным количеством примеров, что идеально подходит для создания SQL-запросов из ограниченного количества входных данных.


Например, при оценке на основе набора данных Spider процент правильно сгенерированных SQL-запросов для новых схем, не встречавшихся при обучении, у GPT-3.5-turbo составляет 60,6%, тогда как у GPT-4 этот показатель достигает 74,3%.


Эти модели демонстрируют надежную производительность, особенно в понимании контекста и генерации точных SQL-запросов из сложных входных данных на естественном языке. Однако их универсальный дизайн иногда требует дополнительной тонкой настройки для получения оптимальных результатов в специализированных приложениях, таких как генерация SQL.

PaLM SQL

PaLM (Pathways Language Model) SQL — еще одна мощная модель, разработанная Google. Расширенные возможности и архитектура PaLM SQL делают ее высокоэффективной в переводе естественного языка в запросы SQL и обработке сложных и разнообразных схем баз данных с большей точностью.


Несмотря на достижения в области LLM, полагаться на одного LLM для text2SQL в производстве может быть проблематично. Одна модель не сможет эффективно обрабатывать широкий спектр запросов, схем баз данных и требований к задержкам в реальном времени среды корпоративных данных.


Производственные среды требуют надежности, адаптивности и способности справляться с неоднозначными запросами реальных бизнес-пользователей. Поэтому движок text2SQL должен обладать тремя свойствами, чтобы считаться продуктивным:


Способность понимать различные формулировки запросов . Синтаксически различные пользовательские запросы могут быть сведены к одному и тому же SQL-запросу; хороший движок text2SQL должен понимать мотивацию, лежащую в основе пользовательского запроса, учитывая контекст модели данных, и формулировать SQL-запрос соответствующим образом.


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


Хороший движок text2SQL должен иметь возможность устранять неоднозначность модели данных для пользователя и гарантировать, что шум и неоднозначность не приведут к галлюцинациям — характеристике современных LLM, которая отпугивает многих пользователей в производственной среде.


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

Представляем SherloQ

SherloQ — это text2SQL-движок Skypoint, который переводит запросы с естественного языка на SQL. Хотя использование собственного (LLM) для генерации запросов является значительной частью его архитектуры, эффективность SherloQ обусловлена сочетанием передовых компонентов, разработанных для улучшения возможностей запросов данных. SherloQ может похвастаться высокой точностью перевода запросов, надежной обработкой ошибок и бесшовной интеграцией с производственными системами баз данных, что делает его подходящим для крупномасштабных сред данных.



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

Архитектурные компоненты SherloQ

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




Пользовательский ввод . Пользовательский ввод представляет собой запрос на естественном языке.


Агент состояния Eeecutor — наша реализация интерфейса LangChain, который отслеживает состояние на протяжении всего процесса выполнения. Он использует Redis и DataStax Astra DB для отслеживания состояния рассуждений и памяти во время выполнения. Исполнитель управляет потоком операций, координируя работу различных модулей.


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


State tool — расширенный класс Langchain Base Tool, который имеет переменную состояния и передает это состояние соответствующему инструменту. Поддерживая переменную состояния, state tool отслеживает необходимые данные, которые необходимо передать соответствующим инструментам. Это обеспечивает согласованность потока данных, предотвращая потерю информации при переходе между агентами.


Государственные инструменты SherloQ :

  • Инструмент генерации запросов использует извлеченные запросы с несколькими выстрелами, контекст модели данных и схему БД для генерации начального запроса SQL. Он повышает точность и релевантность сгенерированных запросов SQL, используя проанализированную информацию о схеме и обучаясь на контекстных примерах.


  • Инструмент повтора анализирует все ошибки, возникающие во время выполнения запроса, и повторно создает запрос, устраняющий ошибку.


  • Инструмент DB помогает извлечь схему базы данных и соответствующие метаданные (аннотации, комментарии и т. д.), которые будут полезны для генерации запроса. Извлеченная информация о схеме кэшируется с использованием механизма кэширования на основе времени для оптимизации производительности и сокращения запросов к базе данных. Он также выполняет запрос к базе данных и возвращает результаты или трассировку стека ошибок.

Ввод данных и методы повышения производительности SherloQ

Для повышения производительности SherloQ мы используем несколько методов и предоставляем модели важные входные данные. Они состоят из структурированной декомпозиции, примеров с небольшим количеством снимков, поиска контекста модели данных, отражения и механизма повторных попыток. Каждая часть имеет важное значение для улучшения способности модели создавать точные и релевантные SQL-запросы из входных данных на естественном языке.

Структурированная декомпозиция

В структурированной декомпозиции запрос пользователя разбивается на основные части. Фокусировка на основных компонентах запроса и их идентификация помогают модели производить точный SQL. Например:


Ввод: Каково текущее количество всех товаров, поставляемых корпорацией XYZ?

Вывод: ["текущее доступное количество", "все товары", "поставляется XYZ Corp"]

Примеры нескольких снимков

Модели даны контрольные вопросы в виде нескольких примеров SQL, которые помогают ей генерировать SQL-запросы на основе похожих шаблонов. Эти примеры улучшают способность модели точно генерировать новые SQL-запросы для различных подсказок, помогая ей распознавать структуру и формат предполагаемых запросов. Вот несколько примеров:


Пример 1

Ввод: Показать товары, количество которых составляет менее 20 единиц.

Вывод: SELECT * FROM stock WHERE Quantity_Available < 20;


Пример 2

Ввод: Перечислите поставщиков с товарами стоимостью выше 100 долларов США.

Вывод: SELECT * FROM vendors WHERE Vendor_ID IN (SELECT Vendor_ID FROM items WHERE Unit_Price > 100);


Мы динамически выбираем несколько наиболее похожих примеров снимков, используя сопоставление семантического сходства из Astra DB , которая является нашей векторной базой данных. Векторная база данных позволяет нам находить примеры, которые по структуре и содержанию наиболее близки к новому входному запросу, гарантируя, что модель может использовать наиболее релевантные шаблоны для генерации точных SQL-запросов.


В нашей производственной среде мы в среднем имеем около двух примеров few-shot на запрос. По нашему опыту, простое добавление большего количества примеров few-shot для повышения точности не является масштабируемой практикой.

Контекст модели данных

Контекст модели данных содержит сведения, специфичные для домена, которые могут быть полезны при создании SQL-запроса. Например, в контексте финансовых данных для сети больниц это могут быть такие вещи, как коды финансовых метрик и их описания. Этот контекст используется моделью, чтобы убедиться, что созданные SQL-запросы соответствуют структуре данных домена. Включение контекста модели данных является необязательным и требуется только в том случае, если таблица сложная и требует знания домена для формирования SQL-запроса.


Например:

Коды метрик: «MGMTFEE» -> Описание: «Плата за управление недвижимостью – Плата за управление»

Схема базы данных SQL

Схема SQL DB — это структурированное представление доступных данных. Схема обогащается аннотированием как таблицы, так и ее столбцов. Она включает имена и описания таблиц, а также столбцы, их описания и типы данных.


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

Отражение

Рефлексия относится к способности модели оценивать и оценивать свои прошлые ответы, поведение или сгенерированный контент. Она позволяет модели совершенствовать свои ответы, выявляя и исправляя ошибки или слабые стороны. Процесс включает рассмотрение запросов, ранее просмотренных движком Sherloq, а также обратную связь на этапе генерации запросов.


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

Механизм повтора

SherloQ включает механизм повтора, использующий ошибки, полученные из базы данных. Когда сгенерированный SQL-запрос приводит к ошибке, движок использует агента с предопределенным шаблоном для исправления запроса:


“””

Ваша задача — исправить неверный SQL-запрос, сгенерированный из вопроса, чтобы сделать его совместимым с ANSI SQL. Следуйте этим рекомендациям: тщательно проанализируйте вопрос, схему базы данных и полученное сообщение об ошибке, чтобы обеспечить точность ответов. Используйте псевдонимы таблиц, чтобы избежать путаницы.


Например, SELECT t1.col1, t2.col1 FROM table1 AS t1 JOIN table2 AS t2 ON t1.id = t2.id .


При расчете пропорций всегда преобразуйте числитель в число с плавающей точкой. Используйте следующий формат:

Задача:

Создайте SQL-запрос для ответа на вопрос [QUESTION] {user_input} [/QUESTION] Корректный запрос: {sql_query} Сообщение об ошибке, полученное во время последнего выполнения: {error_message}

Ответ:

На основе приведенных выше входных данных, вот исправленный SQL-запрос: {response_sql} “””

Сравнение результатов: до и после внедрения SherloQ

Используя передовые LLM и хорошо спроектированную систему, SherloQ создает SQL-запросы, которые более точны и соответствуют контексту. Здесь мы сравниваем результаты пользовательских подсказок до и после SherloQ, используя метрики задержки и точности.

Сравнение с использованием одного производственного вопроса

Здесь мы рассмотрим одного из наших клиентов по производству, известного оператора домов престарелых. Одним из вариантов использования является использование их финансовой командой платформы Skypoint для понимания и обоснования консолидированных финансовых показателей их различных домов престарелых.


Запрос пользователю: «Определите квартальную тенденцию расходов на ведение домашнего хозяйства для управления объектом в течение 2022 года».


До SherloQ

  • Сгенерированный запрос

    • ВЫБРАТЬ СУММУ(Числитель_общей_суммы) / СУММУ(Знаменатель_общей_суммы) КАК Расходы_на_хозяйство ИЗ skypoint_metric_fact_denormalized_vw ГДЕ Название_объекта = 'CM' И Год = 2022 И Название_метрики = 'Расходы на_хозяйство' ГРУППИРОВАТЬ ПО Номер_квартала';


  • Выявленные проблемы

    • Запрос группирует по Quarter_Number, но не выбирает его, что может привести к неполным результатам.

    • Использование Metric_Name вместо более конкретного идентификатора, например Metric_Code.

    • Потенциальное деление на ноль не обрабатывается в SUM(Total_Amount_Denominator).


  • Средняя задержка: 29 секунд

    В настройках до SherloQ использовалась комбинация GPT-3.5 с разработкой подсказок и 5+ запросов с небольшим количеством попыток на подсказку пользователю.


С SherloQ

  • Сгенерированный запрос
    • ВЫБРАТЬ Год, Номер_квартала, СУММА(Числитель_общей_суммы) / ОБЪЕДИНИТЬ(СУММА(NULLIF(Знаменатель_общей_суммы,0)),1) КАК Расходы_на_хозяйствование ИЗ skypoint_metric_fact_denormalized_vwГДЕ Код_метрики = 'EXPOTHHOU' И Название_объекта = 'CM' И Год = 2022 ГРУППИРОВАТЬ ПО Номер_квартала, Год УПОРЯДОЧИТЬ ПО Номер_квартала ASC;


  • Улучшения отмечены
  • Запрос включает Quarter_Number, обеспечивая необходимую квартальную разбивку.
  • Поле Metric_Code используется для предоставления более точного идентификатора метрики.
  • Функция COALESCE(SUM(NULLIF(Total_Amount_Denominator,0)),1) обрабатывает потенциальные ошибки деления на ноль.
  • Результаты упорядочены по Quarter_Number, чтобы отразить квартальную тенденцию.
  • Средняя задержка: 10 секунд


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

  • До SherloQ
    • Точность: 65%

    • Надежность: 60%


  • С SherloQ
    • Точность: 92%

    • Надежность: 90%


Приведенные выше результаты были получены из внутреннего набора тестов, который выполняет каждый запрос 100 раз с отдельными идентификаторами, чтобы свести на нет эффекты кэширования (в наших внутренних системах, а также в моделях). Набор измеряет точность, сравнивая возвращенный ответ с ответом теста, а надежность — измеряя, как часто он будет возвращать похожие ответы.


Сравнение наглядно иллюстрирует преимущества SherloQ в преобразовании запросов на естественном языке в точные запросы SQL. Общая производительность улучшилась на 30% после SherloQ. Запросы, сгенерированные ранее, страдали от таких проблем, как неполные результаты и отсутствие обработки ошибок, что влияло как на точность, так и на надежность.


С SherloQ сгенерированные запросы более точны, эффективны и надежны, с заметными улучшениями в задержке, точности и надежности. Это улучшение показывает способность SherloQ обеспечивать надежный поиск данных, что делает его ценным инструментом для организаций, стремящихся оптимизировать свои процессы запроса данных.


Чтобы изучить другие части платформы Skypoint или заказать демонстрацию SkyPoint AI, посетите веб-сайт Skypoint .


Алок Радж, ведущий инженер по искусственному интеллекту Skypoint, и Сайандип Саркар, руководитель отдела инжиниринга Skypoint