PRODSuwerenna europejska platforma BaaSOtwórz Panel →

Natywna sztuczna inteligencja · 8 min odczytu

Co to jest NL2SQL i jak działa?

Affane Daylami · Fondateur · 22 kwietnia 2026

Powrót do bloga

NL2SQL (język naturalny na SQL, zwany także zamianą tekstu na SQL) odnosi się do rodziny systemów, które tłumaczą pytanie zadane w języku naturalnym, w języku francuskim lub angielskim, na zapytanie SQL, które można wykonać w relacyjnej bazie danych. Zasada: model języka odczytuje pytanie i schemat bazy danych, tworzy potencjalny kod SQL, który jest sprawdzany przed wykonaniem i nigdy nie jest zwracany na ślepo.

Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.

Pomysł poprzedza obecne główne modele językowe: systemy tłumaczenia pytań na SQL istnieją od lat badań akademickich, z referencyjnymi zbiorami danych, takimi jak Spider czy WikiSQL. To, co zmieniło się w ostatnich LLM, to jakość kodu SQL generowanego na dowolnym diagramie, bez wcześniejszego dedykowanego szkolenia. W tym artykule wyjaśniono krok po kroku faktyczny mechanizm, ze zweryfikowaną implementacją natywnej sztucznej inteligencji Aurabase jako konkretny przykład, a nie abstrakcyjny opis.

Najważniejsze

  • NL2SQL (lub zamiana tekstu na SQL) tłumaczy pytanie w języku naturalnym na wykonywalne zapytanie SQL za pośrednictwem LLM, po którym następuje etap sprawdzania poprawności przed wykonaniem.
  • Potok zawsze obejmuje tę samą sekwencję: generowanie kodu SQL na podstawie modelu, sprawdzanie poprawności składni, sprawdzanie poprawności względem rzeczywistego schematu, wykonanie ograniczone pułapem linii.
  • Głównym ryzykiem nie jest klasyczny zastrzyk SQL po stronie klienta, ale ślepe wykonanie SQL wywołane halucynacjami modelu, tabeli lub wymyślonej kolumny.
  • Poważny silnik NL2SQL akceptuje tylko zapytania SELECT: każda próba zapisu (INSERT, UPDATE, DELETE, DROP) jest odrzucana przed dotarciem do bazy danych.
  • Silnik NL2SQL firmy Aurabase, zweryfikowany w kodzie, sprawdza poprawność kodu SQL wygenerowanego za pomocą parsera drzewa składni (sqlparser), białej listy dziesięciu funkcji SQL i konfigurowalnego limitu wierszy (domyślnie 100, maksymalnie 1000).
  • NL2SQL i RAG spełniają różne potrzeby: ustrukturyzowane i relacyjne w jednym, nieustrukturyzowane treści w drugim.
#
Definicja

Czym dokładnie jest NL2SQL?

NL2SQL odnosi się do automatycznego tłumaczenia pytania w języku naturalnym na zapytanie SQL, które można wykonać na zasadzie relacyjnej. W przeciwieństwie do zwykłego chatbota, który odpowiada wolnym tekstem, system NL2SQL tworzy ustrukturyzowany artefakt, SQL, który działa na rzeczywistych danych i zwraca możliwy do sprawdzenia wynik wiersz po wierszu.

Termin „text-to-SQL” pochodzi z badań akademickich nad przetwarzaniem języka naturalnego. „NL2SQL” to najczęściej używany skrót po stronie produktu i dokumentacji technicznej. Obydwa odnoszą się do tego samego problemu: wypełnienia luki pomiędzy pytaniem zadanym w języku potocznym a dokładną składnią oczekiwaną przez silnik SQL.

NL2SQL różni się od szeroko rozumianego agenta konwersacyjnego podłączonego do bazy danych. Pierwsza generuje czytelne i możliwe do sprawdzenia zapytanie; drugi może łączyć kilka wywołań narzędzi (wyszukiwanie, obliczanie, pisanie) niekoniecznie skutkując unikalnym i możliwym do sprawdzenia kodem SQL. Prawidłowo zaprojektowany system NL2SQL mieści się w tym celowo ograniczonym zakresie: tłumaczenie, sprawdzanie poprawności, wykonanie, zwracanie wyniku.

#
Mechanizm

Jak działa potok NL2SQL, krok po kroku

