Oracle e' il piu' noto e diffuso database relazionale commerciale. Negli ultimi anni e' stato arricchito con diverse tecnologie di Artificial Intelligence (AI) ed in questa paginetta cerchiamo di descriverle.
Nel seguito sono riportate alcune informazioni di interesse sulle funzionalita' AI (Artificial Intelligence) della versione 26ai... gli argomenti sono organizzati in semplici paragrafi: Nuove funzionalita', Utilizzo, ... Varie ed Eventuali,
Per una volta iniziamo con la tabella delle versioni e dei rilasci perche' sono stati gestiti in maniera differente rispetto al passato.
La versione Oracle Database 23c e' stata rinominata (2024-05) Oracle Database 23ai per sottolineare
le nuove funzionalita' introdotte per l'Artificial Intelligence (AI).
Tra le nuove funzionalita' vi e'
l'AI Vector Search che permette di realizzare il processo di retrieval-augmented generation (RAG).
La versione Oracle Database 23ai e' stata rinominata (2025-10) Oracle AI Database 26ai
introducendo un nuovo meccanismo di numerazione con aggiornamenti ogni tre mesi.
(Sources: Oracle Database 26ai Release Updates, New features in 26ai)
| |
|
|
|
|
| 23.26.3 | Production | Scalar Quantization Support for Distributed HNSW Indexes. | 2026-07 | |
| 23.26.2 | Production | DBMS_SEARCH Autocomplete for Hybrid Vector Indexes, Local HNSW Indexes, New SQL Functions: VECTOR_ORIGIN, VECTOR_RANDOM, and VECTOR_RANDOM_PER_ROW, Offload Creating Vector Indexes to Remote GPU Container, Private AI Container for Vector Embedding Generation. | 2026-04 | |
| 23.26.1 | Production |
Q1 release. On-premises availability on Linux x86-64.
ALTER INDEX Support for JSON Search Index, Auto IVF Vector Index Reorganization, Distributed HNSW Indexes with RAC, Larger ONNX Models, Included Columns with HNSW Indexes, Scalar Quantized HNSW Indexes, Select AI with RAG and Synthetic Data Generation, Vector Data Type Support in Precompiler. | 2026-01 | |
| 23.26.0 | Production |
Renamed Oracle Database 23ai to Oracle AI Database 26ai introducing a new version numbering.
Available as Free Release too.
JDBC Support Completion for SPARSE Vectors with a Binary Format, Sparse Vector Support in MLE JavaScript. | 2025-10 | |
| 23.9 | Production | IVF Index Online Reorganization. | 2025-07 | |
| 23.8 | Production | Custom JavaScript Distance Function, Automatic Vector Pool sizing with on-premises deployments, Elastic Vector Memory Management, SPARSE support in PL/SQL, New table function: DBMS_HYBRID_VECTOR.SEARCHPIPELINE, New function: DBMS_HYBRID_VECTOR.GET_SQL, FILTER_BY support in DBMS_HYBRID_VECTOR.SEARCH, Terminable iteration for IVF vector indexes, Using JSON in Included Columns with IVF Indexes. | 2025-04 | |
| 23.7 | Production | External Table support, Arithmetic and aggregate function support, PL/SQL BINARY vector support, PL/SQL JACCARD distance metric support, Globally Distributed Database support, In-Database Algorithms Support for VECTOR Data Type Predictors, Support for Image Transformer Models with AI Vector Search Using the In-Database ONNX Runtime, Hybrid Vector Index for JSON, Included Columns in Neighbor Partition Vector Indexes. | 2025-01 | |
| 23.6 | Production | Hybrid Search using Hybrid Vector Indexes, Updated AI Vector Search Workflow, Updated Documentation Map to GenAI Prompts, Extended SQL Quick Start, Support for Ollama, Support for SPARSE Vectors, Integration with LlamaIndex, Jaccard Distance, Hamming Distance, Transaction Support for HNSW Indexes, HNSW Index Duplication and Reload, Update to the default for VECTOR_INDEX_NEIGHBOR_GRAPH_RELOAD, Global and Local Partitioning for IVF Indexes, GET_INDEX_STATUS, ENABLE_CHECKPOINT, DISABLE_CHECKPOINT, and INDEX_VECTOR_MEMORY_ADVISOR Procedures, VECSYS.VECTOR$INDEX$CHECKPOINTS View, Relational Data Vectorization, Document Reranking, BLOB Support for UTL_TO_GENERATE_TEXT(), BLOB Support for UTL_TO_EMBEDDING(), List of REST Endpoints. | 2024-10 | |
| 23.5 | Production | Binary Vectors, LangChain Integration, Optimizer Plans for Vector Indexes, Documentation Map to GenAI Prompts. | 2024-07 (+Exadata) | |
| 23.4 | Production |
Renamed Oracle 23c to Oracle 23ai.
Added AI Vector Search, released in Cloud and as Developer Free. | 2024-05 (Cloud+Dev) |
Trattandosi di funzionalita' innovative e' fortemente consigliabile utilizzare l'ultima Release Update disponibile. Il livello di compatibilita' minimo per sfruttare le funzionalita' AI della 26ai e' 23.6: a tutti gli effetti con la versione 23.6 [NdA 2024-10] vengono introdotte/completate le principali funzionalita' necessarie per gli sviluppi AI.
Oracle AI Vector Search e' progettata per l'Artificial Intelligence (AI)
e consente di interrogare i dati con ricerche basate sulla semantica
piuttosto che con chiavi e valori come avviene generalmente su una base dati relazionale.
Il datatype VECTOR consente di memorizzare il significato
di un testo o di un immagine.
Oracle fornisce funzioni ed indici specifici per ottimizzare
le ricerche sui VECTOR.
I package
DBMS_VECTOR, DBMS_VECTOR_CHAIN, DBMS_HYBRID_VECTOR
forniscono le funzionalita' principali per trattare i dati semantici.
E' possibile caricare nella base dati modelli LLM
se disponibili in formato ONNX.
Spesso pero' si preferisce accedere a servizi esterni
(eg. OpenAI, Anthropic, Cohere, Mistral AI, Google AI e, naturalmente, Oracle Cloud Infrastructure Generative AI)
che e' possibile richiamare direttamente dal PL/SQL.
Useremo come esempio un semplice RAG (Retrieval Augmented Generation),
che e' uno dei casi piu' significativi in AI di l'utilizzo di una base dati,
riportando in dettaglio la parte relativa al database.
In pratica anziche' interrogare un LLM in modo generico
prima ricerchiamo in una base dati interna quali ulteriori
informazioni possono essere fornite e quindi le utilizziamo
per aumentare il contesto della richiesta.
La ricerca sulla base dati si puo' eseguire con normali
condizioni ma anche, e questa e' la parte innovativa,
per significato.
Per fare questo ogni documento viene valutato ottenendo
un vettore che ne descrive il significato: l'embedding.
Quindi la ricerca avviene con una normale query SQL
che confronta la richiesta iniziale con gli embedding dei documenti disponibili.
Il primo passo e' quello di definire la tabella aidba_rag_kb che contiene i documenti utili ad arricchire la conoscenza di un LLM generico. Oracle 26ai supporta il datatype vector che puo' essere utilizzato per memorizzare gli embedding.
-- DDL for Oracle AI Vector Search on Oracle
-- 1. Define the table for the knowledge base
-- Vector support is built-in, so no extension is needed.
-- The embedding dimension MUST match the output of the `embedding_model`
-- (e.g., `qllama/bge-large-en-v1.5` which has a dimension of 1024).
CREATE TABLE aidba_rag_kb (
id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR2(1024),
content CLOB,
doc_type VARCHAR2(255) DEFAULT 'generic',
priority NUMBER(5) DEFAULT 3,
tags JSON, -- Oracle recommends JSON for storing array-like data
embedding VECTOR(1024, FLOAT32), -- Dimension for `qllama/bge-large-en-v1.5`
CONSTRAINT ensure_tags_is_json CHECK (tags IS JSON)
);
-- 2. Create a search index on the JSON tags for fast filtering
-- This allows efficient searching for documents with specific tags
-- (e.g., WHERE json_exists(tags, '$?(@ == "indexing" || @ == "performance")'))
CREATE SEARCH INDEX idx_rag_kb_tags ON aidba_rag_kb (tags) FOR JSON;
-- 3. Create a vector index for fast similarity search
-- The index creation is a separate step and specifies the distance metric.
-- The index type (e.g., HNSW) is chosen automatically by default.
CREATE VECTOR INDEX idx_embedding ON aidba_rag_kb (embedding)
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE COSINE;
La base dati va quindi caricata con le informazioni della RAG e per ciascun documento deve essere catturato il significato, che praticamente si traduce nella valorizzazione del vettore di embedding. La scelta dei documenti, la loro trasformazione in testo, la separazione in chunk, la generazione degli embedding e la memorizzazione sulla base dati sono ovviamente molto importanti... ma li consideriamo tecnicismi!
Terminata questa fase e' possibile estrarre i documenti utili in SQL come negli esempi seguenti.
Per estrarre i 5 documenti piu' simili alla richiesta dell'utente:
Per estrarre i 10 documenti con argomento simile e con i tag previsti ordinati per priorita' e per similarita':
Dovrebbe essere chiaro che le possibilita' di interrogazione sono molteplici
e dipendono in larga misura dalle scelte progettuali...
L'aspetto importante e' che le ricerche non sono svolte confrontando il testo
o parole chiave ma comprendendo il significato della richiesta utente,
confrontandolo con quello dei documenti presenti nella base dati
e scegliendo quelli piu' vicini
[NdA KNN: algoritmo k-nearest neighbors che e' un classificatore
di apprendimento supervisionato non parametrico
utilizzato sia per la classificazione che per la regressione...
in parole povere: i risultati piu' vicini].
Il risultato ottenuto dalle query viene poi inserito nel contesto ed inviato all'LLM per ottenere la risposta finale.
Quello presentato e' una implementazione classica di un RAG per la parte di database;
gli altri componenti possono essere realizzati
con Python che e' il piu' diffuso linguaggio utilizzato in questo contesto,
tuttavia non e' l'unica possibilita'...
Con Oracle 26ai e' possibile utilizzare il PL/SQL
e sfruttare funzionalita' presenti all'interno della base dati o su OCI
in architetture piu' complesse che utilizzano in modo piu' pervasivo
la base dati Oracle...
ma questo lo vedremo in un altra paginetta
sfruttando package specifici come DBMS_VECTOR_CHAIN.
Sicuramente e' interessante il confronto delle funzionalita' vettoriali di Oracle rispetto all'extension pgvector di PostgreSQL che era disponibile gia' dal 2021.
Titolo: Oracle Database 26ai - Nuove funzionalita' AI
Livello: Medio
Data:
31 Ottobre 2024 🎃
Versione: 1.1.2 - 1 Aprile 2026 🐟
Autore: mail [AT] meo.bogliolo.name