Oracle od lat cicho rozwija AI wbudowane w silnik bazy — od Data Mining po dzisiejszy AI Vector Search i Select AI w wydaniu 23ai/26ai. Pokazujemy to na realnych zrzutach z żywej instancji.
Kiedy mówi się „AI w bazie danych", większość ludzi myśli o nowych, wyspecjalizowanych bazach wektorowych (baza wektorowa przechowuje dane jako listy liczb - wektory - które opisują znaczenie tekstu, obrazu czy dokumentu - podobne treści mają podobne wektory, co pozwala wyszukiwać „po sensie", nie po słowach kluczowych). Tymczasem Oracle Database robi uczenie maszynowe w SQL już od ponad dwóch dekad (pakiet DBMS_DATA_MINING zadebiutował w Oracle 9i R2 w 2002 r.), a wydania 23ai (2024) i jego kontynuacja 26ai postawiły AI w samym centrum bazy: wektorowy typ danych, semantyczne wyszukiwanie, wbudowane modele embeddingów i pytania w języku naturalnym. W tym artykule pokazujemy całą historię rozwoju AI w Oracle oraz działające przykłady z prawdziwej bazy Oracle 26ai Free - wszystkie zrzuty ekranu pochodzą z realnej instancji uruchomionej specjalnie na potrzeby tego tekstu.
Z tego artykułu dowiesz się:
- jak rozwijało się AI w Oracle - od przejęcia narzędzia Darwin w 1999 r. po AI Vector Search,
- czym jest typ
VECTORi jak działa funkcjaVECTOR_DISTANCE, - jak zbudować indeks wektorowy HNSW i wyszukiwać semantycznie,
- jak Oracle Machine Learning buduje model ML w czystym SQL,
- czym jest Select AI i wbudowane modele ONNX.
Historia AI w Oracle - 25 lat, nie 2 lata
AI w Oracle nie zaczęło się od mody na ChatGPT. Baza danych Oracle ma za sobą długą drogę uczenia maszynowego liczonego bezpośrednio na danych - bez eksportu do osobnych narzędzi.
Rozwój AI w bazie Oracle - od narzędzia Darwin po AI Vector Search i generatywne AI
- 1999 - Oracle przejmuje zespół data mining firmy Thinking Machines wraz z narzędziem Darwin. To fundament pod uczenie maszynowe w bazie.
-
2002 (Oracle 9i R2) - debiut Oracle Data Mining i pakietu
DBMS_DATA_MINING: klasyfikacja, regresja, klastrowanie - modele budowane w czystym SQL, wewnątrz bazy. - 2008 (11g) - graficzny Oracle Data Miner w SQL Developer i więcej algorytmów: drzewa decyzyjne, SVM, sieci Bayesa, reguły asocjacyjne.
- 2013 - Oracle Advanced Analytics: Data Mining + Oracle R Enterprise, czyli język R liczony bezpośrednio na danych w bazie.
-
2018 (18c) - marka Oracle Machine Learning, notatniki OML, biblioteki
OML4Pyi OML4R, AutoML w Autonomous Database. -
2021 (21c) - Oracle Data Mining zostaje przemianowane na Oracle Machine Learning for SQL (OML4SQL); nazwa pakietu
DBMS_DATA_MININGpozostaje bez zmian. Wbudowany AutoML. - 2024 (23ai) - przełom: AI Vector Search, typ VECTOR, Select AI, import modeli ONNX, grounded generative AI (RAG na danych firmy) - i ponad 300 innych nowości. Aktualizacje tej linii Oracle marketingowo oznacza jako „26ai" (wewnętrznie: Release 23.26.x).
Co nowego w najnowszych wydaniach (23ai i 26ai)
Oracle Database 23ai (ogólna dostępność: maj 2024) to pierwsze wydanie long-term z literą „ai" w nazwie. Kolejne aktualizacje tej samej linii Oracle oznacza już jako 26ai - instancja, na której powstały poniższe przykłady, raportuje się jako Oracle AI Database 26ai Free Release 23.26. Najważniejsze funkcje AI:
-
AI Vector Search - typ
VECTOR, funkcjaVECTOR_DISTANCE, indeksy wektorowe (HNSW, IVF) i nowa składnia wyszukiwania semantycznego. -
Wbudowane embeddingi - model w formacie ONNX (otwarty, przenośny format zapisu wytrenowanych modeli uczenia maszynowego - model przygotowany w jednym narzędziu, np. w Pythonie, uruchamiasz w innym bez przepisywania) można zaimportować do bazy i liczyć wektory funkcją
VECTOR_EMBEDDING, bez wysyłania danych na zewnątrz. -
Select AI - pytania w języku naturalnym zamieniane na SQL przez duży model językowy (pakiet
DBMS_CLOUD_AI). - Oracle Machine Learning - pełne uczenie maszynowe w SQL/PL-SQL i Pythonie, działające w całości w bazie.
- Property Graph i JSON Relational Duality - zapytania grafowe oraz jeden zbiór danych widziany jednocześnie jako tabele i jako dokumenty JSON.
AI Vector Search w praktyce - to nie teoria
Poniższe zrzuty pochodzą z prawdziwej, świeżo postawionej bazy Oracle 26ai Free. Zacznijmy od dowodu, że to faktycznie najnowsze wydanie:
Wersja bazy - Oracle AI Database 26ai Free, Release 23.26
Wektor jako pełnoprawny typ danych
W 23ai/26ai wektor to zwykła kolumna w tabeli - definiujesz jej wymiar i format liczb. Dzięki temu embeddingi (np. opisów produktów, dokumentów, zdjęć) leżą obok danych biznesowych, a nie w osobnym systemie.
Definicja kolumny ma postać VECTOR(liczba_wymiarów, format). Na przykład VECTOR(384, FLOAT32) to wektor o 384 wymiarach (tyle liczb tworzy jeden embedding). Wymiar nie jest przypadkowy - narzuca go model, którym liczysz embeddingi, a kolumna w tabeli musi mieć dokładnie tyle samo, inaczej zapis się nie powiedzie. Akurat 384 to rozmiar wektora popularnego, lekkiego modelu embeddingów z rodziny all-MiniLM (używanej m.in. w przykładach importu ONNX w Oracle); większe modele zwracają np. 768, 1024 lub 1536 wymiarów - więcej niuansów kosztem rozmiaru i szybkości. Wektor zapisany jest w formacie FLOAT32 (32-bitowa liczba zmiennoprzecinkowa; alternatywy to m.in. FLOAT64 dla większej precyzji oraz INT8 lub BINARY dla mniejszego rozmiaru kosztem dokładności). W podglądzie DESC pojawia się jeszcze trzeci człon - DENSE - czyli format gęsty: przechowywane są wszystkie wymiary (alternatywą jest SPARSE, opłacalny dla wektorów z dużą liczbą zer). Gdy wymiar lub format mają być dowolne, użyjesz gwiazdki, np. VECTOR(*, *).
Kolumna typu VECTOR(384, FLOAT32) - wektor jest first-class citizen w bazie
Wyszukiwanie semantyczne funkcją VECTOR_DISTANCE
Sercem AI Vector Search jest funkcja VECTOR_DISTANCE. Liczy ona odległość między wektorami (np. metryką kosinusową), a najmniejsza odległość oznacza największe podobieństwo. W przykładzie pytamy o produkty najbardziej podobne do roweru górskiego - baza poprawnie układa ranking:
VECTOR_DISTANCE z metryką COSINE - ranking podobieństwa liczony w jednym zapytaniu SQL
Skąd te wartości w wektorach? W tym przykładzie celowo użyliśmy malutkich, 3-wymiarowych wektorów wpisanych ręcznie - tylko po to, żeby ranking dało się policzyć w głowie i odczytać z ekranu. Każda z trzech liczb to umowna „oś cechy" produktu (np. jak bardzo jest sportowy, terenowy, elegancki). W prawdziwym systemie tych liczb nie wpisujesz ręcznie - generuje je model embeddingów (funkcją VECTOR_EMBEDDING na zaimportowanym modelu ONNX), a wektor ma nie trzy, lecz setki wymiarów (np. 384). Sama funkcja VECTOR_DISTANCE działa identycznie niezależnie od tego, czy liczb jest 3 czy 384.
Składnia jest zwięzła i czytelna - to po prostu SQL z nowymi funkcjami:
SELECT nazwa,
VECTOR_DISTANCE(cechy, VECTOR('[0.90,0.10,0.20]'), COSINE) AS odleglosc
FROM produkty
ORDER BY odleglosc
FETCH FIRST 3 ROWS ONLY;
-- wynik (ranking podobieństwa do [0.90, 0.10, 0.20]):
-- NAZWA ODLEGLOSC
-- --------------- ---------
-- Rower gorski 0
-- Rower szosowy .0059
-- Hulajnoga .3265
-- 3 rows selected.
Jak to czytać: im mniejsza liczba w kolumnie ODLEGLOSC, tym produkt w kolumnie NAZWA jest bardziej podobny znaczeniowo do zapytania. Zero to ten sam kierunek wektora (najlepsze dopasowanie), a im większa wartość, tym dalej znaczeniowo - dlatego ranking sortujemy rosnąco po odległości i bierzemy pierwsze wiersze.
Indeks wektorowy HNSW dla milionów wektorów
Przy dużych zbiorach przeszukiwanie każdego wektora po kolei jest zbyt wolne. Oracle dodaje indeksy wektorowe (HNSW i IVF) oraz dedykowany obszar pamięci Vector Pool. Zapytanie z FETCH APPROX - to przybliżona odmiana zwykłego FETCH FIRST: dopisek APPROX każe bazie skorzystać z indeksu wektorowego i zwrócić wynik przybliżony (z zadaną dokładnością), zamiast porównywać po kolei wszystkie wektory. Dzięki temu odpowiedź przychodzi bardzo szybko, nawet przy milionach rekordów:
Indeks wektorowy HNSW (graf sąsiedztwa w pamięci) i wyszukiwanie przybliżone FETCH APPROX
Rozłóżmy tę składnię na części:
-
CREATE VECTOR INDEX idx_prod_hnsw ON produkty(cechy)- tworzy indeks wektorowy o nazwieidx_prod_hnswna kolumniecechy(typu VECTOR) w tabeliprodukty. -
ORGANIZATION INMEMORY NEIGHBOR GRAPH- typ indeksu: graf sąsiadów trzymany w pamięci, czyli HNSW. Dzięki temu, że siedzi w pamięci (obszar Vector Pool), wyszukiwanie jest błyskawiczne. Alternatywą jestORGANIZATION NEIGHBOR PARTITIONS- indeks IVF, który może leżeć na dysku (mniej pamięci, nieco wolniej). -
DISTANCE COSINE- metryka odległości, jaką indeks ma optymalizować. Musi być ta sama, której używasz w zapytaniu (tu COSINE), inaczej indeks nie zostanie użyty. Inne opcje to m.in. EUCLIDEAN, DOT, MANHATTAN. -
WITH TARGET ACCURACY 95- docelowa dokładność wyszukiwania przybliżonego (95%). Indeks przyspiesza kosztem drobnej utraty trafności; 95 to zdrowy kompromis - wyższa wartość daje dokładniejsze wyniki, ale wolniej.
W zapytaniu kluczowe jest FETCH APPROX FIRST 2 ROWS ONLY: słowo APPROX mówi bazie, żeby skorzystała z indeksu wektorowego (wyszukiwanie przybliżone) zamiast porównywać po kolei wszystkie wektory. Bez APPROX Oracle policzyłby dokładny wynik, skanując całą tabelę - na milionach wektorów właśnie tego chcemy uniknąć.
Po co to wszystko? RAG na danych firmy
Najczęstsze zastosowanie wyszukiwania wektorowego to RAG (Retrieval-Augmented Generation) - odpowiedzi modelu językowego ugruntowane w dokumentach firmy. W Oracle cały przepływ może żyć w jednej bazie:
Przepływ RAG w Oracle 23ai - embedding, indeks i wyszukiwanie obok danych transakcyjnych
Chcesz pewnie pisać zaawansowane zapytania SQL w Oracle?
Zaawansowany Oracle SQL - funkcje analityczne, hierarchie i optymalizacja zapytań. Ocena 4.9/5, terminy gwarantowane.
Oracle Machine Learning - model ML w czystym SQL
To najstarszy filar AI w Oracle - i wciąż w pełni żywy w 26ai. Pakiet DBMS_DATA_MINING jest w bazie od Oracle 10g (2004), dziś pod nazwą Oracle Machine Learning for SQL (OML4SQL) - to nie nowość 23ai/26ai. Pozwala zbudować model uczenia maszynowego bez ani jednej linijki Pythona i bez eksportu danych. W przykładzie uczymy klasyfikator Naive Bayes przewidywać, czy klient dokona zakupu, a następnie wołamy PREDICTION wprost w zapytaniu:
Oracle Machine Learning - budowa modelu i predykcja w SQL (DBMS_DATA_MINING, PREDICTION)
Czym jest model i po co go tworzymy? Model uczenia maszynowego to wytrenowany wzorzec - Oracle przegląda dane historyczne (np. którzy klienci kupili, a którzy nie, i jakie mieli cechy) i zapamiętuje wykryte zależności jako gotowy obiekt w bazie. Model budujesz raz, a potem dowolnie wiele razy „pytasz" go o nowe, nieznane przypadki funkcją PREDICTION (np. „czy ten klient kupi?") - bez ponownego uczenia. To właśnie różnica między ręcznie pisaną regułą (sztywne warunki IF) a modelem, który sam wyłapuje wzorce z danych i potrafi je uogólnić na nowe wiersze.
A co, gdy dane się zmienią? Model odzwierciedla dane z chwili treningu, więc kiedy rzeczywistość się zmienia (nowe zachowania klientów, sezonowość, nowe produkty), z czasem traci celność - to tzw. dryf modelu. Dlatego model co jakiś czas przetrenowujesz na świeższych danych: usuwasz stary (DROP_MODEL) i budujesz nowy (CREATE_MODEL) na aktualnej tabeli - zwykle cyklicznie, np. zaplanowanym zadaniem w DBMS_SCHEDULER raz na tydzień czy miesiąc. „Raz" znaczy więc „raz na cykl", a nie „raz na zawsze".
Co krok po kroku robi ten kod:
-
Tabela z danymi treningowymi (
klienci_ml) - osiem rekordów z wiekiem, dochodem i liczbą kliknięć. Kolumnakupil(TAK/NIE) to zmienna docelowa, której model będzie się uczyć. W realnym projekcie to tysiące lub miliony wierszy z Twojego hurtowni danych - tutaj 8 rekordów wystarczy, żeby zademonstrować mechanizm. -
Tabela ustawień (
ust_ml) - prosty słownik parametrów. Wpisujemy tuALGO_NAME = ALGO_NAIVE_BAYES, co mówi pakietowi: użyj algorytmu Naiwnego Bayesa. Można tu podać dziesiątki innych parametrów (głębokość drzewa, liczba drzew w lesie losowym, próg prawdopodobieństwa itd.) - gdy tabela ustawień jest pusta, Oracle dobiera parametry automatycznie. Nazwę tej tabeli przekazujesz procedurzeDBMS_DATA_MINING.CREATE_MODELw parametrzesettings_table_name- stamtąd model czyta swoją konfigurację. -
Budowa modelu (
DBMS_DATA_MINING.CREATE_MODEL) - jedno wywołanie PL/SQL i model jest gotowy. Podajesz: nazwę modelu (MODEL_KUPNA), typ zadania (CLASSIFICATION- klasyfikacja binarna), tabelę z danymi, kolumnę z unikalnym ID każdego przypadku i kolumnę docelową. Oracle trenuje model w bazie - żadne dane nie opuszczają serwera, żadne połączenie z zewnętrznym API nie jest potrzebne. -
Predykcja w SELECT (
PREDICTIONiPREDICTION_PROBABILITY) - model działa jak zwykła funkcja SQL.PREDICTION(MODEL_KUPNA USING wiek, dochod, klikniecia)zwraca prognozowaną etykietę (TAK lub NIE), aPREDICTION_PROBABILITY- stopień pewności tej prognozy w przedziale 0-1. Możesz łączyć je zWHERE,JOIN,ORDER BY- to zwykłe wyrażenie SQL.
Cały model powstał i działa wewnątrz bazy - obliczenia AI jadą do danych, nie odwrotnie. Ta sama filozofia co Vector Search, tyle że dostępna już od Oracle 9i R2.
Select AI - pytaj bazę po polsku
Wyobraź sobie sytuację: analityk biznesowy chce wiedzieć, ilu klientów złożyło zamówienie w ostatnim kwartale wartości powyżej 10 000 zł. Nie zna SQL, nie wie jak nazywa się tabela, nie wie w której kolumnie jest data. Normalnie idzie do programisty, który pisze zapytanie. Select AI odwraca ten schemat: analityk pyta bazę bezpośrednio, po polsku, zwykłym zdaniem.
Select AI (pakiet DBMS_CLOUD_AI, dostępny od Oracle Database 23ai) to mechanizm zamieniający pytanie w języku naturalnym na pełne zapytanie SQL - na Twoim konkretnym schemacie, z właściwymi nazwami tabel i kolumn - i od razu zwracający wynik. Pod spodem działa duży model językowy (LLM), ale Ty piszesz tylko zdanie po polsku, resztę robi baza.
Jak to działa - przepływ krok po kroku
Zrozumienie mechanizmu jest kluczowe, żeby świadomie go używać (i żeby wiedzieć, gdzie są granice). Oto co się dzieje, gdy piszesz SELECT AI 'pokaż dziesięciu największych klientów':
-
Baza czyta profil AI. Profil (stworzony przez administratora raz, poleceniem
DBMS_CLOUD_AI.CREATE_PROFILE) zawiera: adres i klucz API dostawcy LLM, nazwę modelu językowego, listę tabel i kolumn, które model „widzi". -
Baza buduje tzw. prompt systemowy. Automatycznie pobiera z danych słownikowych (
ALL_TABLES,ALL_COLUMNS) definicje tabel i kolumn z profilu, a następnie wysyła do LLM instrukcję: „Masz do dyspozycji ten schemat, napisz SQL odpowiadający na to pytanie." - LLM generuje SQL. Model widzi schemat i pytanie użytkownika, odpowiada czystym zapytaniem SQL (bez żadnych dodatkowych słów).
- Baza wykonuje wygenerowany SQL i zwraca wyniki. Wygenerowane zapytanie jest uruchamiane na bazie tak samo jak każde inne - z uprawnieniami bieżącego użytkownika.
Dane do LLM - co tak naprawdę wysyłasz?
Do zewnętrznego modelu trafia wyłącznie schemat (nazwy tabel i kolumn oraz ewentualne komentarze) i treść Twojego pytania. Dane z tabel nie są wysyłane do LLM. Mimo to, jeśli nazwy kolumn zdradzają wrażliwe informacje (np. nr_pesel, kwota_wynagrodzenia), warto przemyśleć, które tabele umieszczasz w profilu.
Krok 1 - Poświadczenia (credential)
Zanim stworzysz profil, musisz zapisać w bazie klucz API dostawcy LLM. Oracle przechowuje go bezpiecznie w zaszyfrowanym obiekcie CREDENTIAL. Poniżej przykład dla OpenAI:
-- Zapisanie klucza API OpenAI w zaszyfrowanym obiekcie credential.
-- Klucz jest przechowywany jak hasło w Oracle Wallet - nie widać go po stworzeniu.
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED', -- dowolna nazwa obiektu w bazie
username => 'OPENAI', -- etykieta dostawcy; OpenAI nie ma loginu, liczy się tylko klucz w password
password => 'sk-...' -- Twój klucz API z platform.openai.com
);
END;
/
Skąd tu username? DBMS_CLOUD.CREATE_CREDENTIAL to uniwersalny mechanizm na pary login + hasło (Oracle używa go też np. do chmury czy zewnętrznych baz danych). OpenAI uwierzytelnia się jednak samym kluczem API - dlatego klucz wpisujesz w password, a username jest tu tylko etykietą; w przykładach Oracle wstawia się nazwę dostawcy ('OPENAI'). To nie jest Twój login do OpenAI ani żadna wartość, którą OpenAI sprawdza.
Jeżeli używasz OCI Generative AI (usługa Oracle Cloud - dane nie opuszczają infrastruktury OCI), zamiast klucza API podajesz poświadczenia OCI (user OCID, tenancy OCID, fingerprint klucza prywatnego) - procedura jest analogiczna, zmienia się tylko format parametrów.
Krok 2 - Profil AI
Profil to konfiguracja, która spina razem: dostawcę LLM, model, credential i listę tabel, które model może „widzieć". Tworzysz go raz (zazwyczaj robi to DBA lub właściciel schematu) - użytkownicy z nadanym profilem mogą potem pytać bazę bez konfiguracji:
-- Stworzenie profilu AI łączącego: dostawcę LLM, model, credential i widoczne tabele.
-- JSON-owa konfiguracja jest przesyłana do DBMS_CLOUD_AI.CREATE_PROFILE.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'SPRZEDAZ_AI', -- nazwa profilu używana w SELECT AI
attributes => '{
"provider" : "openai", -- dostawca: openai | oci | azure | google
"credential_name": "OPENAI_CRED", -- credential stworzony w kroku 1
"model" : "gpt-4o", -- konkretna wersja modelu LLM
"object_list": [ -- lista tabel, które LLM "widzi" (schemat)
{"owner": "SKLEP", "name": "ZAMOWIENIA"},
{"owner": "SKLEP", "name": "KLIENCI"},
{"owner": "SKLEP", "name": "PRODUKTY"}
]
}'
);
END;
/
-- Nadanie innemu użytkownikowi prawa korzystania z Select AI (EXECUTE na pakiecie):
GRANT EXECUTE ON DBMS_CLOUD_AI TO ANNA;
-- Ustawienie profilu jako domyślnego dla bieżącej sesji:
EXEC DBMS_CLOUD_AI.SET_PROFILE('SPRZEDAZ_AI');
Krok 3 - Cztery tryby zapytania
Składnia SELECT AI obsługuje wiele trybów (tzw. akcji), wybierasz je słowem kluczowym za AI. Sześć najczęściej używanych:
| Tryb (akcja) | Składnia | Co zwraca |
|---|---|---|
| runsql (domyślny) | SELECT AI 'pytanie' |
Wynik zapytania SQL wygenerowanego przez LLM - wiersze i kolumny jak w zwykłym SELECT. Obsługuje też RAG (wyszukiwanie wektorowe jako kontekst) |
| showsql | SELECT AI showsql 'pytanie' |
Wygenerowany kod SQL jako tekst - nie wykonuje go. Przydatne do nauki i weryfikacji poprawności |
| explainsql | SELECT AI explainsql 'pytanie' |
Generuje SQL, a następnie prosi LLM o wyjaśnienie po ludzku, co ten SQL robi. Para do showsql - zamiast czytać SQL samemu, dostajesz opis słowami |
| showprompt | SELECT AI showprompt 'pytanie' |
Wyświetla pełny prompt, który Oracle buduje i wysyła do LLM - widać tu schemat tabel, instrukcje systemowe i Twoje pytanie. Niezastąpione przy debugowaniu i audycie bezpieczeństwa |
| narrate | SELECT AI narrate 'pytanie' |
LLM wykonuje SQL, dostaje wyniki i opisuje je zdaniami po polsku. Zamiast tabeli z liczbami dostajesz zdanie: „Najlepszy miesiąc to marzec z 4 820 zł średniej wartości zamówienia" |
| chat | SELECT AI chat 'pytanie' |
Przekazuje pytanie bezpośrednio do LLM bez uruchamiania SQL. Rozmowa ogólna - wyjaśnienia, kontekst, pytania niezwiązane z danymi w bazie |
| summarize | SELECT AI summarize 'pytanie' |
Streszcza tekst i duże pliki (do 1 GB) przy pomocy LLM. Przydatne do podsumowywania dokumentów, raportów lub długich treści przechowywanych w bazie |
| feedback | SELECT AI feedback 'korekta' |
Pozwala powiedzieć modelowi, że poprzedni SQL był błędny i jak powinien wyglądać poprawny. LLM uczy się na tej podstawie i generuje dokładniejsze zapytania w przyszłości. Dostępne od Oracle AI Database 26ai |
| agent | SELECT AI agent 'zadanie' |
Uruchamia autonomicznego agenta z planowaniem wieloetapowym, użyciem narzędzi i refleksją - agent samodzielnie rozkłada złożone zadanie na kroki i je wykonuje. Dostępne od Oracle AI Database 26ai |
Przykłady w akcji
Przyjmijmy, że w schemacie SKLEP mamy tabele ZAMOWIENIA (z kolumnami: id_klienta, data_zamowienia, wartosc) i KLIENCI (id_klienta, imie, nazwisko). Oto jak wygląda rozmowa z bazą:
-- runsql (domyślny): wykonuje SQL i zwraca wiersze jak w zwykłym SELECT
SELECT AI 'pokaż dziesięciu klientów z największą łączną wartością zamówień w tym roku';
-- IMIE NAZWISKO SUMA_ZAMOWIEN
-- ---------- ---------- -------------
-- Anna Kowalska 128 540,00
-- Marek Nowak 114 220,00
-- ... ... ...
-- showsql: wyświetla wygenerowany SQL bez wykonywania go
SELECT AI showsql 'pokaż dziesięciu klientów z największą łączną wartością zamówień w tym roku';
-- SELECT k.imie, k.nazwisko, SUM(z.wartosc) AS suma_zamowien
-- FROM sklep.klienci k
-- JOIN sklep.zamowienia z ON z.id_klienta = k.id_klienta
-- WHERE EXTRACT(YEAR FROM z.data_zamowienia) = EXTRACT(YEAR FROM SYSDATE)
-- GROUP BY k.imie, k.nazwisko
-- ORDER BY suma_zamowien DESC
-- FETCH FIRST 10 ROWS ONLY
-- explainsql: generuje SQL, a potem prosi LLM o wytłumaczenie go po ludzku
SELECT AI explainsql 'pokaż dziesięciu klientów z największą łączną wartością zamówień w tym roku';
-- "Zapytanie łączy tabele KLIENCI i ZAMOWIENIA po kolumnie id_klienta,
-- filtruje zamówienia z bieżącego roku, sumuje wartości dla każdego klienta
-- i sortuje malejąco, zwracając pierwszą dziesiątkę."
-- showprompt: pokazuje pełny prompt wysyłany do LLM (schemat + instrukcje + pytanie)
SELECT AI showprompt 'pokaż dziesięciu klientów z największą łączną wartością zamówień w tym roku';
-- "You are an Oracle SQL expert. The following tables are available:
-- SKLEP.ZAMOWIENIA (id_klienta NUMBER, data_zamowienia DATE, wartosc NUMBER)
-- SKLEP.KLIENCI (id_klienta NUMBER, imie VARCHAR2, nazwisko VARCHAR2)
-- Generate a SQL query for: pokaż dziesięciu klientów..."
-- narrate: wykonuje SQL i każe LLM opisać wynik zdaniami po polsku
SELECT AI narrate 'jaka była średnia wartość zamówienia w każdym miesiącu tego roku?';
-- "W 2025 roku najwyższa średnia wartość zamówienia przypadła na marzec
-- (4 820 zł), najniższa zaś na sierpień (2 110 zł). Ogólna średnia
-- roczna wyniosła 3 460 zł."
-- chat: przekazuje pytanie wprost do LLM, bez SQL i bez danych z tabel
SELECT AI chat 'co to jest indeks HNSW i kiedy go użyć?';
-- "HNSW (Hierarchical Navigable Small World) to graf przybliżonego wyszukiwania
-- najbliższych sąsiadów. Buduje wielowarstwową strukturę węzłów połączonych
-- krawędziami - górne warstwy to długie skoki, dolne to precyzyjne dopasowanie...
-- Użyj go, gdy masz powyżej kilkudziesięciu tysięcy wektorów i zależy Ci na
-- czasie odpowiedzi poniżej 10 ms."
-- summarize: streszcza tekst lub plik przechowywany w bazie (do 1 GB)
SELECT AI summarize 'streść raport kwartalny z tabeli RAPORTY gdzie id = 42';
-- "Raport za Q1 2025 odnotowuje wzrost sprzedaży o 18% rok do roku,
-- głównie w segmencie B2B. Marża brutto spadła o 2 pp do poziomu 34%
-- z powodu wzrostu kosztów logistyki..."
-- feedback (Oracle 26ai): powiedz modelowi, że poprzedni SQL był błędny
SELECT AI feedback 'poprzednie zapytanie o klientów pominęło zamówienia anulowane - kolumna status = ''ANULOWANE'' powinna być wykluczona';
-- "Dziękuję za korektę. Zapamiętałem, że przy zapytaniach o klientów
-- i zamówienia należy zawsze dodać warunek status != ''ANULOWANE''."
-- agent (Oracle 26ai): autonomiczny agent rozkłada złożone zadanie na kroki
SELECT AI agent 'znajdź klientów, którzy kupili produkt X, ale nie kupili Y, i wyślij im ofertę rabatową';
-- Agent planuje: (1) znajdź klientów X, (2) odejmij zbiór klientów Y,
-- (3) pobierz adresy e-mail, (4) wywołaj narzędzie do wysyłki oferty.
-- Każdy krok jest wykonywany osobno z refleksją nad wynikiem.
Tryb showsql - narzędzie do nauki i weryfikacji
Tryb showsql jest szczególnie wartościowy z dwóch powodów. Po pierwsze, pozwala sprawdzić, czy model dobrze zrozumiał pytanie - zanim zobaczysz wyniki, możesz ocenić poprawność SQL. Po drugie, to świetne narzędzie do nauki: piszesz pytanie po polsku, dostajesz gotowy, poprawny SQL i możesz analizować, jak Oracle przekłada intencję na zapytanie. W środowisku produkcyjnym warto uruchamiać showsql przy pierwszym użyciu każdego nowego pytania, żeby upewnić się, że model trafia w intencję.
Obsługiwani dostawcy LLM
Select AI współpracuje z kilkoma dostawcami dużych modeli językowych. Wybór zależy głównie od wymagań bezpieczeństwa i polityki firmy:
- OCI Generative AI - usługa Oracle Cloud; dane pozostają w infrastrukturze OCI, naturalny wybór dla klientów chmury Oracle.
- OpenAI - modele z rodziny GPT; schemat tabel trafia do serwerów OpenAI (poza UE).
- Azure OpenAI - modele OpenAI hostowane przez Microsoft na Azure; dostępne opcje regionów UE.
- Google Vertex AI - modele Gemini; integracja przez klucz API Google Cloud.
- Cohere - alternatywny dostawca, modele Command R.
Select AI vs Vector Search vs Oracle ML - kluczowa różnica
Oracle Machine Learning i AI Vector Search działają w całości wewnątrz bazy - żadne dane nie opuszczają serwera. Select AI jest inaczej skonstruowany: schemat i pytanie trafiają do zewnętrznego LLM przez HTTPS. To często decyduje o wyborze: w regulowanych branżach (banki, ochrona zdrowia) może wymagać dodatkowej zgody na przetwarzanie metadanych poza organizacją.
Kiedy Select AI naprawdę się przydaje
Select AI nie zastąpi analityka, który musi pisać skomplikowane zapytania z wieloma JOINami, funkcjami okna czy hierarchiami. Sprawdza się natomiast doskonale w scenariuszach, gdzie wartość leży w demokratyzacji dostępu do danych:
- Self-service BI dla menedżerów - kierownik sprzedaży sam sprawdza wyniki bez angażowania działu IT.
- Rapid prototyping zapytań - programista pisze pytanie, dostaje bazowy SQL, który potem doprecyzowuje ręcznie.
- Onboarding do nieznanej bazy - nowy pracownik szybko eksploruje nieznany schemat pytaniami w języku naturalnym.
- Dashboardy z dynamicznymi pytaniami - aplikacje, gdzie użytkownik wpisuje pytanie i dostaje wynik bez własnego SQL.
Dlaczego AI w bazie ma sens?
| Aspekt | Osobna baza wektorowa | AI Vector Search w Oracle |
|---|---|---|
| Lokalizacja danych | Kopia danych w drugim systemie | Wektory obok danych biznesowych |
| Spójność i transakcje | Synchronizacja, ryzyko rozjazdu | Pełne ACID, jedna transakcja |
| Bezpieczeństwo | Drugi model uprawnień | Te same role i uprawnienia Oracle |
| Backup i odtwarzanie | Osobny proces | Wspólny RMAN / Data Guard |
| Złączenia z danymi firmy | Trudne (dwa systemy) | Zwykły JOIN w SQL |
Najczęstsze pytania
Od której wersji Oracle ma wyszukiwanie wektorowe?
Od Oracle Database 23ai (maj 2024) i w kolejnych wydaniach linii 23 (oznaczanych jako 26ai). Funkcja jest też w darmowej edycji Oracle Database Free - na niej powstały przykłady w tym artykule.
Czy potrzebuję osobnej bazy wektorowej?
Nie. W 23ai wektor to typ danych VECTOR w zwykłej tabeli - z tymi samymi transakcjami, backupem i uprawnieniami co reszta bazy.
Czy AI w Oracle wymaga wysyłania danych na zewnątrz?
Vector Search i Oracle Machine Learning działają w całości w bazie - embeddingi możesz liczyć lokalnie z modelu ONNX. Zewnętrzny LLM jest potrzebny tylko dla funkcji generatywnych (Select AI, generowanie odpowiedzi w RAG).
Zaawansowany Oracle SQL - fundament pod AI w bazie
Vector Search, OML i Select AI to nadal SQL. Naucz się pisać zaawansowane zapytania, funkcje analityczne i optymalizować wydajność u praktyka JSystems.
Zaawansowany Oracle SQL - terminy gwarantowane
Interesuje Cię strona AI/ML? Zobacz też Uczenie maszynowe w Pythonie oraz Tworzenie systemu RAG z LangChain.







Top comments (0)