Condividi tramite


Generare incorporamenti vettoriali in Database di Azure per PostgreSQL - Server flessibile con LLM distribuito localmente (anteprima)

Prerequisiti

  1. 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

  2. È 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;