Partager via


Intégrer des fonctionnalités d’IA Azure dans Azure Database pour PostgreSQL

L’extension azure_ai ajoute la possibilité d’utiliser des modèles de langage volumineux (LLMs) et de créer des applications IA génératives au sein d’une base de données Azure Database pour PostgreSQL en intégrant la puissance des services Azure AI.

L’IA générative est une forme d’intelligence artificielle dans laquelle les LLM sont formés pour générer du contenu original basé sur l’entrée en langage naturel. À l’aide de l’extension azure_ai , vous pouvez utiliser les fonctionnalités de l’IA générative pour traiter les requêtes en langage naturel directement à partir de la base de données.

Cet article présente l’ajout de fonctionnalités d’IA enrichies à une instance de serveur flexible Azure Database pour PostgreSQL à l’aide de l’extension azure_ai . Il montre comment intégrer Azure OpenAI et le service Azure AI Language à votre base de données à l’aide de l’extension.

Prérequis

Se connecter à la base de données à l’aide de psql dans Azure Cloud Shell

Ouvrez Azure Cloud Shell dans un navigateur web. Sélectionnez Bash comme environnement. Si vous y êtes invité, sélectionnez l’abonnement que vous avez utilisé pour votre base de données Azure Database pour PostgreSQL, puis sélectionnez Créer un stockage.

Pour récupérer les détails de connexion à la base de données :

  1. Dans le portail Azure, accédez à votre instance de serveur flexible Azure Database pour PostgreSQL.

  2. Dans le menu de gauche, sous Paramètres, sélectionnez Se connecter. Copiez le bloc détails de la connexion .

  3. Collez les lignes de déclaration copiées pour les variables d’environnement dans le terminal Azure Cloud Shell. Remplacez le jeton par le {your-password} mot de passe que vous avez défini lors de la création de la base de données.

    export PGHOST={your-server-name}.postgresql.database.azure.com
    export PGUSER={your-user-name}
    export PGPORT=5432
    export PGDATABASE={your-database-name}
    export PGPASSWORD="{your-password}"
    
  4. Connectez-vous à votre base de données à l’aide de l’outil en ligne de commande psql. Entrez la commande suivante à l’invite :

    psql
    

Installer l’extension azure_ai

Vous pouvez utiliser l’extension azure_ai pour intégrer Azure OpenAI et Azure Cognitive Services dans votre base de données. Pour plus d’informations, consultez Générer des incorporations vectorielles avec Azure OpenAI dans Azure Database pour PostgreSQL.

Pour activer l’extension dans votre base de données :

  1. Ajoutez l’extension à votre liste de permissions, comme cela est décrit dans Autoriser les extensions.

  2. Dans la base de données dans laquelle vous envisagez d’utiliser l’extension azure_ai , installez l’extension comme décrit dans Créer des extensions.

Inspecter les objets dans l’extension azure_ai

L’examen des objets que contient l’extension azure_ai peut fournir une meilleure compréhension des fonctionnalités qu’elle offre. Vous pouvez utiliser la \dx méta-commande à partir de l’invite psql de commandes pour répertorier les objets de l’extension :

\dx+ azure_ai

La sortie de la méta-commande indique que l’extension azure_ai crée trois schémas, plusieurs fonctions définies par l’utilisateur (UDF) et plusieurs types composites dans la base de données. Le tableau suivant décrit les schémas ajoutés par l’extension :

schéma Descriptif
azure_ai Fournit le schéma principal où se trouvent la table de configuration et les fonctions définies par l’utilisateur pour interagir avec elle.
azure_openai Contient les fonctions définies par l’utilisateur qui activent l’appel d’un point de terminaison Azure OpenAI.
azure_cognitive Fournit des fonctions définies par l’utilisateur et des types composites liés à l’intégration de la base de données à Azure Cognitive Services.

Les fonctions et les types sont tous associés à l’un des schémas. Pour passer en revue les fonctions définies dans le azure_ai schéma, utilisez la \df méta-commande. Spécifiez le schéma dont les fonctions doivent être affichées. Les commandes \x auto avant la commande \df permettent d’activer et de désactiver automatiquement l’affichage développé pour faciliter la visualisation de la sortie de la commande dans Azure Cloud Shell.

