Главная / Статьи

От демонстраций преобразования данных из NL в SQL до ассистента для анализа с данными ИИ в изолированной среде

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

Издатель: REACTAPP.TOP4 мин чтения1006 слов

Источники: From “Natural Language to SQL” to a Secure AI Analytics Assistant: An Architecture Evolution

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

Исходная проблема

У бизнес-пользователей есть вопросы — «средняя цена дома по городам», «десять самых дорогих недвижимостей», «максимальная цена за квадратный фут» — но у них нет навыков SQL. Очевидным решением является преобразование естественного языка в SQL: задать вопрос на английском, сгенерировать запрос и выполнить его.

Версия один: простое преобразование естественного языка в SQL

Ранние версии генерируют SQL на основе вопроса и выполняют его в хранилище данных. Демонстрации производят впечатление. Затем кто-то просит выполнить расчёт, который плохо описуется SQL, или модель выдумывает новую колонку, или тщательно составленный запрос пытается выполнить команду DROP TABLE.

SELECT city, AVG(house_price) AS avg_price
FROM house_pricing
GROUP BY city;
SELECT department, AVG(salary) FROM employees GROUP BY department;
result = (
df.groupby("department")["salary"]
.mean()
.reset_index()
)
import os
os.remove("file.csv")
import subprocess
subprocess.run(…)

Полный отказ от SQL

Более гибкий подход: позвольте модели писать короткие скрипты на Python с использованием ограниченного API для работы с таблицами вместо простых строк SQL. Это открывает возможности для анализа в стиле pandas, но также увеличивает риски при отсутствии контроля за выполнением.

Обеспечение надежности запросов

Надежные запросы означают:

  • карточки схем, содержащие только разрешенные таблицы/столбцы
  • примеры безопасных шаблонов в формате нескольких примеров
  • явный отказ, если в запросе требуются запрещенные поля
  • структурированный вывод (блоки кода или JSON), который можно парсить

Самая важная проблема: выполнение кода, сгенерированного ИИ

Выполнение кода является ключевым элементом безопасности. Никогда не запускайте код модели в процессе приложения с полными привилегиями. Используйте песочницу: отсутствие доступа в сеть, ограниченные ресурсы CPU/памяти, разрешенный список импортов, таймауты и режим чтения только утвержденных наборов данных.

Многоуровневая защита

Многоуровневые механизмы защиты:

  1. Брандмауэр запросов — блокировка попыток обхода защиты и запросов, выходящих за рамки допуска
  2. Список разрешенных схем — модель видит только утвержденные поля
  3. Статические проверки — запрет на импорт, операции ввода-вывода с файлами, использование функции eval и подпроцессов
  4. Среда выполнения в песочнице — изоляция процесса выполнения
  5. Ограничения результатов — лимиты по количеству строк/байт перед возвратом к интерфейсу
  6. Журнал аудита — кто сделал запрос, какой код был выполнен и что было возвращено

Обеспечение устойчивости, а не только безопасности

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

Сформировавшаяся архитектура

Gateway → policy → planner/prompt → sandboxed executor → formatter → audit. SQL может по-прежнему использоваться в качестве внутреннего инструмента для простых фильтров, но Python-in-a-box справляется со сложными аналитическими задачами, не позволяя выполнять произвольные запросы.

Почему именно этот проект оказался более интересным

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

Необходимо создать «золотой набор»: запросы добронамеренные, запросы для проверки схемы и попытки злонамеренного импорта. Сборка должна провалиться, если какой-либо злонамеренный запрос будет выполнен вне сандбокса или если добронамеренный запрос будет ложно отклонен без четкой причины.

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

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

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

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

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

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

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

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

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

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

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

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

Золотой набор тестов: добронамеренные запросы, запросы на проверку схемы и попытки злонамеренного импорта. Сборка считается неудачной, если любой злонамеренный тест выполняется вне песочницы или если добронамеренный тест ложно отклоняет запрос без четкой причины.

Золотой набор тестов: добронамеренные запросы, запросы на проверку схемы и попытки злонамеренного импорта. Сборка считается неудачной, если любой злонамеренный тест выполняется вне песочницы или если добронамеренный тест ложно отклоняет запрос без четкой причины.