Generare incorporamenti vettoriali in Database di Azure per PostgreSQL - Server flessibile con LLM distribuito localmente (anteprima)
Prerequisiti
Un'istanza del server flessibile di Database di Azure per PostgreSQL in esecuzione in un SKU di macchina virtuale ottimizzato per la memoria. Altre informazioni sulle macchine virtuali ottimizzate per la memoria di Azure sono disponibili qui: Dimensioni delle macchine virtuali di Azure - Memoria - Macchine virtuali di Azure
È possibile abilitare l'estensione vettoriale , perché offre funzionalità per archiviare ed indicizzare in modo efficiente gli incorporamenti di testo nel database.
Abilitare l'estensione
Prima di abilitare azure_local_ai nell'istanza del server flessibile Database di Azure per PostgreSQL, è necessario consentire l'elenco di estensioni come descritto in Consentire un'estensione.azure_local_ai
Importante
L'hosting di modelli linguistici nel database richiede un footprint della memoria elevato. Per supportare questo requisito, azure_local_ai
è supportato solo in SKU di macchine virtuali di Azure ottimizzate per la memoria con almeno 4 vCore.
Se si usa una macchina virtuale che non soddisfa i requisiti minimi, l'estensione azure_local_ai
non verrà visualizzata nell'elenco dei valori consentiti per il parametro del azure.extensions
server.
Dopo aver consentito l'estensione, è possibile seguire le istruzioni fornite in Creare estensioni per installare l'estensione in ogni database da cui si vuole usarla.
Nota
L'abilitazione dell'intelligenza artificiale locale di Azure distribuirà il modello multilingue-e5-small nell'istanza del server flessibile Database di Azure per PostgreSQL. La documentazione collegata fornisce le condizioni di licenza del team e5. Altri modelli open source di terze parti potrebbero diventare disponibili per l'installazione in futuro.
L'installazione dell'estensione azure_local_ai
crea uno schema denominato azure_local_ai
in cui l'estensione archivia tabelle, funzioni ed eventuali altri oggetti correlati a SQL necessari per implementare ed esporre le relative funzionalità.
Importante
È possibile abilitare l'estensione vettoriale, perché è necessario archiviare gli incorporamenti di testo nel database PostgreSQL.
Funzioni fornite dall'estensione
L'estensione azure_local_ai
fornisce un set di funzioni. Queste funzioni consentono di creare incorporamenti vettoriali dai dati di testo, semplificando lo sviluppo di applicazioni di intelligenza artificiale generativa. L'estensione offre funzioni per la creazione di incorporamenti, il recupero di impostazioni e altro ancora. Usando queste funzioni, è possibile semplificare il processo di sviluppo e ridurre la latenza eliminando la necessità di chiamate API remote aggiuntive ai modelli di incorporamento di intelligenza artificiale ospitati all'esterno del limite PostgreSQL.
Schema | Nome | Tipi di dati risultanti | Tipi di dati dell'argomento |
---|---|---|---|
azure_local_ai | create_embeddings | TABLE(embedding real[]) | model_uri text, inputs text[], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000 |
azure_local_ai | create_embeddings | real[] | model_uri text, input text, timeout_ms integer DEFAULT 3600000 |
azure_local_ai | get_setting | jsonb | keys text[] DEFAULT ARRAY[]::text[], timeout_ms integer DEFAULT 3600000 |
azure_local_ai | get_setting | Testo | key text, timeout_ms integer DEFAULT 3600000 |
azure_local_ai | model_metadata | jsonb | model_uri text |
Queste funzioni possono essere visualizzate usando il meta-comando psql seguente:
\df azure_local_ai.*
azure_local_ai.create_embeddings
L'estensione azure_local_ai
consente di creare e aggiornare incorporamenti sia in formato scalare che in batch, richiamando l'LLM distribuito in locale.
azure_local_ai.create_embeddings(model_uri text, input text, batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);
azure_local_ai.create_embeddings(model_uri text, array[inputs [text]], batch_size bigint DEFAULT 128, timeout_ms integer DEFAULT 3600000);
Argomenti
model_uri
text
nome del modello di incorporamento del testo richiamato per creare l'incorporamento.
input
text
o text[]
singolo testo o array di testi, a seconda dell'overload della funzione usata, per cui vengono creati gli incorporamenti.
batch_size
bigint DEFAULT 128
numero di record da elaborare alla volta (disponibile solo per l'overload della funzione per cui il parametro input
è di tipo text[]
).
timeout_ms
integer DEFAULT 3600000
timeout in millisecondi dopo il quale l'operazione viene arrestata.
azure_local_ai.get_setting
Utilizzato per ottenere i valori correnti delle opzioni di configurazione.
SELECT azure_local_ai.get_setting(key TEXT)
azure_local_ai
supporta la revisione dei parametri di configurazione del pool di thread di runtime ONNX all'interno del servizio di runtime ONNX. Le modifiche non sono consentite in questo momento. Vedere l'ottimizzazione delle prestazioni del runtime ONNX.
Argomenti
Chiave
I valori validi sono:
intra_op_parallelism
: imposta il numero totale di thread usati per la parallelizzazione di un singolo operatore dal pool di thread del runtime ONNX. Per impostazione predefinita, ingrandiamo il numero di thread tra le operazioni il più possibile in quanto così facendo si migliora la velocità effettiva complessiva (tutte le CPU disponibili per impostazione predefinita).inter_op_parallelism
: imposta il numero totale di thread usati per il calcolo di più operatori in parallelo dal pool di thread del runtime ONNX. Per impostazione predefinita, la proprietà viene impostata sul thread minimo possibile, ovvero 1. Aumentandola, spesso le prestazioni si riducono a causa di frequenti cambi di contesto tra thread.spin_control
: attiva la rotazione del pool di thread del runtime ONNX per le richieste. Se disabilitata, si usa meno CPU e quindi si causa una maggiore latenza. Per impostazione predefinita, è impostato su true (abilitato).
Tipo restituito
TEXT
che rappresenta il valore corrente dell'impostazione selezionata.
Esempi
Creare incorporamenti da testi esistenti
Di seguito è riportato un esempio che può essere usato nel proprio ambiente per testare la generazione di incorporamento con il modello multilingue-e5 distribuito in locale.
-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now());
--Insert data into the docs table
INSERT INTO documents(doc_contents) VALUES
('Create in-database embeddings with azure_local_ai extension.'),
('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');
-- Add a vector column and generate vector embeddings from locally deployed model
ALTER TABLE documents
ADD COLUMN doc_vector vector(384) -- multilingual-e5 embeddings are 384 dimensions
GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc_contents)::vector) STORED; -- TEXT string sent to local model
--View floating point entries in the doc_vector column
SELECT doc_vector FROM documents;
-- Add a single record to the documents table and the vector embedding using azure_local_ai and locally deployed model will be automatically generated
INSERT INTO documents(doc_contents) VALUES
('Semantic Search with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI');
--View all document entries, their contents, embeddings and last time the row was updated
SELECT doc_contents, doc_vector, last_update FROM documents;
-- The following command leverages the overload of azure_local_ai.create_embeddings function which accepts and array of TEXT
-- and produces a table for which each row contains the embedding of one element in the input array
SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', array['Recommendation System with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI.', 'Generative AI with Azure Database for PostgreSQL - Flexible Server.']);
Generare incorporamenti al momento dell'inserimento di nuovo testo
Di seguito è riportato un esempio che può essere usato nel proprio ambiente per testare la generazione di incorporamento con il modello multilingue-e5 distribuito in locale.
-- Create documents table
CREATE TABLE documents(doc_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, doc_contents TEXT NOT NULL, last_update TIMESTAMPTZ DEFAULT now(), doc_vector vector(384) GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc_contents)::vector) STORED);
-- Insert data into the documents table
INSERT INTO documents(doc_contents) VALUES
('Create in-database embeddings with azure_local_ai extension.'),
('Enable RAG patterns with in-database embeddings and vectors on Azure Database for PostgreSQL - Flexible server.'),
('Generate vector embeddings in PostgreSQL with azure_local_ai extension.'),
('Generate text embeddings in PostgreSQL for retrieval augmented generation (RAG) patterns with azure_local_ai extension and locally deployed LLM.'),
('Use vector indexes and Azure OpenAI embeddings in PostgreSQL for retrieval augmented generation.');
-- Query embedding text, list results by descending similarity score
WITH all_documents AS (
SELECT doc_id, doc_contents, doc_vector FROM documents
),
target_documents AS (
SELECT azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') doc_vector
)
SELECT all_documents.doc_id, all_docs.doc_contents , 1 - (all_documents.doc_vector::vector <=> target_documents.doc_vector::vector) AS similarity
FROM target_documents, all_documents
ORDER BY similarity DESC
LIMIT 2;
Contenuto correlato
- Integrare Database di Azure per PostgreSQL - Server flessibile con Servizi cognitivi di Azure.
- Integrare Database di Azure per PostgreSQL con Azure Machine Learning Services.
- Generare incorporamenti vettoriali con Azure OpenAI in Database di Azure per PostgreSQL - Server flessibile.
- Estensione azure per intelligenza artificiale in Database di Azure per PostgreSQL - Server flessibile.
- Intelligenza artificiale generativa con Database di Azure per PostgreSQL - Server flessibile.
- Sistema di raccomandazione con Database di Azure per PostgreSQL - Server flessibile e OpenAI di Azure.
- Ricerca semantica con Database di Azure per PostgreSQL - Server flessibile e OpenAI di Azure.
- Abilitare e usare pgvector in Database di Azure per PostgreSQL - Server flessibile.