Partager via


Générer des incorporations de vecteurs avec azure_local_ai sur Azure Database pour PostgreSQL – Serveur flexible (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. Activez les extensions suivantes,

    1. vector

    2. azure_local_ai

Pour plus d’informations sur l’activation d’extensions dans Azure Database pour PostgreSQL – Serveur flexible, consultez Comment activer des extensions dans Azure Database pour PostgreSQL.

Remarque

Lorsque vous activez la préversion d’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.

Fonctions fournies par l’extension azure_local_ai

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

Ceux-ci peuvent être affichés via la commande PSQL,

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

Utiliser azure_local_ai et le modèle multilingual-e5-small déployé localement pour créer des incorporations et les stocker en tant que vecteurs

Voici des exemples 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 docs table
CREATE TABLE docs(doc_id int generated always as identity primary key, doc text not null, embedding float4[], last_update timestamptz default now());

--Insert data into the docs table
INSERT INTO docs(doc) 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 docs
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)::vector) STORED; -- TEXT string sent to local model

--View floating point entries in the doc_vector column
select doc_vector from docs;

-- Add a single record to the docs table and the vector embedding using azure_local_ai and locally deployed model will be automatically generated
INSERT INTO docs(doc) VALUES ('Semantic Search with Azure Database for PostgreSQL - Flexible Server and Azure OpenAI');

--View all doc entries and their doc_vector column
select doc, doc_vector, last_update from docs;

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

Mettre à jour les incorporations lors de l’insertion

Voici des exemples 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.

-- Update embeddings upon insertion

-- create table
create table docs(doc_id int generated always as identity primary key, doc text not null, last_update timestamptz default now(), embedding float4[] 
	GENERATED ALWAYS AS (azure_local_ai.create_embeddings('multilingual-e5-small:v1', doc)) STORED);

--Insert data into the docs table
INSERT INTO docs(doc) 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_docs as (
 select doc_id, doc, embedding
  from docs
), target_doc as (
 select azure_local_ai.create_embeddings('multilingual-e5-small:v1', 'Generate text embeddings in PostgreSQL.') embedding
)
select all_docs.doc_id, all_docs.doc , 1 - (all_docs.embedding::vector <=> target_doc.embedding::vector) as similarity
 from target_doc, all_docs
 order by similarity desc
 limit 2;

Configuration d’ONNX Runtime

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 valides pour la key sont les suivantes :

  • 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é.