Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
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
Un abonnement Azure. Créez-en un gratuitement.
Accès accordé à Azure OpenAI dans l’abonnement Azure souhaité. Actuellement, l’application accorde l’accès à ce service. Vous pouvez demander l’accès à Azure OpenAI en remplissant le formulaire en accès limité pour le service Azure OpenAI.
Une ressource Azure OpenAI avec un modèle
text-embedding-ada-002(version 2) déployé. Ce modèle est actuellement disponible uniquement dans certaines régions. Si vous n’avez pas de ressource, le processus permettant d’en créer une est documenté dans notre guide de déploiement de ressources Azure OpenAI.Ressource Azure AI Language. Si vous n’avez pas de ressource de langue, vous pouvez en créer un dans le portail Azure en suivant les instructions fournies dans le guide de démarrage rapide pour résumer. Vous pouvez utiliser le niveau tarifaire gratuit (
Free F0) pour tester le service, puis passer par la suite à un niveau payant pour la production.Instance de serveur flexible Azure Database pour PostgreSQL dans votre abonnement Azure. Si vous n’avez pas cette ressource, consultez Créer une base de données Azure pour PostgreSQL.
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 :
Dans le portail Azure, accédez à votre instance de serveur flexible Azure Database pour PostgreSQL.
Dans le menu de gauche, sous Paramètres, sélectionnez Se connecter. Copiez le bloc détails de la connexion .
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}"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 :
Ajoutez l’extension à votre liste de permissions, comme cela est décrit dans Autoriser les extensions.
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é :
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.
Copiez votre point de terminaison et votre clé d'accès. Vous pouvez utiliser soit
KEY1, soitKEY2. 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.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’invitepsqlde 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}');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 :
Accédez à votre ressource Azure OpenAI dans le portail Azure.
Dans le menu de gauche, sous Gestion des ressources, sélectionnez Déploiements de modèles pour ouvrir le portail Azure AI Foundry.
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-002modèle.
À 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.
Effectuer une recherche de similarité vectorielle
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 :
Dans le portail Azure, accédez à votre ressource language service.
Dans le menu de gauche, sous Gestion des ressources, sélectionnez Clés et point de terminaison.
Copiez votre point de terminaison et votre clé d'accès. Vous pouvez utiliser soit
KEY1, soitKEY2.Dans l’invite
psqlde 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.
Contenu connexe
- Autoriser les extensions dans Azure Database pour PostgreSQL
- Découvrir comment générer des incorporations avec Azure OpenAI
- Azure OpenAI dans les modèles Azure AI Foundry
- Comprendre les incorporations dans Azure OpenAI dans les modèles Azure AI Foundry
- Qu’est-ce qu’Azure AI Language ?
- Qu’est-ce qu’Azure OpenAI dans les modèles Azure AI Foundry ?