Od demonstracji przekładu z NL na SQL po asystenta analitycznego AI w środowisku izolowanym
Od demonstracji przekształceń z NL do SQL do asystenta analityki AI w środowisku izolowanym: listy dozwolonych schematów, sprawdzania statyczne, izolowana eksploatacja, ograniczenia wyników oraz rejestracje audytowe dla każdej zapytania.
Źródła: From “Natural Language to SQL” to a Secure AI Analytics Assistant: An Architecture Evolution
Zezwalanie modelowi językowemu na pisanie i uruchamianie kodu do analiz to problem związany z wielowarstwową ochroną, a nie trik polegający na sformułowaniu odpowiedniego promptu.
Pierwotny problem
Użytkownicy biznesowi mają pytania – „średnia cena domu w poszczególnych miastach”, „dziesięć najdroższych nieruchomości”, „najwyższa cena za metr kwadratowy” – ale nie posiadają umiejętności w SQL. Oczywistym rozwiązaniem jest konwersja z języka naturalnego na SQL: zadanie pytania po angielsku, wygenerowanie zapytania i jego uruchomienie.
Wersja pierwsza: prosta konwersja z języka naturalnego na SQL
We wczesnych wersjach model generuje zapytania SQL na podstawie pytania i wykonuje je w bazie danych. Dema są imponujące. Następnie ktoś prosi o obliczenia, które SQL trudno wyrazić, model wymyśla nową kolumnę lub specjalnie sformułowany prompt próbuje wykonać polecenie 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(…)
Całkowite odejście od SQL
Bardziej elastyczne podejście: niech model pisze krótki kod w Pythonie do ograniczonej API tabel danych zamiast surowych ciągów SQL. To umożliwia analizę w stylu pandas, ale jednocześnie zwiększa ryzyko, jeśli wykonywanie kodu nie jest kontrolowane.
Zapewnienie niezawodności promptów
Niezawodne prompty oznaczają:
- karty schematu zawierające tylko dozwolone tabele/kolumny
- przykłady bezpiecznych wzorców w formie kilku zdań
- wyraźna odmowa, gdy pytanie wymaga użycia niedozwolonych pól
- ustrukturyzowany wynik (blok kodu lub JSON), który można przetworzyć
Najważniejszy problem: wykonywanie kodu generowanego przez LLM
Wykonywanie kodu stanowi granicę bezpieczeństwa. Nigdy nie uruchamiaj kodu modelu w procesie aplikacji z pełnymi uprawnieniami. Użyj środowiska sandbox: brak dostępu do sieci, ograniczona ilość CPU/pamięci, dopuszczone do importu biblioteki, limity czasowe oraz tylko odczytowy dostęp do zatwierdzonych zbiorów danych.
Kładzenie warstw ochronnych
Warstwy obrony wielopoziomowej:
- Firewall promptowy — odrzucanie prób jailbreaku oraz zapytań poza zakresem
- Lista dopuszczalnych schematów — model widzi tylko zatwierdzone pola
- Kontrole statyczne — zakaz importu, operacji wejścia/wyjścia plików,
eval, podprocesów - Sandbox w czasie wykonywania — izolacja procesu wykonawczego
- Ograniczenia wyników — limity wierszy/bajtów przed powrotem do interfejsu
- Log audytowy — kto zadał pytanie, jaki kod został uruchomiony, co zostało zwrócone
Czynienie systemu odpornym, a nie tylko bezpiecznym
Ponawiane próby przy tymczasowych błędach, możliwie deterministyczne wartości wyjściowe, karty schematów w pamięci cache oraz eskalacja do człowieka, gdy model nie może odpowiedzieć bezpiecznie. Bezpieczeństwo bez odporności skutkuje jedynie uprzejmymi błędami.
Architektura, która powstała
Gateway → polityka → planer/wyzwanie → wykonywacz w środowisku izolowanym → formatator → audyt. SQL może nadal być używany jako narzędzie wewnętrzne do prostych filtrów, ale Python-in-a-box radzi sobie z skomplikowanymi zadaniami analitycznymi, nie otwierając magazynu na dowolne zapytania.
Dlaczego to projekt okazał się ciekawszy
NL-to-SQL to demonstracja tłumaczenia. Bezpieczni asystenci analityczni to element inżynierii produktu: modele zagrożeń, środowiska izolowane, listy dozwolonych elementów oraz interfejs użytkownika wyjaśniający odmowy. To praca, którą warto zachować.
Zostaw zestaw „złoty”: pytania nieszkodliwe, pytania służące do badania schematu oraz próby importu złośliwego oprogramowania. Zablokuj proces budowy, jeśli jakikolwiek przypadek złośliwy zostanie wy wykonany poza środowiskiem izolowanym lub jeśli przypadek nieszkodliwy fałszywie odrzuci zapytanie bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.
Zostaw złoty zestaw: pytania łagodne, pytania służące do sprawdzania schematu oraz próby niebezpiecznego importu. Budowa powinna zakończyć się niepowodzeniem, jeśli jakikolwiek przypadek niebezpieczny zostanie wykonyany poza sandboxem lub jeśli przypadek łagodny fałszywie odrzuci prośbę bez jasnego powodu.