Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
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.
VECTOR i jak działa funkcja VECTOR_DISTANCE,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.
DBMS_DATA_MINING: klasyfikacja, regresja, klastrowanie - modele budowane w czystym SQL, wewnątrz bazy.OML4Py i OML4R, AutoML w Autonomous Database.DBMS_DATA_MINING pozostaje bez zmian. Wbudowany AutoML.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:
VECTOR, funkcja VECTOR_DISTANCE, indeksy wektorowe (HNSW, IVF) i nowa składnia wyszukiwania semantycznego.VECTOR_EMBEDDING, bez wysyłania danych na zewnątrz.DBMS_CLOUD_AI).Poniższe zrzuty pochodzą z prawdziwej, świeżo postawionej bazy Oracle 26ai Free. Zacznijmy od dowodu, że to faktycznie najnowsze wydanie:
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(*, *).
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:
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.
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:
Rozłóżmy tę składnię na części:
CREATE VECTOR INDEX idx_prod_hnsw ON produkty(cechy) - tworzy indeks wektorowy o nazwie idx_prod_hnsw na kolumnie cechy (typu VECTOR) w tabeli produkty.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ą jest ORGANIZATION 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ąć.
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:
Chcesz pewnie pisać zaawansowane zapytania SQL w Oracle?
Zaawansowany Oracle SQL - funkcje analityczne, hierarchie i optymalizacja zapytań. Ocena 4.9/5, terminy gwarantowane.
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:
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:
klienci_ml) - osiem rekordów z wiekiem, dochodem i liczbą kliknięć. Kolumna kupil (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.ust_ml) - prosty słownik parametrów. Wpisujemy tu ALGO_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 procedurze DBMS_DATA_MINING.CREATE_MODEL w parametrze settings_table_name - stamtąd model czyta swoją konfigurację.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.PREDICTION i PREDICTION_PROBABILITY) - model działa jak zwykła funkcja SQL. PREDICTION(MODEL_KUPNA USING wiek, dochod, klikniecia) zwraca prognozowaną etykietę (TAK lub NIE), a PREDICTION_PROBABILITY - stopień pewności tej prognozy w przedziale 0-1. Możesz łączyć je z WHERE, 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.
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.
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':
DBMS_CLOUD_AI.CREATE_PROFILE) zawiera: adres i klucz API dostawcy LLM, nazwę modelu językowego, listę tabel i kolumn, które model „widzi".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."nr_pesel, kwota_wynagrodzenia), warto przemyśleć, które tabele umieszczasz w profilu.
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.
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');
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 |
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 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ę.
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:
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:
| 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 |
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.
Nie. W 23ai wektor to typ danych VECTOR w zwykłej tabeli - z tymi samymi transakcjami, backupem i uprawnieniami co reszta bazy.
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).
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.
Komentarze (0)
Brak komentarzy...