Головна / Статті

Від демонстрацій перекладу з 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, але також збільшує ризики у разі неконтрольованої експлуатації.

Забезпечення надійності запитів

Надійні запити означають:

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

Найважливіша проблема: виконання коду, створеного ШІ

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

Багатошарова захист

Багатошарові механізми захисту:

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

Створення системи, яка є не лише безпечною, а й стійкою

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

Архітектура, яка виникла

Gateway → політика → планувальник/запит → виконавець у ізольованому середовищі → форматувальник → аудит. SQL все ще може використовуватися як внутрішній інструмент для простих фільтрів, але Python-in-a-box вирішує складні аналітичні завдання, не дозволяючи виконувати довільні запити.

Чому цей проект виявився цікавішим

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

Необхідно створити „золотий набір“: доброзичливі запити, запити для перевірки схеми та спроби зловмисного імпорту. Завершення процесу компіляції має відбутися у разі, якщо будь-який зловмисний запит виконується поза ізольованим середовищем або якщо доброзичливий запит помилково відхиляється без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть золотий набір: доброзичливі запити, запити на перевірку схеми та спроби зловмисного імпорту. Завершіть процес будування у разі, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть «золотий набір»: доброзичливі запити, запити для перевірки схеми та зловмисні спроби імпорту. Завершіть процес будування, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.

Надішліть «золотий набір»: доброзичливі запити, запити для перевірки схеми та зловмисні спроби імпорту. Завершіть процес будування, якщо будь-який зловмисний випадок виконується поза сандбоксом або якщо доброзичливий випадок хибно відхиляє запит без чіткої причини.