Partager via


Générer des incorporations vectorielles dans Azure Database pour PostgreSQL – Serveur flexible avec un LLM déployé localement (préversion)

Prérequis

  1. Instance de serveur flexible Azure Database pour PostgreSQL s’exécutant sur une référence SKU de machine virtuelle à mémoire optimisée. Découvrez-en plus sur les machines virtuelles Azure à mémoire optimisée ici : Tailles de machine virtuelle Azure – Mémoire – Machines virtuelles Azure

  2. Il convient d’activer l’extension vector, car elle fournit des fonctionnalités permettant de stocker et d’indexer efficacement des incorporations de texte dans votre base de données.

Activer l’extension

Avant de pouvoir activer azure_local_ai sur votre instance de serveur flexible Azure Database pour PostgreSQL, vous devez autoriser l’extension azure_local_ai comme décrit dans Autoriser une extension.

Important

L’hébergement de modèles de langage dans la base de données nécessite une grande empreinte mémoire. Pour prendre en charge cette exigence, azure_local_ai est uniquement pris en charge sur les SKU de machines virtuelles Azure en mémoire optimisée avec 4 vCores au minimum. Si vous utilisez une machine virtuelle qui ne répond pas aux exigences minimales, l’extension azure_local_ai n’apparaît pas dans la liste des valeurs autorisées pour le paramètre de serveur azure.extensions.

Une fois l’extension autorisée, vous pouvez suivre les instructions fournies dans Créer des extensions pour installer l’extension dans chaque base de données à partir de laquelle vous souhaitez l’utiliser.

Remarque

Lorsque vous activez Azure Local AI, le modèle multilingual-e5-small est déployé sur votre instance de serveur flexible Azure Database pour PostgreSQL. La documentation liée fournit les termes du contrat de licence de l’équipe e5. D’autres modèles open source tiers pourront être proposés à l’installation sur une base régulière.

L’installation de l’extension azure_local_ai crée un schéma appelé azure_local_ai dans lequel l’extension stocke les tables, les fonctions et tous les autres objets liés à SQL dont elle a besoin pour implémenter et exposer ses fonctionnalités.

Important

Il convient d’activer l’extension vector, car elle est nécessaire pour stocker des incorporations de texte dans votre base de données PostgreSQL.

Fonctions fournies par l’extension

L’extension azure_local_ai fournit un ensemble de fonctions. Ces fonctions vous permettent de créer des incorporations de vecteurs à partir de données de texte, facilitant ainsi le développement d’applications d’IA générative. L’extension offre des fonctions pour créer des incorporations, obtenir des paramètres, etc. En utilisant ces fonctions, vous pouvez simplifier le processus de développement et réduire la latence en éliminant la nécessité d’effectuer des appels d’API distants supplémentaires vers des modèles d’incorporation d’IA hébergés en dehors de la limite PostgreSQL.

schéma Nom Type de données de résultat Types de données d’argument
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 texte key text, timeout_ms integer DEFAULT 3600000
azure_local_ai model_metadata jsonb model_uri text

Ces fonctions peuvent être affichées à l’aide de la méta-commande psql suivante :

\df azure_local_ai.*

azure_local_ai.create_embeddings

L’extension azure_local_ai vous permet de créer et de mettre à jour des incorporations au format scalaire et par lots, en appelant le LLM déployé localement.

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);

Arguments

model_uri

text : nom du modèle d’incorporation de texte appelé pour créer l’incorporation.

input

text ou text[] Texte unique ou tableau de textes, en fonction de la surcharge de la fonction utilisée, pour laquelle les incorporations sont créées.

batch_size

bigint DEFAULT 128 Nombre d’enregistrements à traiter à la fois (disponible uniquement pour la surcharge de la fonction pour laquelle le paramètre input est de type text[]).

timeout_ms

Délai d’expiration de integer DEFAULT 3600000 en millisecondes après lequel l’opération est arrêtée.

azure_local_ai.get_setting

Permet d’obtenir les valeurs actuelles des options de configuration.

SELECT azure_local_ai.get_setting(key TEXT)

L’extension azure_local_ai prend en charge l’examen des paramètres de configuration du pool de threads ONNX Runtime dans le service ONNX Runtime. Les modifications ne sont pas autorisées pour le moment. Consultez le réglage des performances d’ONNX Runtime.

Arguments

Clé

Les valeurs autorisées sont :

  • intra_op_parallelism : définit le nombre total de threads utilisés pour la parallélisation d’un opérateur unique par le pool de threads ONNX Runtime. Par défaut, nous maximisons autant que possible le nombre de threads intra-ops, ce qui améliore considérablement le débit global (tous les processeurs disponibles par défaut).
  • inter_op_parallelism : définit le nombre total de threads utilisés pour le calcul de plusieurs opérateurs en parallèle par le pool de threads ONNX Runtime. Par défaut, nous le définissons sur le nombre minimum de threads possible, à savoir 1. Toute augmentation nuit souvent aux performances en raison des changements de contexte fréquents entre les threads.
  • spin_control : active la rotation du pool de threads ONNX Runtime pour les requêtes. Lorsque cette option est désactivée, la latence augmente en raison de la réduction du nombre de processeurs utilisés. Par défaut, cette option est définie sur true (activée).

Type renvoyé

TEXT représentant la valeur actuelle du paramètre sélectionné.

Exemples

Créer des incorporations à partir de textes existants

Voici un exemple que vous pouvez utiliser dans votre propre environnement pour tester la génération d’incorporations avec le modèle multilingual-e5 déployé localement.

-- 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.']);

Générer des incorporations lors de l’insertion d’un nouveau texte

Voici un exemple que vous pouvez utiliser dans votre propre environnement pour tester la génération d’incorporations avec le modèle multilingual-e5 déployé localement.

-- 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;