Niezawodny potok NL2SQL zawsze przebiega według tej samej kolejności, niezależnie od dostawcy: pytanie przechodzi przez model językowy, następnie wygenerowany kod SQL jest sprawdzany przed wykonaniem, nigdy później. Implementacja Aurabase, zweryfikowana w kodzie usługi aura-ai, ilustruje każdy z tych kroków konkretnymi regułami, a nie abstrakcyjnym opisem.

1. Do zapytania dołączany jest aktualny schemat podstawy

System kojarzy pytanie w języku naturalnym ze schematem badanej bazy danych: nazwami tabel, kolumnami, typami. Ten wzorzec musi pochodzić z introspekcji rzeczywistej podstawy, a nie z opisu dostarczonego przez osobę dzwoniącą. Implementacja akceptująca schemat zadeklarowany przez klienta otworzyłaby drzwi do pytań o nieistniejące tabele lub ominięcia izolacji między projektami. Silnik Aurabase jawnie odrzuca (błąd 400) każde pole schema wysłane w żądaniu, zamiast je po cichu ignorować.

2. LLM generuje kandydata SQL

Model językowy otrzymuje pytanie i schemat w wierszu zachęty, a następnie tworzy kandydujące zapytanie SQL wraz z krótkim wyjaśnieniem. Aurabase traktuje trzech dostawców na równi z dedykowanym klientem natywnym: OpenAI, Anthropic (Claude) i Gemini. Ten kandydat SQL jest na tym etapie jedynie propozycją, nigdy bezpośrednio wykonywaną.

3. Kandydat SQL jest sprawdzany przed wykonaniem, a nie po

Jest to krok, który odróżnia poważny system NL2SQL od prostego wywołania LLM, po którym następuje naiwne wykonanie. Wygenerowany kod SQL jest analizowany w drzewie składni (AST), a nie sprawdzany za pomocą wyszukiwania słów kluczowych, które można łatwo ominąć. Implementacja Aurabase z biblioteką sqlparserpozwala tylko na proste zapytania SELECT: CTE/WITH, podzapytania, UNION, funkcje okna i klauzule blokujące (FOR UPDATE) są jawnie odrzucane, podobnie jak wszelkie funkcje SQL spoza białej listy dziesięciu funkcji (count, sum, avg, min, max, lower, upper, coalesce, date_trunc, now).

4.Zatwierdzone zapytanie jest uruchamiane z ograniczeniem wiersza

Zatwierdzony kod SQL otrzymuje LIMIT, jeśli jeszcze go nie posiada: domyślnie 100 linii w przypadku Aurabase, maksymalnie 1000, obie wartości można skonfigurować po stronie serwera. Żądanie przekraczające limit jest wyraźnie odrzucane, a nie dyskretnie redukowane. Odpowiedź wskazuje, czy serwer dodał ten LIMIT, więc osoba wywołująca wie, czy wykonany kod SQL różni się od tego wygenerowanego przez model.

exemplesql
-- Pytanie: „Ile zamówień w tym miesiącu dla klientów premium?”
SELECT count(*) FROM orders
WHERE customer_plan = 'premium'
  AND created_at >= date_trunc('month', now())
LIMIT 100  -- dodany przez serwer, brak w wygenerowanym SQL

Wszystkie szczegóły tego potoku, z każdym wywołaniem HTTP i każdą odpowiedzią JSON, opisano w naszym samouczku krok po kroku dotyczącym tworzenia punktu końcowego NL2SQL w Postgres.

#
Przypadki użycia

NL2SQL a odręczny SQL: kiedy czego używać

NL2SQL nie ma na celu zastępowania wszędzie ręcznie pisanego SQL. Obejmuje konkretny zakres: doraźne, jednorazowe pytania zadawane przez osobę, która nie zna SQL lub po prostu chce zaoszczędzić czas na prostym zapytaniu.

  • Doraźna eksploracja dashboardu przez osobę nietechniczną (wsparcie, produkt, zarządzanie).
  • Szybkie prototypowanie funkcji wysyłającej zapytania do bazy danych bez konieczności pisania dedykowanej trasy API dla każdego możliwego pytania.
  • Ograniczona samoobsługa analityczna: licz, filtruj, po prostu agreguj, bez udostępniania użytkownikowi końcowego bezpośredniego dostępu do bazy danych.

