Générer des incorporations vectorielles dans Azure Database pour PostgreSQL – Serveur flexible avec un LLM déployé localement (préversion)
Prérequis
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
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;
Contenu connexe
- Intégrer Azure Database pour PostgreSQL – Serveur flexible à Azure Cognitive Services
- Intégrer Azure Database pour PostgreSQL à Azure Machine Learning Services
- Générer des incorporations vectorielles avec Azure OpenAI dans Azure Database pour PostgreSQL – Serveur flexible
- Extension Azure AI dans Azure Database pour PostgreSQL – Serveur flexible
- IA générative avec Azure Database pour PostgreSQL – Serveur flexible
- Système de recommandation avec Azure Database pour PostgreSQL – Serveur flexible et Azure OpenAI
- Recherche sémantique avec Azure Database pour PostgreSQL – Serveur flexible et Azure OpenAI
- Activer et utiliser pgvector dans Azure Database pour PostgreSQL – Serveur flexible