\x auto
\df+ azure_ai.*

Utilisez la azure_ai.set_setting() fonction pour définir le point de terminaison et les valeurs critiques pour les services Azure AI. Elle accepte une clé et la valeur à lui affecter. La azure_ai.get_setting() fonction permet de récupérer les valeurs que vous définissez avec la set_setting() fonction. Il accepte la clé du paramètre que vous souhaitez afficher. Pour les deux méthodes, la clé doit être l’une des suivantes :

Clé Descriptif
azure_openai.endpoint Point de terminaison Azure OpenAI pris en charge (par exemple, https://example.openai.azure.com).
azure_openai.subscription_key Clé d’abonnement pour une ressource Azure OpenAI.
azure_cognitive.endpoint Un point de terminaison Cognitive Services pris en charge (par exemple, https://example.cognitiveservices.azure.com).
azure_cognitive.subscription_key Une clé d’abonnement pour une ressource Cognitive Services.

Important

Étant donné que les informations de connexion pour les services Azure AI, y compris les clés API, sont stockées dans une table de configuration dans la base de données, l’extension azure_ai définit un rôle appelé azure_ai_settings_manager pour vous assurer que ces informations sont protégées et accessibles uniquement aux utilisateurs qui ont ce rôle. Ce rôle permet la lecture et l’écriture des paramètres liés à l’extension.

Seuls les superutilisateurs et les membres du rôle azure_ai_settings_manager peuvent appeler les fonctions azure_ai.get_setting() et azure_ai.set_setting(). Dans Azure Database pour PostgreSQL, tous les utilisateurs administrateurs ont le azure_ai_settings_manager rôle.

Générer des incorporations vectorielles avec Azure OpenAI

Le schéma azure_ai de l’extension azure_openai permet d’utiliser Azure OpenAI pour créer des incorporations vectorielles pour les valeurs de texte. À l’aide de ce schéma, vous pouvez générer des incorporations avec Azure OpenAI directement à partir de la base de données pour créer des représentations vectorielles du texte d’entrée. Ces représentations peuvent ensuite être utilisées dans les recherches de similarité vectorielle et consommées par les modèles Machine Learning.

Les incorporations sont une technique d’utilisation de modèles Machine Learning pour évaluer la relation étroite entre les informations. Cette technique permet une identification efficace des relations et des similitudes entre les données, afin que les algorithmes puissent identifier des modèles et effectuer des prédictions précises.

Définir le point de terminaison Azure OpenAI et la clé

Avant d’utiliser les azure_openai fonctions, configurez l’extension avec votre point de terminaison de service Azure OpenAI et votre clé :

  1. Dans le portail Azure, accédez à votre ressource Azure OpenAI. Dans le menu de gauche, sous Gestion des ressources, sélectionnez Clés et point de terminaison.

  2. Copiez votre point de terminaison et votre clé d'accès. Vous pouvez utiliser soit KEY1, soit KEY2. Avoir toujours deux clés vous permet de faire pivoter et de régénérer en toute sécurité les clés sans provoquer d’interruption de service.

  3. Dans la commande suivante, remplacez les jetons {endpoint} et {api-key} par des valeurs que vous avez récupérées à partir du portail Azure. Exécutez ensuite les commandes à partir de l’invite psql de commandes pour ajouter vos valeurs à la table de configuration.

    SELECT azure_ai.set_setting('azure_openai.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_openai.subscription_key', '{api-key}');
    
  4. Vérifiez les paramètres écrits dans la table de configuration :

    SELECT azure_ai.get_setting('azure_openai.endpoint');
    SELECT azure_ai.get_setting('azure_openai.subscription_key');
    

L’extension azure_ai est désormais connectée à votre compte Azure OpenAI et prête à générer des incorporations vectorielles.

Remplir la base de données avec des exemples de données

Cet article utilise un petit sous-ensemble du jeu de données BillSum pour fournir des exemples de données de texte pour générer des vecteurs. Ce jeu de données fournit une liste des projets de loi du Congrès des États-Unis et de l'État de Californie. Vous pouvez télécharger le bill_sum_data.csv fichier qui contient ces données à partir du dépôt GitHub pour les exemples Azure.

Pour héberger les exemples de données dans la base de données, créez une table nommée bill_summaries:

CREATE TABLE bill_summaries
(
    id bigint PRIMARY KEY,
    bill_id text,
    bill_text text,
    summary text,
    title text,
    text_len bigint,
    sum_len bigint
);

À l’aide de la commande PostgreSQL COPY à partir de l’invite psql de commandes, chargez les données d'exemple du fichier CSV dans la table bill_summaries. Spécifiez que la première ligne du fichier CSV est une ligne d’en-tête.

\COPY bill_summaries (id, bill_id, bill_text, summary, title, text_len, sum_len) FROM PROGRAM 'curl "https://raw.githubusercontent.com/Azure-Samples/Azure-OpenAI-Docs-Samples/main/Samples/Tutorials/Embeddings/data/bill_sum_data.csv"' WITH CSV HEADER ENCODING 'UTF8'

Activer la prise en charge des vecteurs

Vous pouvez utiliser l’extension azure_ai pour générer des incorporations pour le texte d’entrée. Pour permettre aux vecteurs générés d’être stockés en même temps que le reste de vos données dans la base de données, vous devez installer l’extension pgvector . Suivez les instructions de la documentation sur l’activation de la prise en charge des vecteurs dans votre base de données.

Avec l’ajout de la prise en charge des vecteurs dans votre base de données, ajoutez une nouvelle colonne à la table bill_summaries à l’aide du type de données vector pour stocker des incorporations dans la table. Le text-embedding-ada-002 modèle produit des vecteurs avec 1 536 dimensions. Vous devez donc spécifier 1536 la taille du vecteur.

ALTER TABLE bill_summaries
ADD COLUMN bill_vector vector(1536);

Générer et stocker des vecteurs

La table bill_summaries est maintenant prête à stocker des incorporations. À l’aide de la azure_openai.create_embeddings() fonction, vous créez des vecteurs pour le bill_text champ et les insérez dans la colonne nouvellement créée bill_vector dans la bill_summaries table.

Avant d’utiliser la create_embeddings() fonction, exécutez la commande suivante pour l’inspecter et passer en revue les arguments requis :

\df+ azure_openai.*

La Argument data types propriété dans la sortie de la \df+ azure_openai.* commande affiche la liste des arguments attendus par la fonction :

Raisonnement Type Par défaut Descriptif
deployment_name text Nom du déploiement dans le portail Azure AI Foundry qui contient le text-embeddings-ada-002 modèle.
input text Texte d’entrée utilisé pour créer des incorporations.
timeout_ms integer 3600000 Délai d’expiration en millisecondes, après quoi l’opération est arrêtée.
throw_on_error boolean true Indicateur qui indique si la fonction doit, en cas d’erreur, lever une exception qui entraîne une restauration des transactions de wrapping.

Le premier argument est la deployment_name valeur qui a été affectée lorsque votre modèle d’incorporation a été déployé dans votre compte Azure OpenAI. Pour récupérer cette valeur :

  1. Accédez à votre ressource Azure OpenAI dans le portail Azure.

  2. Dans le menu de gauche, sous Gestion des ressources, sélectionnez Déploiements de modèles pour ouvrir le portail Azure AI Foundry.

  3. Dans le portail Azure AI Foundry, sélectionnez Déploiements. Dans le volet Déploiements , copiez la valeur du nom de déploiement associée au déploiement du text-embedding-ada-002 modèle.

Capture d’écran montrant des déploiements incorporés pour l’intégration de l’IA.

À l’aide de ces informations, exécutez une requête pour mettre à jour chaque enregistrement de la bill_summaries table. Insérez les représentations vectorielles générées pour le champ bill_text dans la colonne bill_vector à l’aide de la fonction azure_openai.create_embeddings(). Remplacez {your-deployment-name} par la valeur du nom de déploiement que vous avez copiée dans le volet Déploiements du portail Azure AI Foundry. Exécutez ensuite la commande suivante :

UPDATE bill_summaries b
SET bill_vector = azure_openai.create_embeddings('{your-deployment-name}', b.bill_text);

Exécutez la requête suivante pour afficher l’incorporation générée pour le premier enregistrement de la table. Vous pouvez d’abord exécuter \x si la sortie est difficile à lire.

SELECT bill_vector FROM bill_summaries LIMIT 1;

Chaque embedding est un vecteur de nombres à virgule flottante. La distance entre deux incorporations dans l’espace vectoriel est corrélée avec la similarité sémantique entre deux entrées au format d’origine.

La similarité vectorielle est une méthode permettant de mesurer la façon dont deux éléments similaires sont en les représentant en tant que vecteurs. Les vecteurs sont une série de nombres. Ils sont souvent utilisés pour effectuer des recherches via des grands modèles de langage.

La similarité vectorielle est généralement calculée à l’aide de métriques de distance, telles que :

  • Distance euclide : mesure la distance droite entre deux vecteurs dans l’espace ndimensionnel.
  • Similarité cosinus : mesure le cosinus de l’angle entre deux vecteurs.

Permettre une recherche plus efficace sur le champ vector en créant un index sur bill_summaries utilisant la distance cosinus et le modèle Hiérarchique Navigable Small World (HNSW). Le HNSW permet à pgvector d’utiliser les algorithmes les plus récents basés sur des graphiques pour estimer les requêtes des plus proches voisins.

CREATE INDEX ON bill_summaries USING hnsw (bill_vector vector_cosine_ops);

Avec tout ce qui est maintenant en place, vous êtes prêt à exécuter une requête de recherche de similarité cosinus sur la base de données.

Dans la requête suivante, les incorporations sont générées pour une question d’entrée, puis castées en tableau de vecteurs (::vector). Le tableau de vecteurs permet de comparer la question aux vecteurs stockés dans la bill_summaries table.

SELECT bill_id, title FROM bill_summaries
ORDER BY bill_vector <=> azure_openai.create_embeddings('embeddings', 'Show me bills relating to veterans entrepreneurship.')::vector
LIMIT 3;

La requête utilise l’opérateur <=>vector. Cet opérateur représente l’opérateur de distance cosinus utilisé pour calculer la distance entre deux vecteurs dans un espace multidimensionnel.

Intégrer Azure Cognitive Services

Les intégrations des services Azure AI incluses dans le azure_cognitive schéma de l’extension azure_ai fournissent un ensemble complet de fonctionnalités de langage IA auxquelles vous pouvez accéder directement à partir de la base de données. Les fonctionnalités incluent l’analyse des sentiments, la détection du langage, l’extraction d’expressions clés, la reconnaissance d’entité et le résumé de texte. L’accès à ces fonctionnalités est activé via le service Azure AI Language.

Pour passer en revue les fonctionnalités d’IA Azure complètes auxquelles vous pouvez accéder via l’extension, consultez Intégrer Azure Database pour PostgreSQL à Azure Cognitive Services.

Définir le point de terminaison de service Azure AI Language et la clé

Comme avec les azure_openai fonctions, pour effectuer des appels auprès des services Azure AI à l’aide de l’extension azure_ai , vous devez fournir le point de terminaison et une clé pour votre ressource de service Azure AI Language :

  1. Dans le portail Azure, accédez à votre ressource language service.

  2. Dans le menu de gauche, sous Gestion des ressources, sélectionnez Clés et point de terminaison.

  3. Copiez votre point de terminaison et votre clé d'accès. Vous pouvez utiliser soit KEY1, soit KEY2.

  4. Dans l’invite psql de commandes, exécutez les commandes suivantes pour ajouter vos valeurs à la table de configuration. Remplacez les jetons {endpoint} et {api-key} par les valeurs que vous avez récupérées à partir du portail Azure.

    SELECT azure_ai.set_setting('azure_cognitive.endpoint','{endpoint}');
    SELECT azure_ai.set_setting('azure_cognitive.subscription_key', '{api-key}');
    

Effectuer un résumer des factures

Pour illustrer certaines des fonctionnalités de l’extension azure_cognitiveazure_ai , vous pouvez générer un résumé de chaque facture. Le azure_cognitive schéma fournit deux fonctions pour résumer le texte :

  • summarize_abstractive: le résumé abstrait produit un résumé qui capture les principaux concepts du texte d’entrée, mais qui peut ne pas utiliser de mots identiques.
  • summarize_extractive: le résumé extractif assemble un résumé en extrayant des phrases critiques du texte d’entrée.

Pour utiliser la capacité du service Azure AI Language à générer du nouveau contenu original, vous utilisez la fonction summarize_abstractive pour créer un résumé de l’entrée de texte. Utilisez à nouveau la méta-commande \df depuis psql, cette fois pour examiner spécifiquement la fonction azure_cognitive.summarize_abstractive :

\df azure_cognitive.summarize_abstractive

La Argument data types propriété dans la sortie de la \df azure_cognitive.summarize_abstractive commande affiche la liste des arguments attendus par la fonction :

Raisonnement Type Par défaut Descriptif
text text Texte saisi à résumer.
language text Représentation ISO 639-1 à deux lettres de la langue dans laquelle le texte d’entrée est écrit. Pour les valeurs autorisées, vérifiez la prise en charge de la langue pour les fonctionnalités de langage.
timeout_ms integer 3600000 Délai d’expiration en millisecondes, après quoi l’opération est arrêtée.
throw_on_error boolean true Indicateur qui indique si la fonction doit, en cas d’erreur, lever une exception qui entraîne une restauration des transactions de wrapping.
sentence_count integer 3 Nombre maximal de phrases à inclure dans le résumé généré.
disable_service_logs boolean false Paramètre qui désactive les journaux du service de langage. Le service de langage enregistre votre texte d’entrée pendant 48 heures uniquement pour permettre la résolution des problèmes. La définition de cette propriété sur true désactive la journalisation des entrées et peut limiter notre capacité à examiner les problèmes qui se produisent. Pour plus d’informations, consultez les notes de conformité et de confidentialité cognitive Services et les principes de l’IA responsable Microsoft.

La summarize_abstractive fonction nécessite les arguments suivants : azure_cognitive.summarize_abstractive(text TEXT, language TEXT).

La requête suivante sur la bill_summaries table utilise la summarize_abstractive fonction pour générer un nouveau résumé en une phrase pour le texte d’une facture. Il vous permet d’incorporer la puissance de l’IA générative directement dans vos requêtes.

SELECT
    bill_id,
    azure_cognitive.summarize_abstractive(bill_text, 'en', sentence_count => 1) one_sentence_summary
FROM bill_summaries
WHERE bill_id = '112_hr2873';

Vous pouvez également utiliser la fonction pour écrire des données dans vos tables de base de données. Modifiez la bill_summaries table pour ajouter une nouvelle colonne pour stocker les résumés d’une phrase dans la base de données :

ALTER TABLE bill_summaries
ADD COLUMN one_sentence_summary TEXT;

Ensuite, mettez à jour le tableau avec les résumés. La fonction summarize_abstractive retourne un tableau de texte (text[]). La fonction array_to_string convertit la valeur de retour en sa représentation sous forme de chaîne. Dans la requête suivante, l’argument throw_on_error est défini sur false. Ce paramètre permet au processus de résumé de continuer si une erreur se produit.

UPDATE bill_summaries b
SET one_sentence_summary = array_to_string(azure_cognitive.summarize_abstractive(b.bill_text, 'en', throw_on_error => false, sentence_count => 1), ' ', '')
where one_sentence_summary is NULL;

Dans la sortie, vous pourriez remarquer un avertissement concernant un document non valide pour lequel un résumé approprié n’a pas pu être généré. Cet avertissement résulte du fait de définir throw_on_error sur false dans la requête précédente. Si vous avez laissé cet indicateur à la valeur par défaut true, la requête échoue et aucun résumé n’est écrit dans la base de données. Pour afficher l’enregistrement qui a levé l’avertissement, exécutez cette commande :

SELECT bill_id, one_sentence_summary FROM bill_summaries WHERE one_sentence_summary is NULL;

Vous pouvez ensuite interroger la bill_summaries table pour afficher les nouveaux résumés d’une phrase générés par l’extension azure_ai pour les autres enregistrements de la table :

SELECT bill_id, one_sentence_summary FROM bill_summaries LIMIT 5;

Conclusion

Félicitations! Vous venez d’apprendre à utiliser l’extension azure_ai pour intégrer des modèles de langage volumineux et des fonctionnalités d’IA générative dans votre base de données.