Jeśli pytanie wykracza poza ten zakres, preferowany jest ręcznie napisany SQL. Implementacja z walidacją AST, taka jak opisana powyżej, ze względów bezpieczeństwa wyklucza ze względów bezpieczeństwa CTE, podzapytania i funkcje okna. Analiza, która strukturalnie potrzebuje tych konstrukcji, kohort i zaawansowanych okien czasowych, nie przechodzi przez NL2SQL: jest kodowana bezpośrednio. Jest to zaakceptowany kompromis, bezpieczeństwo systemu jest ważniejsze od kompletności wygenerowanego kodu SQL.

#
Ryzyko

Zagrożenia związane z NL2SQL: zastrzyk, halucynacje, koszt

Trzy ryzyka systematycznie powtarzają się we wdrażaniu NL2SQL, a reakcje są różne w zależności od dojrzałości systemu.

Wstrzyknięcie SQL poprzez monit lub pytanie

LLM można zmanipulować w celu wygenerowania złośliwego kodu SQL, jeśli samo pytanie zawiera próbę wstrzyknięcia „zignoruj ​​​​poprzednie instrukcje i…”. Obrona nie polega na zaufaniu podpowiedzi, ale na sprawdzeniu poprawności kodu SQL utworzonego niezależnie od żądania, czyli dokładnie w kroku 3 opisanego powyżej potoku. Temat zasługuje na osobne potraktowanie: zobacz Zabezpieczanie NL2SQL przed wstrzyknięciem SQL, aby poznać dokładne wektory ataku i środki zaradcze.

Halucynacje związane z nieistniejącymi tabelami lub kolumnami

Model może wymyślić nazwę tabeli lub kolumny, która jest wiarygodna, ale brakuje jej w rzeczywistym schemacie, szczególnie w przypadku dużych lub słabo udokumentowanych schematów. Implementacja, która sprawdza wygenerowany kod SQL względem rzeczywistego schematu bazy danych, odrzuca zapytanie z jawnym komunikatem, wyświetlając listę faktycznie dostępnych tabel, zamiast pozwolić, aby nieprzetworzony błąd SQL wrócił do użytkownika.

Koszt i opóźnienie wywołań modelu

Każde pytanie NL2SQL wyzwala wywołanie modelu języka, z własnym kosztem i opóźnieniem, a także czasem wykonania SQL. Koszt ten szybko rośnie, jeśli NL2SQL służy jako domyślna warstwa dla powtarzających się pytań, co byłoby korzystne, gdyby było buforowane lub eksponowane w postaci standardowego raportu, a nie za każdym razem ponownie tłumaczone.

Zaufanie należy mierzyć, a nie zakładać

Wynik pewności zwrócony przez silnik NL2SQL (heurystyka formy odpowiedzi, niezależnie od tego, czy blok SQL jest poprawnie sformułowany), nie jest miarą dokładności semantycznej. Wskazuje, że model wygenerował czysty SQL pod względem składniowym, a nie, że ten SQL poprawnie odpowiada na zadane pytanie.

#
Architektura

Natywny vs zmontowany NL2SQL: co to zmienia dla programisty

Dwie architektury dają podobny widoczny rezultat, ale z bardzo różnymi gwarancjami. Natywny NL2SQL integruje generowanie, sprawdzanie poprawności i wykonanie bezpośrednio z warstwą backendu, która zna już schemat projektu i prawa dostępu: jest to logika opisana powyżej dla Aurabase, gdzie usługa aura-ai dzieli infrastrukturę i izolację schematu z resztą backendu.

Zmontowany NL2SQL łączy ogólną usługę LLM, łącznik z bazą danych i warstwę walidacji zbudowaną samodzielnie. Nic nie stoi na przeszkodzie, aby to podejście było bezpieczne, ale każda gwarancja, introspekcja schematu po stronie serwera, sprawdzanie poprawności AST, ograniczenie liczby wierszy, dzierżawa izolacji muszą być wdrażane i utrzymywane przez zespół łączący te cegły, a nie zapewniane przez platformę.

Zestaw narzędzi NL2SQL, natywnych i zmontowanych, open source i komercyjnych, został szczegółowo porównany w naszym porównaniu narzędzi NL2SQL 2026.

#
Wyróżnienie

NL2SQL i RAG: jaka jest różnica?

NL2SQL i RAG (generacja wspomagana wyszukiwaniem) odpowiadają na dwie różne rodziny pytań, często mylone, ponieważ oba opierają się na LLM podłączonym do bazy danych.

NL2SQL celuje w dane strukturalne i relacyjne: ile, kiedy, jaka proporcja, pytań, które w naturalny sposób przekładają się na agregacje SELECT, GROUP BY. RAG dotyczy treści nieustrukturyzowanych: dokumentów, notatek, zgłoszeń do pomocy technicznej, w przypadku których odpowiedź nie mieści się w wierszu tabeli, ale wymaga znalezienia odpowiedniego fragmentu na podstawie podobieństwa semantycznego, wyszukiwania wektorowego na pgvector, indeksu HNSW, przed podaniem jej w kontekście modelu.

Obie możliwości mogą współistnieć w tym samym projekcie i łączyć się w agencie, który wybiera jedną lub drugą w zależności od zadanego pytania. Natywny filar AI Aurabase szczegółowo opisuje współpracę obu mechanizmów, a nasz przewodnik po potoku RAG na pgvector opisuje implementację drugiego.

#
Często zadawane pytania

Często zadawane pytania

Czy Text-to-SQL i NL2SQL to to samo?+
Tak, te dwa terminy odnoszą się do tej samej rodziny systemów: tłumaczenia pytania zadawanego w języku naturalnym na wykonywalne zapytanie SQL. „Text-to-SQL” to termin używany w badaniach akademickich (bazy referencyjne takie jak Spider czy WikiSQL), „NL2SQL” to najczęstszy skrót po stronie produktu i dokumentacji technicznej. Nie ma żadnej technicznej różnicy między tymi dwiema nazwami.
Czy NL2SQL może halucynować tabele lub kolumny, które nie istnieją?+
Model językowy może wygenerować wymyśloną nazwę tabeli, jest to realne ryzyko w przypadku każdego systemu opartego na LLM. Liczy się to, co stanie się później: implementacja, która sprawdza wygenerowany kod SQL pod kątem rzeczywistego schematu bazy danych, odrzuca zapytanie z wyraźnym komunikatem, zamiast wykonywać je na ślepo. Jest to zachowanie zweryfikowane w silniku Aurabase NL2SQL, który wyświetla tabele faktycznie dostępne w komunikacie o błędzie.
Czy NL2SQL może wykonywać zapisy (INSERT, UPDATE, DELETE)?+
Nie w starannym wdrażaniu. Dobrze zaprojektowany silnik NL2SQL akceptuje tylko zapytania SELECT i odrzuca wszelkie próby zapisu przed wykonaniem, na poziomie drzewa składni, a nie poprzez proste wyszukiwanie słów kluczowych w tekście. Sprawdź ten punkt przed przyjęciem narzędzia: niektóre prototypy NL2SQL typu open source nie nakładają domyślnie tego ograniczenia.
Czy do wykonania NL2SQL potrzebny jest specjalnie wyszkolony model, czy wystarczy ogólny LLM?+
Niedawny ogólny LLM (GPT, Claude, Gemini) jest wystarczający w większości przypadków użycia, pod warunkiem, że w wierszu zachęty podasz rzeczywisty diagram bazy danych. Istnieją wyspecjalizowane modele, dopracowane w oparciu o pary pytanie/SQL i zyskujące na precyzji w przypadku bardzo dużych schematów lub egzotycznych dialektów SQL. Jednak walidacja wygenerowanego kodu SQL ma większe znaczenie niż wybór modelu bezpieczeństwa systemu.
Czy NL2SQL zastępuje analityka danych?+
Nie, zmienia charakter pracy, zamiast ją eliminować. NL2SQL obejmuje pytania strukturalne i powtarzające się, zliczenia, filtry, proste agregacje, które w przeciwnym razie mobilizują analityka do jednorazowego zapytania. Analizy wymagające oceny biznesowej, modelowania lub źle sformułowanego pytania do przeformułowania pozostają dziełem kogoś, kto rozumie kontekst, a nie systemu tłumaczenia maszynowego.

GOTOWY DO WDROŻENIA?

Twój backend w pięć minut.

Karta kredytowa nie jest wymagana · 500 MB za darmo · 50 000 MAU