Générer du code SQL à partir d'invites en langage naturel à l'aide de Select AI

Base de données d'IA autonome sur une infrastructure Exadata dédiée Select AI vous permet d'interroger vos données en langage naturel.

La fonctionnalité Select AI permet à Autonomous AI Database d'utiliser l'IA générative avec les grands modèles de langage (LLM) pour convertir le texte d'entrée de l'utilisateur en code SQL Oracle. Select AI traite l'invite en langage naturel, la complète avec des métadonnées, puis génère et exécute une requête SQL.

A propos de Select AI

Utilisez le langage naturel pour interagir avec votre base de données et vos LLM via SQL afin d'améliorer la productivité des utilisateurs et de développer des applications basées sur l'IA. Select AI simplifie et automatise l'utilisation de l'IA générative, qu'il s'agisse de générer, d'exécuter et d'expliquer le code SQL à partir d'une invite de langage naturel, d'utiliser la génération augmentée d'extraction avec des magasins de vecteurs, de générer des données synthétiques ou de discuter avec le LLM.

Lorsque vous utilisez Select AI, Autonomous AI Database gère le processus de conversion du langage naturel en langage SQL. Cela signifie que vous pouvez fournir une invite en langage naturel au lieu du code SQL pour interagir avec vos données. Select AI sert d'outil de productivité pour les utilisateurs et les développeurs SQL et permet aux utilisateurs SQL non experts de tirer des informations utiles de leurs données, sans avoir à comprendre les structures de données ou les langages techniques.

Select AI automatise également le processus de génération augmentée de récupération (RAG) de la génération d'intégrations vectorielles à la récupération de contenu pertinent en fonction de votre invite via une recherche de similarité sémantique à l'aide de votre magasin de vecteurs. D'autres fonctionnalités incluent la génération de données synthétiques, la prise en charge de l'historique des discussions pour les conversations et d'autres fonctionnalités, le tout à partir d'une interface SQL.

Le package DBMS_CLOUD_AI permet l'intégration à un LLM spécifié par l'utilisateur pour générer du code SQL à l'aide d'invites en langage naturel. Pour la génération du langage naturel au langage SQL, ce package fournit une invite augmentée au LLM contenant les métadonnées de schéma de base de données pertinentes. Cela permet de générer, d'exécuter et d'expliquer des requêtes SQL basées sur des invites en langage naturel. Il facilite également la génération augmentée de récupération à l'aide de banques de vecteurs, de la génération de données synthétiques et permet de discuter avec le LLM. Le package DBMS_CLOUD_AI fonctionne avec les fournisseurs d'IA répertoriés dans Sélectionner votre fournisseur d'IA et vos LLM.

Remarques :

  • Vous devez disposer d'un compte auprès du fournisseur d'IA et fournir les informations d'identification via les objets DBMS_CLOUD_AI utilisés par la base de données IA autonome.

  • Vous pouvez soumettre des invites dans plusieurs langues. La qualité du résultat dépend des capacités du LLM spécifique ou du modèle d'intégration (transformateur) utilisé. Vérifiez votre LLM ou la documentation du modèle d'intégration pour la prise en charge multilingue.

Plates-formes prises en charge

Select AI est pris en charge sur Autonomous AI Database sans serveur et Autonomous AI Database sur une infrastructure Exadata dédiée et le cloud chez les clients.

  • Base de données d'IA autonome sans serveur
  • Base de données IA autonome sur une infrastructure Exadata dédiée
  • Région Base de données d'IA autonome sur une infrastructure Exadata dédiée
  • Base de données d'IA autonome Cloud@Customer

Terminologie relative

Il est important de comprendre les différents termes utilisés avec Select AI avant de l'utiliser.

Les termes suivants sont liés à la fonction Sélectionner IA :

Terme Définition
Conversations

Les conversations dans Select AI représentent un échange interactif entre l'utilisateur et le système, permettant aux utilisateurs d'interroger ou d'interagir avec la base de données via une série d'invites en langage naturel. Select AI intègre des conversations à court terme basées sur les sessions afin de générer des réponses contextuelles pour l'invite actuelle en fonction des interactions précédentes. Jusqu'à 10 invites précédentes sont intégrées à la demande actuelle avec des conversations à court terme, créant ainsi une invite augmentée envoyée au LLM. Select AI prend en charge l'utilisation de conversations personnalisables à long terme, vous permettant d'utiliser Select AI avec différents sujets sans mélange de contexte, qui peuvent être configurés via des API de conversation à partir du package DBMS_CLOUD_AI. Pour plus d'informations, reportez-vous à Utilisation et personnalisation des conversations.

Informations d'identification de base de données

Les informations d'identification de base de données sont des informations d'identification d'authentification utilisées pour accéder aux bases de données et interagir avec elles. Ils se composent généralement d'un nom d'utilisateur et d'un mot de passe, parfois complétés par des facteurs d'authentification supplémentaires tels que des jetons de sécurité. Ces informations d'identification sont utilisées pour établir une connexion sécurisée entre une application ou un utilisateur et une base de données, garantissant que seules les personnes ou les systèmes autorisés peuvent accéder aux données stockées dans la base et les manipuler.

Hallucination en LLM

L'hallucination dans le contexte des grands modèles de langage fait référence à un phénomène dans lequel le modèle génère un texte incorrect, absurde ou sans rapport avec l'invite d'entrée. En dépit d'être le résultat de la tentative du modèle de générer un texte cohérent, ces cas peuvent contenir des informations qui sont fabriquées, trompeuses ou purement imaginatives. L'hallucination peut se produire en raison de biais dans les données d'entraînement, d'un manque de compréhension correcte du contexte ou de limites dans le processus d'entraînement du modèle.

IAM Oracle Cloud Infrastructure Identity and Access Management (IAM) vous permet de contrôler qui a accès à vos ressources cloud. Vous pouvez contrôler le type d'accès affecté à un groupe d'utilisateurs et les ressources spécifiques auxquelles ces utilisateurs ont accès. Pour plus d'informations, reportez-vous à Présentation d'Identity and Access Management.

Invites en langage naturel

Les invites de langage naturel sont des instructions lisibles par l'homme ou des demandes fournies pour guider les modèles d'IA générative, tels que les grands modèles de langage. Au lieu d'utiliser des langages de programmation ou des commandes spécifiques, les utilisateurs peuvent interagir avec ces modèles en entrant des invites sous une forme plus conversationnelle ou en langage naturel. Les modèles génèrent ensuite une sortie en fonction de l'invite fournie.

Liste de contrôle d'accès réseau (ACL)

Une liste de contrôle d'accès réseau est un ensemble de règles ou d'autorisations qui définissent le trafic réseau autorisé à passer par un périphérique réseau, tel qu'un routeur, un pare-feu ou une passerelle. Les ACL sont utilisées pour contrôler et filtrer le trafic entrant et sortant en fonction de divers critères tels que les adresses IP, les numéros de port et les protocoles. Ils jouent un rôle crucial dans la sécurité du réseau en permettant aux administrateurs de gérer et de restreindre le trafic réseau afin d'empêcher les accès non autorisés, les attaques potentielles et les violations de données.

Recherche de similarité

La recherche de similarité identifie et extrait les points de données qui correspondent étroitement à une requête donnée en comparant les vecteurs de fonctionnalité dans une banque de vecteurs.

Distances vectorielles

Les distances vectorielles mesurent la similitude ou la dissimilarité entre les vecteurs caractéristiques en calculant la distance entre eux dans un espace multidimensionnel.

Index vectoriel

Un index vectoriel organise et stocke des vecteurs de fonctionnalités pour permettre une recherche et une récupération efficaces des données associées.

Magasin de vecteurs

Un magasin de vecteurs comprend des systèmes qui stockent, gèrent et activent la recherche de similarité sémantique impliquant des incorporations de vecteurs. Cela inclut les bases de données vectorielles autonomes et Oracle Database 23ai AI Vector Search.

Sélectionner des cas d'utilisation d'IA

Select AI améliore l'interaction des données et permet aux développeurs de créer des applications basées sur l'IA directement à partir de SQL, transformant les invites de langage naturel en requêtes SQL et réponses textuelles, prenant en charge l'interaction par chat avec les LLM, améliorant la précision des réponses avec les données actuelles à l'aide de la RAG et générant des données synthétiques.

Exemples d'utilisation :

  • Générer du code SQL à partir d'invites en langage naturel

    Productivité des développeurs : Select AI améliore considérablement la productivité des développeurs en fournissant rapidement des requêtes SQL de démarrage. Les développeurs peuvent saisir des invites de langage naturel et Select AI génère du code SQL en fonction des tables et des vues de schéma de base de données. Cela réduit le temps et les efforts nécessaires pour écrire des requêtes complexes à partir de zéro, ce qui permet aux développeurs de se concentrer sur l'affinage et l'optimisation des requêtes générées pour leurs besoins spécifiques.

    Requêtes en langage naturel pour les utilisateurs finaux : Select AI permet aux utilisateurs finaux d'interagir avec les tables et vues de données sous-jacentes de votre application à l'aide de requêtes en langage naturel. Cette fonctionnalité permet aux utilisateurs sans expertise SQL de poser des questions et d'extraire des données directement, ce qui rend l'accès aux données plus intuitif et convivial par rapport aux fonctionnalités du LLM utilisé et à la qualité des métadonnées de schéma disponibles.

    Autres fonctionnalités de génération SQL : les fonctionnalités mises en évidence suivantes sont également prises en charge pour la génération du langage naturel au langage SQL :

    • Spécifier un schéma, des tables ou des vues : Sélectionnez AI pour indiquer une liste d'objets composée de schémas et éventuellement de tables ou de vues au sein de ce schéma.

    • Détecter automatiquement les métadonnées de table pertinentes : Select AI détecte automatiquement les tables pertinentes et envoie des métadonnées uniquement pour ces tables spécifiques, pertinentes pour la requête, dans Oracle Database 26ai.

    • Limiter l'accès aux tables : Select AI vous permet de restreindre l'accès aux tables en ne prenant en compte que les tables répertoriées dans les attributs de profil AI pour la génération SQL.
    • Spécifier la sensibilité à la casse pour les colonnes : Sélectionner l'IA permet à l'utilisateur de spécifier la sensibilité à la casse de sorte que le LLM génère des réponses sans distinction entre les majuscules et les minuscules à partir de la base de données et du LLM.
  • Conversations

    Activez les fonctionnalités de type chatbot avec Select AI, ce qui permet aux utilisateurs d'avoir des conversations naturelles pour interroger les données et effectuer des actions. Ces discussions peuvent garder une trace du contexte, en donnant des réponses de suivi qui clarifient ou étendent les questions originales. Ce scénario stimule l'engagement et facilite les requêtes complexes grâce à la conversation.

  • Workflows agénétiques avec Select AI Agent

    Utilisez Select AI Agent pour coordonner les agents, les outils (SQL, RAG, Websearch, Notifications) et les tâches pour les scénarios en plusieurs étapes tels que la récupération de données et la notification. Pour en savoir plus, reportez-vous à Création d'agents autonomes avec un agent d'IA sélectionné.

  • Génération de supports personnalisés

    Select AI peut être utilisé pour générer du contenu multimédia personnalisé, tel que des e-mails adaptés aux détails de chaque client. Par exemple, dans votre invite, vous pouvez demander au LLM de créer un courriel convivial et optimiste encourageant un client à essayer un ensemble de produits recommandés. Ces recommandations peuvent être basées sur les données démographiques des clients ou d'autres informations spécifiques disponibles dans votre base de données. Ce niveau de personnalisation améliore l'engagement client en fournissant directement au client du contenu pertinent et attrayant.

  • Génération de code

    Avec l'action Sélectionner une IA chat, vous pouvez utiliser Sélectionner une IA pour demander à votre LLM spécifié de générer du code à partir d'invites en langage naturel. Cette fonctionnalité prend en charge différents langages de programmation tels que SQL, Python, R et Java. Exemples :

    • Code Python : "écrivez le code Python pour calculer une matrice de confusion sur une valeur DataFrame avec les colonnes ACTUAL et PREDICTED".
    • SQL DDL : écrivez le code LDD d'une table SQL avec les colonnes name, age, income et country.
    • Requête SQL : écrivez la requête SQL qui utilisera le modèle de base de données Oracle Machine Learning nommé CHURN_DT_MODEL pour prédire les clients qui se désabonneront et avec quelle probabilité.
  • Génération augmentée de récupération (RAG).

    Utilisez le contenu de stockage vectoriel pour la recherche de similarité sémantique afin d'améliorer la précision et la pertinence rapides des réponses LLM.

  • Génération de données synthétiques

    Générez des données synthétiques à l'aide de LLM conformes à votre schéma pour les tests de solution, les preuves de concept et d'autres utilisations. Les données synthétiques peuvent permettre de mieux tester vos applications en l'absence de données réelles, ce qui conduit à une qualité globale de votre application.

Instructions d'utilisation

Fournit des consignes d'utilisation qui garantissent une utilisation efficace et correcte des invites en langage naturel pour la génération SQL afin de garantir une expérience utilisateur améliorée.

Utilisation prévue

Cette fonctionnalité est destinée à la génération et à l'exécution de requêtes SQL résultant d'invites en langage naturel fournies par l'utilisateur. Il automatise ce qu'un utilisateur peut faire manuellement en fonction de ses métadonnées de schéma, en combinaison avec un grand modèle de langage (LLM) de son choix.

Bien que n'importe quelle invite puisse être fournie, y compris celles qui ne sont pas liées à la production de résultats de requête SQL, Select AI se concentre sur la génération de requête SQL. Sélectionnez AI pour soumettre des demandes générales avec l'action chat.

Données d'augmentation d'invite

La base de données augmente l'invite spécifiée par l'utilisateur avec les métadonnées de la base de données pour atténuer les hallucinations du LLM. L'invite augmentée est ensuite envoyée au LLM spécifié par l'utilisateur pour produire la requête.

La base de données augmente l'invite avec des métadonnées de schéma uniquement. Ces métadonnées peuvent inclure des définitions de schéma, des commentaires de table et de colonne, ainsi que du contenu disponible à partir du dictionnaire de données et du catalogue. Dans le cadre de la génération SQL, la base de données ne fournit pas de contenu de table ou de vue (valeurs réelles de ligne ou de colonne) lors de l'augmentation de l'invite.

Toutefois, l'action narrate fournit le résultat de la requête, qui peut contenir des données de base de données, au LLM spécifié par l'utilisateur à partir duquel générer du texte en langage naturel décrivant les résultats de la requête.

Avertissement :

Les grands modèles de langage (LLM) ont été formés à un large éventail de documents et de contenus textuels, généralement à partir d'Internet. En conséquence, les LLM peuvent avoir incorporé des modèles de contenu non valide ou malveillant, y compris l'injection SQL. Ainsi, bien que les LLM soient capables de générer du contenu utile et pertinent, ils peuvent également générer des informations incorrectes et fausses, y compris des requêtes SQL qui produisent des résultats inexacts et / ou compromettent la sécurité de vos données.

Les requêtes générées en votre nom par le fournisseur de LLM spécifié par l'utilisateur seront exécutées dans votre base de données. Votre utilisation de cette fonctionnalité est uniquement à vos propres risques et, nonobstant toutes autres conditions générales relatives aux services fournis par Oracle, constitue votre acceptation de ce risque et votre exclusion expresse de la responsabilité ou de la responsabilité d'Oracle pour tout dommage résultant de cette utilisation.

Sélectionnez votre fournisseur d'IA et vos LLM

Choisissez un fournisseur d'IA et un LLM qui répondent à vos normes de sécurité et qui correspondent à vos besoins spécifiques, tels que la génération de texte ou de code.

Différents LLM excellent pour différentes tâches en fonction de leurs données d'entraînement et de leur objectif. Certains modèles sont excellents pour la génération de texte, mais peuvent ne pas fonctionner correctement dans la génération de code, tandis que d'autres sont spécifiquement optimisés pour les tâches de codage. Choisissez un LLM qui correspond le mieux à vos besoins.

Fournisseur d'intelligence artificielle LLM Incorporer le modèle pour la RAG Description

OCI Generative AI

  • meta.llama-3.3-70b-instruct (par défaut)
  • meta.llama-3.2-90b-vision-instruct
  • meta.llama-3.2-11b-vision-instruct
  • meta.llama-3.1-70b-instruct
  • meta.llama-3.1-405b-instruct
  • cohere.command-r-08-2024
  • cohere.command-r-plus-08-2024
  • cohere.command-r-16k (obsolète)
  • cohere.command–r-plus (en phase d'abandon)
  • xai.grok-3
  • xai.grok-3-fast
  • cohere.embed-english-v3.0 (par défaut)
  • cohere.embed-multilingue-v3.0
  • cohere.embed-anglais-lumière-v3.0
  • cohere.embed-multilingue-lumière-v3.0

Reportez-vous à A propos de l'intégration de modèles dans l'IA générative.

Les modèles de discussion OCI Generative AI sont pris en charge pour toutes les actions SELECT AI telles que runsql, showsql, explainsql, narrate et chat.

Les modèles de texte de génération OCI sont pris en charge uniquement pour l'action SELECT AI chat.

Pour configurer vos attributs de profil, reportez-vous à la section Attributs de profil.

Service Azure OpenAI

  • GPT-4o
  • GPT-4
  • GPT-4 Turbo avec Vision
  • GPT-3.5-Turbo

text-embedding-ada-002

Idéal pour générer du code SQL à partir d'invites en langage naturel, d'une action chat et de la RAG Select AI.

OpenAI

  • gpt-3.5-turbo (par défaut)
  • gpt-4o
  • gpt-4o-mini
  • gpt-4
  • gpt-4-0613
  • gpt-4-32k
  • gpt-4-32k-0613
  • gpt-3.5-turbo-0613
  • gpt-3.5-turbo-16k
  • gpt-3.5-turbo-16k-0613

text-embedding-ada-002

Idéal pour générer du code SQL à partir d'invites en langage naturel, d'une action chat et de la RAG Select AI.

OpenAI-Compatible

Modèles de fournisseurs compatibles avec OpenAI, tels que :
  • IA Fireworks
  • xAI
  • Celui d'un autre utilisateur
Intégration de modèles à partir de fournisseurs compatibles OpenAI. Par exemple, reportez-vous à Modèles d'intégration d'IA Fireworks.

Prend en charge un large éventail de cas d'utilisation.

Cohere

  • commande (par défaut)
  • commande-nuit (expérimental)
  • commande-r
  • commande-r-plus
  • commande-lumière
  • commande-lumière-nuit (expérimental)
  • modèles personnalisés

embed-english-v2.0

Convient le mieux à l'action chat.

Google

  • gemini-1.5-flash (par défaut)
  • gemini-1.5-pro
  • gemini-1.0-pro
text-embedding-004 (valeur par défaut)

Idéal pour générer du code SQL à partir d'invites en langage naturel, d'une action chat et de la RAG Select AI.

Anthropique

  • claude-3-5-sonnet-20240620 (par défaut)
  • claude-3-opus-20240229
  • claude-3-sonnet-20240229
  • claude-3-haiku-20240307
S/O

Idéal pour générer du code SQL à partir d'invites en langage naturel, d'une action chat et de la RAG Select AI.

Hugging Face

  • Mixtral-8x7B-Instruct-v0.1 (par défaut)
  • meta-Llama-3-70B-instruct
  • Qwen1.5-1.8B
  • autres modèles de discussion
S/O

Idéal pour générer du code SQL à partir d'invites en langage naturel, d'une action chat et de la RAG Select AI.

AWS

  • amazon.titan-embed-text-v1
  • amazon.titan-embed-text-v2:0
  • cohere.embed-anglais-v3

Prend en charge un large éventail de cas d'utilisation.

Remarques :

  • Indiquez le fournisseur compatible OpenAI via le paramètre provider_endpoint au lieu du paramètre provider. Voir Attributs de profil.

  • Pour les modèles qui acceptent des images, utilisez meta.llama-3.2-90b-vision-instruct. Ce modèle est spécifiquement entraîné pour la vision et les images. Bien qu'il puisse être utilisé pour la génération de texte et de code SQL, le modèle convient mieux aux images. Pour en savoir plus, reportez-vous à Discussion sur OCI Generative AI.

    Le modèle meta.llama-3.2-11b-vision-instruct offre des fonctionnalités multimodales robustes.

  • Les modèles d'intégration sont également connus sous le nom de modèles de transformateurs.

Configurer les profils AI à l'aide de DBMS_CLOUD_AI

Autonomous AI Database utilise des profils d'IA pour faciliter et configurer l'accès à un LLM et pour la configuration de la génération, de l'exécution et de l'explication du langage SQL en fonction d'invites en langage naturel. Il facilite également la génération augmentée de récupération à l'aide de modèles d'intégration et d'index vectoriels et permet de discuter avec le LLM.

Les profils AI incluent les objets de base de données qui sont la cible des requêtes en langage naturel. Les métadonnées utilisées à partir de ces cibles peuvent inclure des noms de table de base de données, des noms de colonne, des types de données de colonne et des commentaires. Vous créez et configurez des profils AI à l'aide des procédures DBMS_CLOUD_AI.CREATE_PROFILE et DBMS_CLOUD_AI.SET_PROFILE.

Exigences pour DBMS_CLOUD_AI

Les éléments suivants sont requis pour exécuter DBMS_CLOUD_AI :

  • Accès à un compte cloud Oracle Cloud Infrastructure et à une instance Autonomous AI Database.
  • Compte d'API payant pour un fournisseur d'IA pris en charge, parmi les suivants :
    • OpenAI : pour permettre à OpenAI de générer du code SQL à partir d'invites en langage naturel, obtenez les clés d'API à partir de votre compte payant OpenAI.

      Vous pouvez trouver votre clé d'API secrète dans les paramètres utilisateur.

    • Cohere : pour permettre à Cohere de générer du code SQL à partir d'invites en langage naturel, obtenez des clés d'API à partir de votre compte payant Cohere.

      Cliquez sur Tableau de bord, puis sur Clés d'API dans la navigation de gauche. Copiez la clé d'API par défaut ou créez une autre clé. Pour plus d'informations, reportez-vous à API-Keys.

    • Service OpenAI Azure : permet à Service OpenAI Azure de générer du code SQL à partir d'invites en langage naturel, de configurer et de fournir un accès au fournisseur d'IA.

      Pour utiliser le service OpenAI Azure, procédez comme suit :

      1. Obtenez vos clés d'API secrètes. Vous pouvez trouver vos clés d'API dans la section Resource Management de votre portail Azure. Sur la page Ressource de service Azure OpenAI, cliquez sur Clés et adresse. Vous pouvez copier KEY1 ou KEY2.
      2. Créez une ressource de service OpenAI Azure et déployez un modèle : Créer et déployer une ressource de service OpenAI Azure.

        Conseil :

        • Notez le nom de la ressource et le nom du déploiement car ces paramètres sont utilisés pour fournir des droits d'accès réseau et créer votre profil de service OpenAI Azure à l'aide de la procédure DBMS_CLOUD_AI.CREATE_PROFILE.
        • Pour en savoir plus sur les limites de débit pour le jeton par minute sur un modèle, reportez-vous à Quota et limites de service Azure OpenAI.
      3. Autoriser l'accès au service OpenAI Azure :
        • Vous pouvez utiliser votre clé d'API de clé secrète pour autoriser l'accès au service OpenAI Azure. Pour en savoir plus, reportez-vous à l'exemple dans Exemples d'utilisation de Select AI.
    • OCI Generative AI : reportez-vous à Comment générer la clé de signature d'API.
    • Google : pour permettre à Google AI Studio de générer des réponses SQL et textuelles à vos invites en langage naturel, obtenez les clés d'API à partir de votre compte payant Google AI Studio.
      1. Accédez à Google AI Studio.
      2. Cliquez sur Connexion à Google AI Studio.
      3. Cliquez sur Get API key dans l'écran d'invite.
      4. Sélectionnez toutes les options applicables sur la page suivante.
      5. Cliquez sur Create API key.
      6. Cliquez sur Créer une clé d'API dans le nouveau projet.

        L'écran affiche la progression et génère une clé d'API. Copiez la clé et enregistrez-la.

    • Anthropique : pour permettre à Anthropic Developer Console de générer des réponses SQL et textuelles à vos invites en langage naturel, obtenez les clés d'API à partir de votre compte payant Anthropic Developer Console.
      1. Accédez à Console de développeur anthropique.
      2. Créez un compte si vous n'en avez pas déjà un.
      3. Une fois connecté, accédez à la section API ou au tableau de bord.
      4. Recherchez une option pour générer ou afficher les clés d'API.
      5. Cliquez sur cette option pour créer une clé d'API.
      6. Copiez la clé d'API générée et enregistrez-la.

        L'API Claude est un service payant. Vous devrez ajouter des crédits à votre compte avant de pouvoir utiliser la clé d'API.

    • Hugging Face : pour permettre à Hugging Face en tant que fournisseur d'IA de générer des réponses SQL et textuelles à vos invites en langage naturel, obtenez les clés d'API de votre compte payant Hugging Face.
      1. Accédez à Hugging Face.
      2. Créez un compte si vous n'en avez pas déjà un.
      3. Accédez aux paramètres de votre compte.
      4. Dans le menu de navigation, localisez les jetons d'accès.
      5. Cliquez sur cette option pour créer une clé d'API.
      6. Copiez la clé d'API générée et enregistrez-la.
    • AWS : pour activer AWS, obtenez votre clé d'API et votre ID de modèle.

      Obtenez votre clé d'API et utilisez-la pour créer des informations d'identification via DBMS_CLOUD.CREATE_CREDENTIAL.

      Suivez cette procédure pour obtenir votre clé d'API et votre nom de modèle :

      1. Inscrivez-vous à un compte AWS si vous n'en avez pas déjà un.
      2. Créez vos clés d'accès et vos clés secrètes à partir de la console AWS Bedrock.
      3. Copiez les clés générées et enregistrez-les.
      4. Demander l'accès à leurs modèles de base. Reportez-vous à Accès aux modèles de base Amazon Bedrock.
      5. Obtenez l'ID du modèle. Vous avez besoin de l'ID de modèle dans la procédure DBMS_CLOUD_AI.CREATE_PROFILE. L'ID de modèle dépend des ressources que vous utilisez. Si vous utilisez :

        Remarques :

        Le modèle importé n'est pas pris en charge avec l'API Bedrock Converse.

      Pour utiliser AWS en tant que fournisseur, reportez-vous à Exemple : sélection d'une IA avec AWS.

  • Privilèges d'ACL réseau pour accéder à votre fournisseur d'IA externe.

    Remarques :

    L'ACL de réseau n'est pas applicable pour OCI Generative AI.
  • Informations d'identification qui fournissent l'accès au fournisseur AI.
Pour configurer DBMS_CLOUD_AI :
  1. Accordez le privilège EXECUTE sur le package DBMS_CLOUD_AI à l'utilisateur qui souhaite utiliser Select AI.

    Par défaut, seul l'utilisateur ADMIN dispose du privilège EXECUTE. L'utilisateur ADMIN peut accorder le privilège EXECUTE à d'autres utilisateurs.

    L'exemple suivant accorde le privilège EXECUTE à ADB_USER :
    grant execute on DBMS_CLOUD_AI to ADB_USER;

    L'exemple suivant accorde à ADB_USER le privilège d'utiliser l'adresse api.openai.com.

    BEGIN  
        DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
             host => 'api.openai.com',
             ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                                 principal_name => 'ADB_USER',
                                 principal_type => xs_acl.ptype_db)
       );
    END;
    /
    
  2. Accordez l'accès aux listes de contrôle d'accès réseau à l'utilisateur qui souhaite utiliser Select AI et à l'adresse du fournisseur AI.

    L'utilisateur ADMIN peut accorder l'accès ACL au réseau. Reportez-vous à Procédure APPEND_HOST_ACE dans Référence des types et des packages PL/SQL Oracle Database 19c ou Référence des types et des packages PL/SQL Oracle Database 26ai.

  3. Créez des informations d'identification pour activer l'accès à votre fournisseur AI.

    Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.

    Voici un exemple de création d'informations d'identification pour activer l'accès à OpenAI.

    EXEC DBMS_CLOUD.CREATE_CREDENTIAL('OPENAI_CRED', 'OPENAI', 'your_api_token');

APPEND_HOST_ACE Paramètres de fonction

Paramètre Description

host

Hôte, qui peut être le nom ou l'adresse IP de l'hôte. Vous pouvez utiliser un caractère générique pour spécifier un domaine ou un sous-réseau IP. Le nom d'hôte ou de domaine ne distingue pas les majuscules des minuscules.

Pour OpenAI, utilisez api.openai.com.

Pour Cohere, utilisez api.cohere.ai.

Pour Service OpenAI Azure, utilisez <azure_resource_name>.openai.azure.com. Pour en savoir plus sur azure_resource_name, reportez-vous à Attributs de profil.

Pour Google, utilisez generativelanguage.googleapis.com.

Pour Anthropic, utilisez api.anthropic.com.

Pour Hugging Face, utilisez api-inference.huggingface.co.

ace

Entrées de contrôle d'accès (ACE). Le type XS$ACE_TYPE est fourni pour construire chaque entrée ACE pour l'ACL. Pour plus de détails, reportez-vous à Création d'ACL et d'ACE dans le Guide de l'administrateur et du développeur Oracle Database 19c Real Application Security ou dans le Guide de l'administrateur et du développeur Oracle Database 26ai Real Application Security.

Paramètres DBMS_CLOUD.CREATE_CREDENTIAL

Paramètre Description

credential_name

Nom des informations d'identification à stocker. Le paramètre credential_name doit être conforme aux conventions de dénomination des objets Oracle, qui n'autorisent pas les espaces ni les traits d'union.

username

Les arguments username et password indiquent ensemble vos informations d'identification de fournisseur AI.

username est un nom utilisateur spécifié par l'utilisateur.

password

Les arguments username et password indiquent ensemble vos informations d'identification de fournisseur AI.

password est la clé d'API secrète de votre fournisseur d'IA et dépend du fournisseur, à savoir OpenAI, Cohere, Azure OpenAI Service, OCI, Google, Anthropic ou Hugging Face. Pour obtenir des détails, reportez-vous à la section .

Création et définition d'un profil AI

Décrit les étapes de création et d'activation d'un profil AI.

Utilisez DBMS_CLOUD_AI.CREATE_PROFILE pour créer un profil AI. Démarrez ensuite DBMS_CLOUD_AI.SET_PROFILE pour activer le profil AI afin de pouvoir utiliser SELECT AI avec une invite en langage naturel.

Remarques :

Vous devez exécuter DBMS_CLOUD_AI.SET_PROFILE dans chaque nouvelle session de base de données (connexion) avant d'utiliser SELECT AI.

L'exemple suivant avec le fournisseur OpenAI crée un profil AI appelé OPENAI et définit le profil OPENAI pour la session utilisateur en cours.

-- Create AI profile
--
SQL> BEGIN
  DBMS_CLOUD_AI.create_profile(
      'OPENAI',
      '{"provider": "openai",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "SH", "name": "customers"},
                        {"owner": "SH", "name": "sales"},
                        {"owner": "SH", "name": "products"},
                        {"owner": "SH", "name": "countries"}]
       }');
END;
/
 
PL/SQL procedure successfully completed.
 
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.set_profile('OPENAI');
 
PL/SQL procedure successfully completed.

Utiliser le mot-clé AI pour saisir des invites

Utilisez AI comme mot-clé dans une instruction SELECT pour interagir avec la base de données à l'aide d'invites en langage naturel.

Le mot-clé AI dans une instruction SELECT indique au moteur d'exécution SQL d'utiliser le LLM identifié dans le profil AI actif pour traiter le langage naturel et générer du code SQL.

Vous pouvez utiliser le mot-clé AI dans une requête avec des clients Oracle, tels que SQL Developer, OML Notebooks et des outils tiers, pour interagir avec la base de données en langage naturel.

Remarques :

Vous ne pouvez pas exécuter d'instructions PL/SQL, DDL ou DML à l'aide du mot-clé AI.

Syntaxe

La syntaxe d'exécution de l'invite AI est la suivante :
SELECT AI action natural_language_prompt

Paramètres

Voici les paramètres disponibles pour le paramètre action :
Paramètre Description

runsql

Exécutez la commande SQL fournie à l'aide d'une invite en langage naturel. Il s'agit de l'action par défaut et il est facultatif de spécifier ce paramètre.

showsql

Affiche l'instruction SQL d'une invite en langage naturel.

narrate

La sortie de l'invite est expliquée en langage naturel. Cette option envoie le résultat SQL au fournisseur d'IA pour produire un récapitulatif du langage naturel.

chat

Génère une réponse directement à partir du LLM en fonction de l'invite. Si conversation dans la fonction DBMS_CLOUD_AI.CREATE_PROFILE est défini sur true, cette option inclut le contenu des interactions ou invites précédentes, y compris potentiellement les métadonnées de schéma.

explainsql

Le code SQL généré à partir de l'invite est expliqué en langage naturel. Cette option envoie le code SQL généré au fournisseur AI pour produire une explication en langage naturel.

Remarques sur l'utilisation

  • L'option AI n'est pas prise en charge dans Database Actions ou le service APEX. Vous pouvez utiliser uniquement la fonction DBMS_CLOUD_AI.GENERATE.

  • Le mot-clé AI est pris en charge uniquement dans une instruction SELECT.

  • Vous ne pouvez pas exécuter d'instructions PL/SQL, DDL ou DML à l'aide du mot-clé AI.

  • La séquence est SELECT, suivie de AI. Ces mots-clés ne respectent pas la casse. Une fois qu'un fichier DBMS_CLOUD_AI.SET_PROFILE est configuré, le texte après SELECT AI est une invite en langage naturel. Si aucun profil AI n'est défini, SELECT AI signale l'erreur suivante :

    ORA-00923: FROM keyword not found where expected
    00923. 00000 -  "FROM keyword not found where expected"
  • Les règles d'utilisation de caractères spéciaux s'appliquent conformément aux directives Oracle. Par exemple, utilisez deux apostrophes si vous utilisez une apostrophe dans une phrase.

    select ai how many customers in SF don''t own their own home
  • Les LLM sont soumis à des hallucinations et les résultats ne sont pas toujours corrects :

    • Il est possible que SELECT AI ne puisse pas exécuter le code SQL généré pour une invite de langage naturel spécifique.

    • Il est possible que SELECT AI ne puisse pas générer de code SQL pour une invite de langage naturel spécifique.

    Dans un tel scénario, SELECT AI répond avec des informations pour vous aider à générer des instructions SQL valides.

  • Utilisez l'action chat, avec SELECT AI chat, pour en savoir plus sur les structures SQL. Pour obtenir de meilleurs résultats avec l'action chat, utilisez des vues de base de données ou des tables avec des noms de colonne contextuels ou envisagez d'ajouter des commentaires de colonne expliquant les valeurs stockées dans les colonnes.

  • Pour accéder aux vues DBA ou USER, reportez-vous à la section DBMS_CLOUD_AI Views.

Utiliser et personnaliser les conversations

Les conversations dans Select AI font référence au dialogue interactif entre l'utilisateur et le système, où une séquence d'invites en langage naturel fournies par l'utilisateur est stockée et gérée pour prendre en charge la mémoire à long terme pour les interactions LLM.

Select AI prend en charge les conversations à court terme basées sur les sessions, qui sont activées dans le profil AI, ainsi que les conversations nommées à long terme, qui sont activées à l'aide de procédures ou de fonctions spécifiques et d'ID de conversation.

Remarques :

La prise en charge des conversations Select AI est disponible dans Oracle Database 19c à partir de la version 19.30 et dans Oracle Database 26ai à partir de la version 23.26.1.

types de conversations

Select AI prend en charge les conversations à court terme basées sur les sessions et les conversations personnalisables.

Conversations à court terme basées sur les sessions : sélectionnez IA qui inclut des conversations à court terme basées sur les sessions afin de générer des réponses contextuelles pour l'invite actuelle en fonction des interactions précédentes.

Vous pouvez l'activer en définissant l'attribut conversation sur true|false dans votre profil AI. Contrairement à la fonctionnalité de conversations multiples, les conversations basées sur une session stockent les invites uniquement pour la durée de la session. Les invites sont stockées dans une table temporaire, supprimées automatiquement à la fin de la session et ne peuvent pas être réutilisées ni basculées entre les conversations.

Conversations à long terme personnalisables : Select AI prend en charge la création et l'utilisation de conversations personnalisables, ce qui vous permet d'utiliser Select AI avec différents sujets sans mélange de contexte, ce qui améliore à la fois la flexibilité et l'efficacité. Vous pouvez créer, définir, supprimer et mettre à jour des conversations via les procédures et fonctions de conversation DBMS_CLOUD_AI. Lorsque vous activez des conversations, Select AI extrait l'historique des invites et les envoie au LLM pour générer une réponse pour l'invite actuelle. Ces réponses sont stockées dans une table persistante pour une utilisation ultérieure.

Remarques :

Sélectionnez Conversations AI pour prendre en charge les actions suivantes : runsql, showsql, explainsql, narrate et chat.

Utilisation de conversations personnalisables

Vous pouvez utiliser Select AI pour les conversations personnalisables comme suit :

  • Définissez l'ID de conversation dans la session à l'aide de la procédure DBMS_CLOUD_AI.SET_CONVERSATION_ID, puis exécutez SELECT AI <ACTION> <PROMPT>.

  • Transmettez conversation_id dans l'argument params de la fonction DBMS_CLOUD_AI.GENERATE.

Remarques :

Si vous utilisez à la fois plusieurs conversations et le paramètre conversation: [true|false], le système ignore le paramètre conversation.

Dans le contexte de la génération de requêtes SQL (NL2SQL), les conversations permettent d'utiliser vos données de manière plus intuitive et accessible, ce qui permet aux utilisateurs d'extraire plus facilement des informations clés et d'effectuer des tâches sans avoir besoin de connaissances techniques approfondies du langage SQL. Les conversations peuvent également être utilisées avec les fonctionnalités de discussion et de RAG de Select AI.

Par exemple, les conversations fournissent un moyen intuitif d'analyser les données :
  • Posez une question telle que "Quel est le nombre total de clients ?"
  • Suivre avec des questions contextuelles telles que :
    • "éclatement du nombre de clients par pays"
    • "Quel groupe d'âge est le plus commun"
    • "Gardez les 5 meilleurs clients et leur pays par leurs achats et incluez un rang dans le résultat"

Pour activer les conversations, reportez-vous à Exemple : activation des conversations dans Select AI pour obtenir un exemple complet.

Conversations basées sur une session ou conversations personnalisables

Le tableau suivant compare la conversation basée sur la session et les conversations personnalisables dans Select AI :

Questions Conversations à court terme basées sur la session Conversations personnalisables à long terme

Quand dois-je utiliser ?

Idéal pour les discussions rapides et temporaires où vous souhaitez que le modèle mémorise les questions et réponses récentes au cours d'une seule session. Il est utile lorsque vous n'avez pas besoin d'enregistrer ou de réutiliser la conversation ultérieurement.

Conçu pour des conversations plus longues ou en cours qui peuvent couvrir plusieurs sessions. Il est utile lorsque vous voulez suivre, réviser ou gérer l'historique des conversations, ou lorsque différentes parties d'une application doivent accéder au même contexte de conversation au fil du temps.

Comment activer ?

Définissez {"conversation": true or false} dans votre profil AI.

Utilisez la procédure DBMS_CLOUD_AI.SET_CONVERSATION_ID ou DBMS_CLOUD_AI.GENERATE

Combien de conversations sont autorisées ?

Un.

Vous pouvez créer plusieurs conversations.

Si vous spécifiez explicitement des ID de conversation, vous pouvez alterner entre eux pour associer des invites aux conversations appropriées selon vos besoins.

Où les invites sont-elles stockées et pendant combien de temps ?

Les invites sont stockées dans une table temporaire et supprimées à la fin de la session.

Les invites sont stockées dans une table permanente.

Les invites sont conservées dans la base de données pendant le nombre de jours indiqué par le paramètre retention_days dans la procédure DBMS_CLOUD_AI.CREATE_CONVERSATION. Après la période de conservation, la conversation et ses invites sont automatiquement supprimées. Vous pouvez également supprimer manuellement des invites à l'aide de la procédure DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT.

Combien d'invites sont stockées et combien d'invites sont envoyées au LLM ?

10 invites au maximum sont stockées et envoyées au LLM. Vous ne pouvez pas personnaliser cette limite.

Toutes les invites sont stockées.

Par défaut, le système envoie les 10 invites les plus récentes au LLM. Vous pouvez personnaliser ce paramètre à l'aide du paramètre conversation_length. Reportez-vous à la section CREATE_CONVERSATION Attributes.

Puis-je supprimer des invites individuelles ?

Non, vous ne pouvez pas supprimer manuellement une invite individuelle.

Vous pouvez supprimer des invites individuelles spécifiques à l'aide de l'ID d'invite tel que spécifié dans la vue USER_CLOUD_AI_CONVERSATION_PROMPTS et à l'aide de la procédure DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT.

Les profils d'IA sont-ils utilisés pour extraire les conversations ?

Oui. Select AI extrait les invites et les réponses précédemment générées à l'aide du même profil AI.

Non. Select AI suit le profil AI utilisé lors du stockage des invites et des réponses, mais ne limite pas leur extraction en fonction de ce profil. Il envoie tous les historiques de conversation au LLM pour guider la génération des réponses, quel que soit le profil utilisé pour les générer.

Où puis-je vérifier l'historique des invites ?

Les invites sont enregistrées dans une table temporaire sous CLOUD USER mais ne sont pas accessibles pour l'interrogation.

Vous pouvez interroger et réviser les conversations et les invites via les vues de conversation DBMS_CLOUD_AI. Pour plus d'informations, reportez-vous à Vues DBMS_CLOUD_AI.

Fournir des commentaires pour améliorer les LLM

Select AI vous permet de fournir des commentaires pour aider à améliorer la capacité de votre LLM sélectionné à générer des requêtes SQL plus précises.

Remarques :

Cette fonctionnalité est disponible uniquement sur Oracle Database 23ai. Vous pouvez l'utiliser avec les actions Select AI existantes : runsql, showsql et explainsql. Assurez-vous que votre profil AI est configuré pour la génération NL2SQL et non pour la RAG.

Vous pouvez fournir des commentaires pour améliorer la précision du code SQL généré via l'action feedback ou la procédure DBMS_CLOUD_AI.FEEDBACK. Sélectionnez AI crée un index vectoriel par défaut nommé <profile_name>_FEEDBACK_VECINDEX avec des attributs par défaut lorsque vous utilisez la fonctionnalité de retour pour la première fois. Cet index permet d'affiner les instructions SQL générées ultérieurement en fonction des commentaires fournis. Pour plus d'informations, reportez-vous à la section Vector Index for FEEDBACK.

Conseil :

Utilisez la procédure DBMS_CLOUD_AI.FEEDBACK lorsque le LLM indiqué ne parvient pas à générer la requête SQL correcte ou ne renvoie pas le résultat attendu de l'une des actions NL2SQL SELECT AI. Vous pouvez également utiliser la procédure DBMS_CLOUD_AI.FEEDBACK pour ajouter directement le code SQL approprié à la table vectorielle. Cela aide à guider la génération future d'instructions SQL en servant de référence pour des invites similaires.

Les types de retour suivants sont acceptés :
  • Retour positif : vous approuvez et confirmez l'exactitude du code SQL généré. Le système stocke la requête confirmée pour référence ultérieure.

  • Retour négatif : si les résultats de l'action NL2SQL SELECT AI ne génèrent pas le code SQL correct, vous pouvez fournir les améliorations de requête SQL nécessaires à l'aide de SELECT AI feedback <feedback> ou à l'aide de la procédure DBMS_CLOUD_AI.FEEDBACK en identifiant les erreurs dans la requête ou en fournissant des conseils sur ce qui était attendu en prose. Le système affine la requête à l'aide d'un LLM et stocke la version affinée pour la génération future de requêtes Select AI. Les requêtes affinées stockées sont ensuite utilisées comme conseils et envoyées au LLM dans le cadre de l'invite augmentée.

Avantages de l'utilisation des commentaires

L'action et la procédure de retour dans Select AI introduit un mécanisme de réglage des invites qui améliore la précision de la génération des requêtes SQL.

Le propriétaire du profil AI peut fournir un retour pour les requêtes SQL générées et le système Select AI apprend à partir de l'interaction utilisateur au fil du temps. Cet apprentissage implique d'amasser un référentiel d'invites et de contenu de retour où la recherche vectorielle est utilisée pour identifier les invites similaires à votre invite actuelle. Les principaux exemples de correspondance sont fournis en tant que métadonnées pour le LLM dans le cadre de l'invite augmentée. Les avantages sont les suivants :
  • Peut améliorer la précision des requêtes SQL.
  • Permet au propriétaire du profil AI de fournir un retour en confirmant les requêtes correctes ou en suggérant des corrections en fournissant l'intention sémantique ou les définitions métier pour produire une requête correcte.
  • Utilise les commentaires historiques comme conseils pour la génération future de requêtes, s'adaptant ainsi à vos besoins.

Comment fournir des commentaires

Sélectionnez AI pour fournir des commentaires à l'aide de l'action feedback ou en appelant la procédure DBMS_CLOUD_AI.FEEDBACK.

Attention :

N'utilisez pas l'action de retour dans les applications où plusieurs utilisateurs partagent des sessions de base de données sous un seul utilisateur de base de données propriétaire du profil AI. Le propriétaire du profil AI ne doit fournir un retour qu'après avoir confirmé que la requête corrigée est appropriée pour tous les utilisateurs de ce profil.

Vous pouvez fournir des commentaires en incluant les éléments suivants :
  • SQL_TEXT : incluez les commentaires entre guillemets pour la requête SQL en cours, ou vous pouvez obtenir SQL_TEXT pour une requête particulière en interrogeant la vue V$MAPPED_SQL.

  • SQL_ID : vous pouvez obtenir SQL_ID en interrogeant la vue V$MAPPED_SQL.

  • Utiliser le dernier SQL généré : fournissez vos commentaires en langage naturel.

    Remarques :

    Pour utiliser le dernier SQL, veillez à désactiver la sortie du serveur dans Oracle SQL*Plus ou Oracle SQLcl. Vous devez disposer du privilège READ sur les tables sys.v_$session et v_$mapped_sql.
    GRANT READ ON SYS.V_$MAPPED_SQL TO ADB_USER;
    GRANT READ ON SYS.V_$SESSION TO ADB_USER;

Pour en savoir plus, reportez-vous à Procédure FEEDBACK et à Exemple : sélection d'un retour AI.

Interroger des données de graphique avec des graphiques de propriétés

Sélectionnez AI génère une requête de graphe de propriétés (PGQ) sur Oracle Property Graphs en langage naturel. Elle permet aux utilisateurs d'interroger les données de graphique via l'opérateur GRAPH_TABLE avec un minimum de connaissances SQL.

Sélectionnez AI étend sa fonctionnalité de langage naturel au langage SQL (NL2SQL) pour créer des graphiques permettant d'interroger les graphiques de propriétés SQL à l'aide du langage naturel. Sélectionnez AI applique l'opérateur GRAPH_TABLE pour interpréter les relations et les attributs dans les données structurées par graphique. Il génère des requêtes de graphique SQL ou PGQ en fonction des objets de données définis dans le profil AI. Lorsqu'un graphique de propriétés est inclus dans le profil AI, Select AI utilise l'IA générative pour créer une requête PGQ qui référence le graphique via l'opérateur GRAPH_TABLE. Le LLM reçoit automatiquement les métadonnées de l'objet de graphe, telles que les instructions CREATE PROPERTY GRAPH, pour générer des requêtes précises. Lorsqu'une table, une vue ou un objet relationnel est spécifié, Select AI génère une requête SQL. Cette fonctionnalité simplifie les requêtes de correspondance de modèles sur les données de graphe stockées dans Oracle AI Database et réduit la dépendance à la construction manuelle de requêtes SQL.

Lorsque vous créez un profil AI avec un ou plusieurs graphiques de propriétés définis dans l'attribut object_list, le LLM défini dans le profil AI interprète les invites à l'aide du contexte des graphiques de propriétés spécifiés. Select AI crée une invite augmentée qui inclut :
  • Instructions pour créer des requêtes PGQ.

  • Métadonnées décrivant les graphiques de propriétés fournis (à partir de leurs instructions CREATE PROPERTY GRAPH).

Cette invite augmentée est envoyée au LLM. Sélectionnez AI exécute la requête et renvoie des résultats. Si un graphique de propriétés est spécifié avec d'autres types d'objet tels que des tables, des schémas ou des vues dans le profil AI, Select AI génère une erreur.

SQL et PGQ

Avec Select AI, le type de requête généré dépend des objets définis dans l'attribut object_list de votre profil AI.
  • SQL Query : utilise des données relationnelles telles que des schémas, des tables ou des vues.

  • Requête PGQ : utilise des graphiques de propriétés et applique l'opérateur GRAPH_TABLE pour la mise en correspondance de modèles.

Pour plus d'informations, reportez-vous à Graphique de propriétés SQL et à Requêtes GRAPH SQL.

Avantages de l'utilisation de Select AI sur les graphiques de propriétés

Les utilisateurs de base de données peuvent interroger des graphes de propriétés à l'aide de Select AI pour générer des requêtes de graphes à partir du langage naturel, ce qui réduit le travail manuel et améliore la compréhension des relations de graphes.

Les principaux avantages sont les suivants :
  • NL2SQL : la fonctionnalité NL2SQL de l'IA s'étend désormais aux requêtes de graphique permettant aux utilisateurs d'écrire des invites de langage naturel telles que "Rechercher les clients qui ont acheté une robe".

  • SQL ou PGQ : selon l'objet de données, Select AI génère automatiquement une requête SQL ou PGQ.

  • Productivité : réduit le temps et les efforts de création des requêtes de graphique à l'aide de l'opérateur GRAPH_TABLE.

  • Conversations : conserve le contexte de conversation et interroge un graphique de propriétés.

Limites

Sélectionner AI pour les graphiques de propriétés ne prend pas en charge les fonctionnalités suivantes :

Utilisation de Select AI sur les graphiques de propriétés

Sélectionnez AI pour explorer les données de graphique à l'aide de la fonction DBMS_CLOUD_AI.GENERATE ou de Select AI <action> <prompt>.

Une fois que vous avez défini des graphiques de propriétés dans l'attribut object_list de votre profil AI, vous pouvez utiliser :
  • SELECT AI <ACTION> <PROMPT> dans la ligne de commande SQL pour générer une sortie.

  • DBMS_CLOUD_AI.GENERATE fonctionne et fournit votre invite dans la fonction.

Les actions prises en charge sont les suivantes : runsql, showsql, explainsql, narrate et showpropmt. Select AI for Property Graph prend également en charge les conversations à court terme et personnalisables à long terme basées sur les sessions.

Pour en savoir plus, reportez-vous à Exemple : sélection d'un fichier AI pour les graphiques de propriétés et à Exemple : exemples d'invites pour les graphiques de propriétés.

Exemples d'utilisation de Select AI

Découvrez l'intégration de l'IA Select d'Oracle à divers fournisseurs d'IA pris en charge pour générer, exécuter et expliquer le code SQL à partir d'invites en langage naturel ou discuter avec le LLM.

Exemple : Sélectionner des actions AI

L'exemple suivant illustre des actions telles que runsql (valeur par défaut), showsql, narrate, chat, explainsql, feedback et summarize que vous pouvez exécuter avec SELECT AI. Ces exemples utilisent le schéma sh avec le fournisseur AI et les attributs de profil spécifiés dans la fonction DBMS_CLOUD_AI.CREATE_PROFILE. Utilisez les actions Select AI après avoir défini votre profil AI à l'aide de la procédure DBMS_CLOUD_AI.SET_PROFILE dans la session en cours.

Pour générer un récapitulatif de votre texte, utilisez SELECT AI SUMMARIZE <TEXT>.

SQL> select ai how many customers exist;
 
CUSTOMER_COUNT
--------------
         55500
 
SQL> select ai showsql how many customers exist;
 
RESPONSE
----------------------------------------------------
SELECT COUNT(*) AS total_customers
FROM SH.CUSTOMERS
 
 
SQL> select ai narrate how many customers exist;
 
RESPONSE
------------------------------------------------------
There are a total of 55,500 customers in the database.
 
SQL> select ai chat how many customers exist;
 
RESPONSE
--------------------------------------------------------------------------------
It is impossible to determine the exact number of customers that exist as it con
stantly changes due to various factors such as population growth, new businesses
, and customer turnover. Additionally, the term "customer" can refer to individu
als, businesses, or organizations, making it difficult to provide a specific num
ber.


SQL> select ai explainsql how many customers in San Francisco are married;
 
RESPONSE
--------------------------------------------------------------------------------
SELECT COUNT(*) AS customer_count
FROM SH.CUSTOMERS AS c
WHERE c.CUST_STATE_PROVINCE = 'San Francisco' AND c.CUST_MARITAL_STATUS = 'Married';
 
Explanation:
- We use the 'SH' table alias for the 'CUSTOMERS' table for better readability.
- The query uses the 'COUNT(*)' function to count the number of rows that match the given conditions.
- The 'WHERE' clause is used to filter the results:
  - 'c.CUST_STATE_PROVINCE = 'San Francisco'' filters customers who have 'San Francisco' as their state or province.
  - 'c.CUST_MARITAL_STATUS = 'Married'' filters customers who have 'Married' as their marital status.
The result of this query will give you the count of customers in San Francisco who are married, using the column alias 'customer_count' for the result.
 
Remember to adjust the table and column names based on your actual schema if they differ from the example.
 
Feel free to ask if you have more questions related to SQL or database in general.

-- Feedback on SQL Text
-- Negative feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", please use sum instead of count;
-- Positive feedback example:
SQL > select ai feedback for query "select ai showsql how many watch histories in total", the sql query generated is correct;
 
-- Feedback on SQL ID
-- Negative feedback example:
SQL > select ai feedback please use sum instead of count for sql_id  1v1z68ra6r9zf;
-- Positive feedback example:
SQL > select ai feedback sql query result is correct for sql_id  1v1z68ra6r9zf;
 
-- If not specified, use default LASTAI SQL
-- To use default LASTAI sql, make sure that set server output off;
-- Negative feedback example:
SQL > select ai feedback please use ascending sorting for ranking;
-- Positive feedback example:
SQL > select ai feedback the result is correct;

SQL> SELECT AI SUMMARIZE
Like countless other people around the globe, I stream music, and like more
than six hundred million of them I mainly use Spotify. Streaming currently
accounts for about eighty per cent of the American recording industry’s
revenue, and in recent years Spotify’s health is often consulted as a measure
for the health of the music business over all. Last spring, the International
Federation of the Phonographic Industry reported global revenues of $28.6
billion, making for the ninth straight year of growth. All of this was
unimaginable in the two-thousands, when the major record labels appeared
poorly equipped to deal with piracy and the so-called death of physical media.
On the consumer side, the story looks even rosier. Adjusted for inflation, a
 
... (skipped 1000 rows in the middle)
 
Pelly writes of some artists, in search of viral fame, who surreptitiously use
social media to effectively beta test melodies and motifs, basically putting
together songs via crowdsourcing. Artists have always fretted about the
pressure to conform, but the data-driven, music-as-content era feels
different. “You are a Spotify employee at that point,” Daniel Lopatin, who
makes abstract electronic music as Oneohtrix Point Never, told Pelly. “If your
art practice is so ingrained in the brutal reality that Spotify has outlined
for all of us, then what is the music that you’re not making? What does the
music you’re not making sound like?” Listeners might wonder something similar.
What does the music we’re not hearing sound like?;
 
 
RESPONSE
------------------------------------------------------------------------------
The music streaming industry, led by Spotify, has revolutionized the way
people consume music, with streaming accounting for 80% of the American
recording industry's revenue. However, this shift has also complicated the
lives of artists, who struggle to survive in a hyper-abundant present where
music is often valued for its convenience rather than its artistic merit.
Spotify's algorithms prioritize popularity and profitability over artistic
diversity, leading to a homogenization of music and a devaluation of the
labor that goes into creating it. Meanwhile, the company's executives reap
enormous profits, with CEO Daniel Ek's net worth rivaling that of the
wealthiest musicians. As music critic Liz Pelly argues, the streaming economy
raises important questions about autonomy, creativity, and the value of art
in a world where everything is readily available and easily accessible.

Exemple : Sélectionner une IA avec AWS

Cet exemple montre comment utiliser AWS pour générer, exécuter et expliquer le langage SQL à partir d'invites en langage naturel ou discuter à l'aide des modèles disponibles avec AWS.

L'exemple suivant montre comment utiliser AWS en tant que fournisseur d'IA avec Amazon Bedrock et ses modèles de base. L'exemple présente la création d'informations d'identification AWS, la fourniture d'un accès réseau, la création d'un profil AI et l'utilisation d'actions Select AI pour générer des requêtes SQL à partir d'invites en langage naturel et la discussion à l'aide des modèles de base AWS.

Pour utiliser AWS, obtenez une clé d'accès, des clés secrètes et un ID de modèle. Reportez-vous à . Utilisez l'ID de modèle comme attribut model dans la procédure DBMS_CLOUD_AI.CREATE_PROFILE. Vous devez indiquer l'attribut model explicitement, car aucun modèle par défaut n'est fourni.

--Grant EXECUTE privilege to ADB_USER
GRANT EXECUTE on DBMS_CLOUD_AI to ADB_USER; 

--
-- Create Credential for AI provider
--
BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'AWS_CRED',
        username    => '<your_AWS_access_key>',
        password    => '<your_AWS_secret_key>'
      );
END;
/
 
PL/SQL procedure successfully completed.
 
 
--
-- Grant Network ACL for AWS
--
BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'bedrock-runtime.us-east-1.amazonaws.com',
        ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                    principal_name => 'ADB_USER',
                    principal_type => xs_acl.ptype_db)
       );
END;
/
 
PL/SQL procedure successfully completed.
 


--
-- Create AI profile 
--
BEGIN
      DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name =>'AWS',
        attributes   =>'{"provider": "aws",
          "credential_name": "AWS_CRED",
          "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
           "model" : "anthropic.claude-v2",
           "conversation" : "true"
          }');
END;
/
 
 
PL/SQL procedure successfully completed.


--
-- Enable AI profile in current session
--
EXEC DBMS_CLOUD_AI.SET_PROFILE('AWS');

PL/SQL procedure successfully completed.
 
--
-- Use AI
--

SELECT AI how many customers exist;
"RESPONSE"
"COUNT(*)"
55500


SELECT AI how many customers in San Francisco are married;
"RESPONSE"
"COUNT(*)"
46

SELECT AI showsql how many customers in San Francisco are married;
"RESPONSE"
"SELECT COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE UPPER(C."CUST_CITY") = UPPER('San Francisco')
AND UPPER(C."CUST_MARITAL_STATUS") = UPPER('Married')"

SELECT AI explainsql how many customers in San Francisco are married;

"RESPONSE""SELECT 
COUNT(*) AS "Number of Married Customers in San Francisco"
FROM "SH"."CUSTOMERS" C
WHERE C."CUST_CITY" = 'San Francisco'
AND C."CUST_MARITAL_STATUS" = 'Married'

Explanation:
- Used table alias C for CUSTOMERS table
- Used easy to read column names like CUST_CITY, CUST_MARITAL_STATUS
- Enclosed table name, schema name and column names in double quotes 
- Compared string values in WHERE clause without UPPER() since the values are not in double quotes
- Counted number of rows satisfying the condition and aliased the count as "Number of Married Customers in San Francisco""

SELECT AI narrate what are the top 3 customers in San Francisco;
"RESPONSE"
The top 3 customers in San Francisco ordered by credit limit in descending order are:

1. Bert Katz
2. Madallyn Ladd  
3. Henrietta Snodgrass

SELECT AI chat what is Autonomous AI Database;
"RESPONSE"
"An Autonomous AI Database is a cloud database service provided by Oracle Corporation. Some key features of Oracle Autonomous AI Database include:

- Fully automated and self-driving - The database automatically upgrades, patches, tunes, and backs itself up without any human intervention required.

- Self-securing - The database uses machine learning to detect threats and automatically apply security updates.

- Self-repairing - The database monitors itself and automatically recovers from failures and errors without downtime.

- Self-scaling - The database automatically scales compute and storage resources up and down as needed to meet workload demands. 

- Serverless - The database is accessed as a cloud service without having to manually provision any servers or infrastructure.

- High performance - The database uses Oracle's advanced automation and machine learning to continuously tune itself for high performance.

- Multiple workload support - Supports transaction processing, analytics, graph processing, etc in a single converged database.

- Fully managed - Oracle handles all the management and administration of the database. Users just load and access their data.

- Compatible - Supports common SQL and Oracle PL/SQL for easy migration from on-prem Oracle databases.

So in summary, an Oracle Autonomous AI Database is a fully automated, self-driving, self-securing, and self-repairing database provided as a simple cloud service. The automation provides high performance, elasticity, and availability with minimal human labor required."

--
--Clear the profile
--
BEGIN
   DBMS_CLOUD_AI.CLEAR_PROFILE;
END;
/
PL/SQL procedure successfully completed.

--
--Drop the profile
--
EXEC DBMS_CLOUD_AI.DROP_PROFILE('AWS');
 
PL/SQL procedure successfully completed.

Exemple : activation de conversations dans Select AI

Ces exemples illustrent l'activation des conversations dans Select AI.

Remarques :

Un utilisateur disposant de privilèges d'administrateur (ADMIN) doit accorder EXECUTE et activer la liste de contrôle d'accès réseau (ACL).

Conversations basées sur une session

Créez votre profil AI. Définissez l'attribut conversation sur true dans le profil. Cette action inclut le contenu des interactions ou invites précédentes, éventuellement des métadonnées de schéma, et définissez votre profil. Une fois le profil activé, vous pouvez commencer à avoir des conversations avec vos données. Utilisez le langage naturel pour poser des questions et effectuer un suivi si nécessaire.


--Grants EXECUTE privilege to ADB_USER
--
SQL> grant execute on DBMS_CLOUD_AI to ADB_USER;

-- Grant Network ACL for OpenAI endpoint
--
SQL> BEGIN  
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'api.openai.com',
         ace  => xs$ace_type(privilege_list => xs$name_list('http'),
                             principal_name => 'ADB_USER',
                             principal_type => xs_acl.ptype_db)
     );
    END;
    /
 
PL/SQL procedure successfully completed.
 
--
-- Create Credential for AI provider
--
EXEC
DBMS_CLOUD.CREATE_CREDENTIAL(
CREDENTIAL_NAME   => 'OPENAI_CRED', 
username          =>  'OPENAI', 
password          =>  '<your_api_token>');
 
PL/SQL procedure successfully completed.
 
--
-- Create AI profile
--
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
  profile_name   => 'OPENAI',
  attributes     =>'{"provider": "openai",                                                                   
        "credential_name": "OPENAI_CRED",                                     
        "object_list": [{"owner": "SH", "name": "customers"},                
                        {"owner": "SH", "name": "countries"},                
                        {"owner": "SH", "name": "supplementary_demographics"},
                        {"owner": "SH", "name": "profits"},                  
                        {"owner": "SH", "name": "promotions"},               
                        {"owner": "SH", "name": "products"}],
        "conversation": "true"                
       }');                                                                  
     END;                                                                         
     / 
 
PL/SQL procedure successfully completed.
 
--
-- Enable AI profile in current session
--
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI');
 
PL/SQL procedure successfully completed.
 
--
-- Get Profile in current session
--
SQL> SELECT DBMS_CLOUD_AI.get_profile() from dual;
 
DBMS_CLOUD_AI.GET_PROFILE()
--------------------------------------------------------------------------------
"OPENAI"
 
--
-- Use AI
--
what are the total number of customers;
 
CUSTOMER_COUNT
--------------
         55500
 
break out count of customers by country;   
 
RESPONSE
-----------------
COUNTRY_NAME 			CUSTOMER_COUNT
Italy 				7780
Brazil 				832
Japan 				624
United Kingdom 			7557
Germany 			8173
United States of America 	18520
France 				3833
Canada 				2010
Spain 				2039
China 				712
Singapore 			597
New Zealand 			244
Poland 	708
Australia 			831
Argentina 			403
Denmark 			383
South Africa 			88
Saudi Arabia 			75
Turkey 				91

  
what age group is most common;
 
RESPONSE
--------------------------------------------------------------------------------
AGE_GROUP 	CUSTOMER_COUNT
65+ 		28226
 
select ai keep the top 5 customers and their country by their purchases and include a rank in the result;
 
RESPONSE
--------------------------------------------------------------------------------
RANK 	CUSTOMER_NAME 		COUNTRY 	PURCHASES
1 	Abigail Ruddy 		Japan 		276
2 	Abigail Ruddy 		Italy 		168
3 	Abigail Ruddy 		Japan 		74
3 	Abner Robbinette 	Germany 	74
5 	Abner Everett 		France 		68
 
 
SQL> EXEC DBMS_CLOUD_AI.DROP_PROFILE('OPENAI');
 
PL/SQL procedure successfully completed.

Conversations personnalisables

Les exemples suivants illustrent l'utilisation de l'API de gestion des conversations prenant en charge les conversations personnalisables. Pour utiliser Select AI pour plusieurs conversations :
  1. créer une conversation,
  2. Définir la conversation dans la session utilisateur en cours
  3. Utiliser Select AI <action> <prompt>
Vous pouvez créer et définir la conversation comme suit :
  • Utilisez la fonction DBMS_CLOUD_AI.CREATE_CONVERSATION, puis définissez la conversation à l'aide de DBMS_CLOUD_AI.SET_CONVERSATION_ID.
  • Appelez la procédure DBMS_CLOUD_AI.CREATE_CONVERSATION directement pour créer et définir la conversation en une seule étape.
Exemple : Créer et définir des conversations personnalisables

L'exemple suivant montre comment créer une conversation à l'aide de la fonction DBMS_CLOUD_AI.CREATE_CONVERSATION et la définir à l'aide de la procédure DBMS_CLOUD_AI.SET_CONVERSATION_ID.

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;  -- in 19c, run SELECT DBMS_CLOUD_AI.create_conversation FROM dual;
  
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
 
 
EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed

L'exemple suivant illustre l'exécution de la procédure DBMS_CLOUD_AI.CREATE_CONVERSATION pour créer et définir directement conversation_id.

EXEC DBMS_CLOUD_AI.create_conversation;
 
PL/SQL procedure successfully completed.

Vous pouvez également personnaliser les attributs de conversation tels que les attributs title, description, retention_days et conversation_length.

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
            attributes => '{"title":"My first conversation", 
			"description":"this is my first conversation", 
			"retention_days":5, 
			"conversation_length":5}');
  
 
CREATE_CONVERSATION
------------------------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A

Vous pouvez voir si une certaine conversation existe en interrogeant la vue DBA/USER_CLOUD_AI_CONVERSATIONS.

-- Verify the setup
SELECT conversation_id, conversation_title, description, retention_days, 
conversation_length FROM DBA_CLOUD_AI_CONVERSATIONS WHERE 
conversation_id = '38F8B874-7687-2A3F-E063-9C6D4664EC3A';
 
CONVERSATION_ID                      	CONVERSATION_TITLE                              DESCRIPTION                        RETENTION_DAYS                 CONVERSATION_LENGTH
------------------------------------ 	----------------------------------------------- ---------------------------------- ------------------------------ -------------------
38F8B874-7687-2A3F-E063-9C6D4664EC3A 	My first conversation                           this is my first conversation     +00005 00:00:00.000000         5

Vous pouvez également vérifier si une conversation est définie en appelant la fonction DBMS_CLOUD_AI.GET_CONVERSATION_ID.

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;
 
 
--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92
Exemple : utiliser des conversations personnalisables avec Select AI

Après avoir créé et défini la conversation et activé votre profil d'IA, vous pouvez commencer à interagir avec vos données. Utilisez le langage naturel pour poser des questions et effectuer un suivi si nécessaire.

Utilisez SELECT AI <ACTION> <PROMPT>.

SELECT AI CHAT What is the difference in weather between Seattle and San Francisco?;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco are both located on the West Coast of the United State
s, but they have distinct weather patterns due to their unique geography and cli
mate conditions. Here are the main differences:
 
1. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco, on the other hand, recei
ves significantly less rainfall, with an average of around 20 inches (51 cm) per
 year.
2. **Cloud Cover**: Seattle is often cloudy, with an average of 226 cloudy days
per year. San Francisco is also cloudy, but to a lesser extent, with an average
of 165 cloudy days per year.
 
......
 
 
SELECT AI CHAT Explain the difference again in one paragraph only.;
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.
Exemple : utiliser la fonction GENERATE pour comparer deux conversations

L'exemple suivant montre comment deux conversations sont utilisées de manière interchangeable pour poser des questions et vérifier des réponses précises. Chaque conversation commence par une question différente axée sur la comparaison. Par la suite, lorsque vous posez la même question de suivi dans les deux conversations, chacune renvoie une réponse différente en fonction de son contexte précédent.

-- First conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92



-- Second conversation
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION;
 
 
CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'What is the difference in weather between Seattle and San Francisco?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco, both located in the Pacific Northwest and Northern Ca
lifornia respectively, experience a mild oceanic climate. However, there are som
e notable differences in their weather patterns:
 
1. **Temperature**: San Francisco tends to be slightly warmer than Seattle, espe
cially during the summer months. San Francisco's average temperature ranges from
 45?F (7?C) in winter to 67?F (19?C) in summer, while Seattle's average temperat
ure ranges from 38?F (3?C) in winter to 64?F (18?C) in summer.
 
2. **Rainfall**: Seattle is known for its rainy reputation, with an average annu
al rainfall of around 37 inches (94 cm). San Francisco receives less rainfall, w
ith an average of around 20 inches (51 cm) per year. However, San Francisco's ra
infall is more concentrated during the winter months, while Seattle's rainfall i
s more evenly distributed throughout the year.
 
......

-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'How does the cost of living compare between New York and Los Angeles?',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York and Los Angeles is relatively high compared to ot
her cities in the United States. However, there are some differences in the cost
 of living between the two cities. Here's a comparison of the cost of living in
New York and Los Angeles:
 
1. Housing: The cost of housing is significantly higher in New York than in Los
Angeles. The median home price in New York is around $999,000, while in Los Ange
les it's around $849,000. Rent is also higher in New York, with the average rent
 for a one-bedroom apartment being around $3,000 per month, compared to around $
2,400 per month in Los Angeles.
 
2. Food: The cost of food is relatively similar in both cities, with some variat
ion in the cost of certain types of cuisine. However, eating out in New York can
 be more expensive, with the average cost of a meal at a mid-range restaurant be
ing around $15-20 per person, compared to around $12-18 per person in Los Angele
s.
 
......


-- Call generate using the first conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4D-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
Seattle and San Francisco have different weather patterns despite both experienc
ing a mild oceanic climate. San Francisco tends to be slightly warmer, with aver
age temperatures ranging from 45?F to 67?F, and receives less rainfall, around 2
0 inches per year, mostly during winter. In contrast, Seattle is cooler, with te
mperatures ranging from 38?F to 64?F, and rainier, with around 37 inches of rain
fall per year, distributed throughout the year. San Francisco is also known for
its fog, particularly during summer, and receives more sunshine, around 160 sunn
y days per year, although it's often filtered through the fog. Overall, San Fran
cisco's weather is warmer and sunnier, with more pronounced seasonal variations,
 while Seattle's is cooler and rainier, with more consistent temperatures throug
hout the year.


-- Call generate using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT',
        params       =>  '{"conversation_id":"30C9DB6E-EA4E-AFBA-E063-9C6D46644B92"}') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
The cost of living in New York is approximately 20-30% higher than in Los Angele
s, mainly due to the higher cost of housing and transportation. New York has a m
edian home price of around $999,000 and average rent of $3,000 per month for a o
ne-bedroom apartment, compared to Los Angeles' median home price of $849,000 and
 average rent of $2,400 per month. While the cost of food and utilities is relat
ively similar in both cities, the cost of transportation is higher in Los Angele
s due to its car-centric culture, but the cost of public transportation is highe
r in New York. Overall, the total monthly expenses for a single person in New Yo
rk can range from $4,600, compared to around $4,050 in Los Angeles, making New Y
ork the more expensive city to live in.

Vous pouvez appeler la fonction DBMS_CLOUD_AI.GENERATE sans spécifier de conversation. Toutefois, dans ce cas, une réponse significative ne doit pas être attendue.

-- Ask SELECT AI using the second conversation.
SELECT DBMS_CLOUD_AI.GENERATE(
        prompt       =>  'Explain the difference again in one paragraph only.',
        profile_name =>  'GENAI',
        action       =>  'CHAT') AS RESPONSE;
 
 
RESPONSE
--------------------------------------------------------------------------------
There is no previous explanation to draw from, as this is the beginning of our c
onversation. If you would like to ask a question or provide a topic, I would be
happy to explain the differences related to it in one paragraph.
Exemple : vérification des conversations via les vues DBMS_CLOUD_AI

Vous pouvez interroger les vues de conversation DBMS_CLOUD_AI pour réviser les détails de conversation et d'invite. Pour plus de détails, reportez-vous à la section .

Remarques :

L'icône

Les vues avec le préfixe DBA_ sont disponibles uniquement pour les utilisateurs disposant de privilèges d'administrateur (ADMIN).

SELECT conversation_id, conversation_title, description FROM dba_cloud_ai_conversations;
 
CONVERSATION_ID
------------------------------------
CONVERSATION_TITLE
----------------------------------------------------------------------------------------------------
DESCRIPTION
--------------------------------------------------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
Seattle vs San Francisco Weather
The conversation discusses the comparison of weather patterns between Seattle an
d San Francisco, focusing on the differences in temperature, rainfall, fog, suns
hine, and seasonal variation between the two cities.
 
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
NY vs LA Cost Comparison
The conversation discusses and compares the cost of living in New York and Los A
ngeles, covering housing, food, transportation, utilities, and taxes to provide
an overall view of the expenses in both cities.

SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts
     GROUP BY conversation_id;
 
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92          2
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2
Exemple : mise à jour des détails d'une conversation

Vous pouvez mettre à jour les éléments title, description et retention_days d'une conversation à l'aide de la procédure DBMS_CLOUD_AI.UPDATE_CONVERSATION. Vous pouvez vérifier la mise à jour en interrogeant la vue de conversation DBMS_CLOUD_AI.

-- Update the second conversation's title, description and retention_days
SQL> EXEC DBMS_CLOUD_AI.update_conversation(conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92', 
											attributes => '{"retention_days":20, 
														"description":"This a description", 
														"title":"a title", 
														"conversation_length":20}');
 
PL/SQL procedure successfully completed.
 
 
-- Verify the information for the second conversation
SQL> SELECT conversation_title, description, retention_days
FROM dba_cloud_ai_conversations
WHERE conversation_id = '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92';
 
CONVERSATION_TITLE         DESCRIPTION                          RETENTION_DAYS         LENGTH
-------------------------- ------------------------------------ -------------- --------------
a title                    This a description                   20                         20
Exemple : suppression d'une invite

Vous pouvez supprimer une invite individuelle de vos conversations et vérifier la modification en interrogeant la vue de conversation DBMS_CLOUD_AI.

-- Find the latest prompt for first conversation
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
     WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92'
     ORDER BY created DESC
     FETCH FIRST ROW ONLY;
 
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA61-AFBA-E063-9C6D46644B92
 
 
-- Delete the prompt
EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the prompt is deleted
SELECT conversation_prompt_id FROM dba_cloud_ai_conversation_prompts
WHERE conversation_id = '30C9DB6E-EA4D-AFBA-E063-9C6D46644B92';
 
-- Only one prompt now
CONVERSATION_PROMPT_ID
------------------------------------
30C9DB6E-EA5A-AFBA-E063-9C6D46644B92
Exemple : suppression d'une conversation

Vous pouvez supprimer l'intégralité de la conversation, ce qui supprime également toutes les invites qui lui sont associées.

-- Delete the first conversation
EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
 
PL/SQL procedure successfully completed.
 
 
-- Verify if the conversation and its prompts are removed
SELECT conversation_id FROM dba_cloud_ai_conversations;
 
-- We only have the second conversation now
CONVERSATION_ID
------------------------------------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92
 
 
SELECT conversation_id, count(*) FROM dba_cloud_ai_conversation_prompts GROUP BY conversation_id;
 
-- We only have prompts in the second conversation
CONVERSATION_ID                COUNT(*)
------------------------------------ ----------
30C9DB6E-EA4E-AFBA-E063-9C6D46644B92          2

Exemple : Sélectionner un retour IA

Ces exemples montrent comment utiliser la procédure DBMS_CLOUD_AI.FEEDBACK et les différents scénarios pour fournir des informations en retour afin d'améliorer la génération ultérieure des requêtes SQL.

Remarques :

Vous pouvez fournir un retour pour les invites SQL Select AI même si l'invite n'a pas été exécutée précédemment. Select AI ne nécessite pas que l'invite SQL soit utilisée dans une requête avant de soumettre un retour. Vous pouvez fournir un retour pour toute invite valide à tout moment.

Exemple : fournir un retour négatif

L'exemple suivant montre comment apporter des corrections au code SQL généré en tant que retour (retour négatif) en utilisant feedback_type en tant que negative et en fournissant votre requête SQL.

Pour ajouter vos commentaires au profil AI nommé OCI_FEEDBACK1, appelez la procédure DBMS_CLOUD_AI.FEEDBACK avec le paramètre sql_text contenant l'invite. Pour en savoir plus sur les attributs, reportez-vous à la section . Vous extrayez ensuite les colonnes content et attributes de la table <profile_name>_FEEDBACK_VECINDEX$VECTAB, qui est liée à cette requête SQL spécifique. Sélectionnez AI crée automatiquement cette table vectorielle lorsque vous utilisez la fonction de retour pour la première fois. Pour plus d'informations, reportez-vous au guide .

SQL> select ai showsql how many movies;
 
RESPONSE
------------------------------------------------------------------------
SELECT COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_text=> 'select ai showsql how many movies', feedback_type=> 'negative', response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"');
 
PL/SQL procedure successfully completed.
SQL> select CONTENT, ATTRIBUTES from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
 
CONTENT                                                
----------------------------------------------------------------------------------------------------
how many movies                                             
ATTRIBUTES
----------------------------------------------------------------------------------------------------
 
{"response":"SELECT SUM(1) FROM \"ADB_USER\".\"MOVIES\"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}
Exemple : fournir des commentaires positifs

L'exemple suivant indique que vous acceptez et confirmez le code SQL généré (retour positif) en utilisant feedback_type comme positive.

Dans cet exemple, la requête extrait la valeur sql_id de la vue v$mapped_sql pour l'invite donnée. Pour plus d'informations, reportez-vous à V_MAPPED_SQL.

Vous ajoutez vos commentaires au profil AI nommé OCI_FEEDBACK1 en appelant la procédure DBMS_CLOUD_AI.FEEDBACK avec le paramètre sql_id. Vous extrayez ensuite les colonnes content et attributes de la table <profile_name>_FEEDBACK_VECINDEX$VECTAB, qui est liée à cette requête SQL spécifique. Sélectionnez AI crée automatiquement cette table vectorielle lorsque vous utilisez la fonction de retour pour la première fois. Pour plus d'informations, reportez-vous au guide .

SQL> select ai showsql how many distinct movie genres?;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT COUNT(DISTINCT g."GENRE_NAME") AS "Number of Movie Genres" FROM "ADB_USER"."GENRES" g
 
SQL> SELECT sql_id FROM v$mapped_sql WHERE sql_text = 'select ai showsql how many distinct movie genres?';
 
SQL_ID
-------------
852w8u83gktc1
 
SQL> exec DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1', sql_id=> '852w8u83gktc1', feedback_type=>'positive', operation=>'add');
 
PL/SQL procedure successfully completed.
 
SQL> SELECT content, attributes FROM OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB WHERE JSON_VALUE(attributes, '$.sql_id') ='852w8u83gktc1';
 
 CONTENT                                               
---------------------------------------------------------------------------------------------------- 
how many distinct movie genres?
ATTRIBUTES
----------------------------------------------------------------------------------------------------
{"response":"SELECT COUNT(DISTINCT g.\"GENRE_NAME\") AS \"Number of Movie Genres\" FROM \"ADB_USER\".\"GENRES\" g","feedback_type":"positive","sql_id":"852w8u83gktc1","sql_text":"select ai showsql how many distinct movie genres?","feedback_content":null}
Exemple : fournir des commentaires sans utilisation préalable

Vous pouvez fournir un retour pour les invites SQL même si l'invite n'a pas été utilisée précédemment. Exemple :

BEGIN
  DBMS_CLOUD_AI.FEEDBACK(
    profile_name=>'AI_PROFILE',
    sql_text=>'select ai runsql how many products named PAD', -- Prior usage not required
    feedback_type=>'negative',
    response=>'SELECT COUNT(*) AS "Num" FROM "PRODUCTS"."CATG" o WHERE UPPER(o."NAME") LIKE ''%PAD%''',
    feedback_content=>'Use LIKE instead of ='
  );
END;
/

Dans ce cas, le retour de l'invite select ai runsql how many products named PAD est soumis sans qu'il soit nécessaire d'utiliser l'invite au préalable.

Exemple : ajout ou suppression d'un retour pour le code SQL généré
L'exemple suivant illustre l'ajout ou la suppression de vos commentaires pour l'instruction SQL générée en indiquant les paramètres de procédure DBMS_CLOUD_AI.FEEDBACK. Cet exemple illustre l'utilisation de sql_id et sql_text avec d'autres paramètres.

Remarques :

Sélectionnez AI pour autoriser une seule entrée de retour pour chaque sql_id. Si vous fournissez des commentaires supplémentaires pour le même sql_id, Select AI remplace l'entrée précédente par la nouvelle.

Pour plus de détails sur les paramètres, reportez-vous à la section .

EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   feedback_type=>'positive',
                                   operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_text=> 'select ai showsql how many movies',
                                   feedback_type=> 'negative',
                                   response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
                                   feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   operation=>'delete');
Exemple : utiliser l'action Feedback avec la dernière instruction SQL AI pour fournir des commentaires négatifs

Cet exemple illustre l'utilisation de l'action feedback pour améliorer le code SQL généré en suggérant les modifications à l'aide du langage naturel.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
    profile_name=>'OCI_FEEDBACK1',
    attributes=>'{"provider": "oci",                                                                 
      "credential_name": "GENAI_CRED",
      "oci_compartment_id": "ocid1.compartment.oc1..aaaa...",
      "object_list": [{"owner": "ADB_USER", "name": "users"},
                      {"owner": "ADB_USER", "name": "movies"},
                      {"owner": "ADB_USER", "name": "genres"},
                      {"owner": "ADB_USER", "name": "watch_history"},
                      {"owner": "ADB_USER", "name": "movie_genres"},
                      {"owner": "ADB_USER", "name": "employees1"},
                      {"owner": "ADB_USER", "name": "employees2"}
                        ]
      }');
END;
/
 
EXEC DBMS_CLOUD_AI.SET_PROFILE('OCI_FEEDBACK1');

 
PL/SQL procedure successfully completed.
 

select ai showsql rank movie duration;
 
RESPONSE
-------------------------------------------------------------------------------
SELECT "DURATION" AS "Movie Duration" FROM "ADB_USER"."MOVIES" ORDER BY "DURATION"
 
select ai feedback use ascending sorting;
 
RESPONSE
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "rank movie duration" is successfully refined. The refined SQL query as following:
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
 
 
select ai showsql rank the movie duration;
 
RESPONSE
-----------------------------------------------------------------------------------------
SELECT m."DURATION" AS "Movie Duration" FROM "ADB_USER."MOVIES" m ORDER BY m."DURATION" ASC
Exemple : utilisation d'une action de retour avec la dernière instruction SQL AI pour fournir un retour positif

Cet exemple illustre l'utilisation de l'action feedback pour accepter le code SQL généré en langage naturel.

--Positive feedback

select ai showsql which movies are comedy?;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT DISTINCT m."TITLE" AS "Movie Title" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" WHERE g."GENRE_NAME" = 'comedy'
 
select ai feedback this is correct;
 
RESPONSE
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Thank you for your positive feedback. The SQL query for prompt "which movies are comedy?" is correctly implemented and delivering the expected results. It will be referenced for future optimizations and improvements.


Select AI Feedback Action Referring SQL_ID
Exemple : utiliser l'action de retour avec SQL_ID pour fournir un retour

Cet exemple illustre l'utilisation de SQL_ID avec l'action feedback pour fournir un retour sur une requête SQL générée particulière. Vous pouvez obtenir SQL_ID en interrogeant la table v$MAPPED_SQL.

-- Query mentioned with SQL_ID

select ai showsql how many movies are in each genre;
 
RESPONSE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies" FROM "ADB_USER"."MOVIES" m INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID" INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID" GROUP BY g."GENRE_NAME"
 
select sql_id from v$cloud_ai_sql where sql_text = 'select ai showsql how many movies are in each genre';
 
SQL_ID
-------------
8azkwc0hr87ga
 
select ai feedback for query with sql_id = '8azkwc0hr87ga', rank in descending sorting;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many movies are in each genre" is successfully refined. The refined SQL query as following:
SELECT g."GENRE_NAME" AS "Genre Name", COUNT(m."MOVIE_ID") AS "Number of Movies"
FROM "ADB_USER"."MOVIES" m
INNER JOIN "ADB_USER"."MOVIE_GENRES" mg ON m."MOVIE_ID" = mg."MOVIE_ID"
INNER JOIN "ADB_USER"."GENRES" g ON mg."GENRE_ID" = g."GENRE_ID"
GROUP BY g."GENRE_NAME"
ORDER BY COUNT(m."MOVIE_ID") DESC
Exemple : Utiliser une action de retour avec du texte de requête

Cet exemple montre l'action feedback pour une requête Select AI spécifique en incluant l'invite Select AI entre guillemets suivis de vos commentaires.

-Query mentioned with SQL_TEXT

select ai showsql how many watch history in total;
 
RESPONSE
----------------------------------------------------------------------------------
SELECT COUNT(w."WATCH_ID") AS "Total Watch History" FROM "ADB_USER"."WATCH_HISTORY" w
 
select ai feedback for query "select ai showsql how many watch history in total", name the column as total_watch;
 
RESPONSE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Based on your feedback, the SQL query for prompt "how many watch history in total" is successfully refined. The refined SQL query as following:
SELECT COUNT(w."WATCH_ID") AS "total_watch" FROM "ADB_USER"."WATCH_HISTORY" w

Exemple : Sélectionner AI pour les graphiques de propriétés

Cet exemple montre comment utiliser la procédure DBMS_CLOUD_AI.GENERATE et une invite en langage naturel pour générer des requêtes de graphique PGQ afin d'interroger les données de graphique.

Exemple : spécification de plusieurs graphiques dans votre profil AI

Cet exemple montre comment définir plusieurs graphiques de propriétés dans votre profil AI, y compris un exemple de requête et sa sortie.

BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
      profile_name =>'OPENAI',
      attributes   =>'{"provider": "openai",
        "model": "gpt-4o",
        "credential_name": "OPENAI_CRED",
        "object_list": [{"owner": "ADB_USER", "name": "LDBC_GRAPH"},
                        {"owner": "ADB_USER", "name": "G"}]
       }');                                                                  
END;                                                                         
/

SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE(profile_name => 'OPENAI');

PL/SQL procedure successfully completed.

SQL> select ai who bought a dress;

CUSTOMER_N
----------
Kate

1 row selected.

Exemple : exemples d'invites pour les graphiques de propriétés

Ces exemples montrent comment créer des exemples de données et afficher l'instruction SQL générée à l'aide de l'action showsql pour une invite donnée.

Exemple : Créer un tableau de graphe de propriétés

L'exemple suivant crée des exemples de tables et un graphique de propriétés.

CREATE TABLE Person
(
    id         NUMBER PRIMARY KEY,
    firstName  VARCHAR2(20 CHAR),
    lastName   VARCHAR2(20 CHAR),
    age        NUMBER,
    jsonProp   VARCHAR2(40 CHAR)
);

CREATE TABLE Post
(
    id         NUMBER PRIMARY KEY,
    content    VARCHAR2(20 CHAR)
);

CREATE TABLE personLikesPost
(
    idPerson NUMBER REFERENCES Person (id),
    idPost   NUMBER REFERENCES Post (id)
);

CREATE TABLE personKnowsPerson
(
    idPerson1 NUMBER REFERENCES Person (id),
    idPerson2 NUMBER REFERENCES Person (id)
);

CREATE PROPERTY GRAPH person_graph
  VERTEX TABLES (
    Person KEY (id) LABEL Person
      PROPERTIES (firstName, lastName, age, jsonProp),
    Post KEY (id) LABEL Post
      PROPERTIES(content)
  )
  EDGE TABLES (
    personLikesPost
      KEY(idPerson, idPost)
      SOURCE KEY (idPerson) REFERENCES Person (id)
      DESTINATION KEY (idPost) REFERENCES POST (id)
      LABEL Likes NO PROPERTIES,
    personKnowsPerson
      KEY(idPerson1, idPerson2)
      SOURCE KEY (idPerson1) REFERENCES Person (id)
      DESTINATION KEY (idPerson2) REFERENCES Person (id)
      LABEL Knows NO PROPERTIES
  );

insert into Person values (1, 'John', 'Doe',23, '{"key1":"value1","key2":"value2"}');
insert into Person values (2, 'Scott', 'Tiger', 25, '{"key1":"value3","key2":"value4"}');
insert into Person values (3, 'Max', 'Power', 27, '{"key1":"value5","key2":"value6"}');
insert into Person values (4, 'Jane', 'Doe', 22, '{"key1":"value7","key2":"value8"}');
insert into Person (id, Firstname, age) values (5, 'Hans', 23);
insert into Person (id, Firstname, age) values (6, 'Franz', 24);
 
INSERT INTO Post VALUES (10, 'Lorem ipsum...');
INSERT INTO Post VALUES (11, 'Nulla facilisi...');
INSERT INTO Post VALUES (12, 'Vestibulum eget ..');
INSERT INTO Post VALUES (13, 'Sed fermentum...');
INSERT INTO Post VALUES (14, 'Fusce at ...');
INSERT INTO Post VALUES (15, 'Pellentesque sit ...');
INSERT INTO Post VALUES (16, 'Integer...');
INSERT INTO Post VALUES (17, 'Curabitur luctus ...');
INSERT INTO Post VALUES (18, 'Nam in ...');
INSERT INTO Post VALUES (19, 'Etiam ac ...');
 
insert into personKnowsPerson values (1, 2);
insert into personKnowsPerson values (2, 3);
insert into personKnowsPerson values (3, 4);
insert into personKnowsPerson values (4, 5);
insert into personKnowsPerson values (5, 6);
insert into personKnowsPerson values (6, 2);
insert into personKnowsPerson values (5, 3);
 
INSERT INTO personLikesPost VALUES (1, 10);
INSERT INTO personLikesPost VALUES (1, 11);
INSERT INTO personLikesPost VALUES (1, 12);
INSERT INTO personLikesPost VALUES (2, 10);
INSERT INTO personLikesPost VALUES (2, 13);
INSERT INTO personLikesPost VALUES (2, 14);
INSERT INTO personLikesPost VALUES (3, 11);
INSERT INTO personLikesPost VALUES (3, 15);
INSERT INTO personLikesPost VALUES (3, 16);
INSERT INTO personLikesPost VALUES (4, 12);
INSERT INTO personLikesPost VALUES (4, 17);
INSERT INTO personLikesPost VALUES (4, 18);
INSERT INTO personLikesPost VALUES (5, 13);
INSERT INTO personLikesPost VALUES (5, 14);
INSERT INTO personLikesPost VALUES (5, 19);
INSERT INTO personLikesPost VALUES (6, 15);
INSERT INTO personLikesPost VALUES (6, 16);
INSERT INTO personLikesPost VALUES (6, 17);
INSERT INTO personLikesPost VALUES (1, 18);
INSERT INTO personLikesPost VALUES (2, 19);

commit;
Exemple : correspondance de sommets sans libellé

Invite : Find all the people IDs

SELECT person_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v IS "PERSON")
    COLUMNS (VERTEX_ID(v) AS person_id))
Exemple : correspondance d'arêtes sans libellés

Invite : Find all the edge IDs

SELECT edge_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (v1) -[e]-> (v2)
    COLUMNS (EDGE_ID(e) AS edge_id))
Exemple : correspondance d'arêtes avec des libellés

Invite : Find all the knows relationship IDs

SELECT knows_id
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e IS "KNOWS"]-> (p2 IS "PERSON")
    COLUMNS (EDGE_ID(e) AS knows_id))
Exemple : correspondance de modèles de chemin incluant un ou plusieurs sauts

Invite : List all people who know someone who liked the post 'Sed fermentum...'

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON") -[e1 IS "KNOWS"]-> (p2 IS "PERSON") -[e2 IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(post."CONTENT") = UPPER('Sed fermentum...')
    COLUMNS (VERTEX_ID(p1) AS person_id, p1."FIRSTNAME" AS person_firstname, p1."LASTNAME" AS person_lastname))
Exemple : accès aux propriétés de sommet et d'arête

Invite : Find first name and last name of all people

SELECT first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS first_name, p."LASTNAME" AS last_name))
Exemple : filtrage des données

Invite : Find post contents liked by John Doe

SELECT post_content
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "LIKES"]-> (post IS "POST")
    WHERE UPPER(p."FIRSTNAME") = UPPER('John') AND UPPER(p."LASTNAME") = UPPER('Doe')
    COLUMNS (post."CONTENT" AS post_content))
Exemple : fonctions et expressions

Invite : Show all people (full name) and display their key1 value from jsonProp property

SELECT person_fullname, json_key1
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (
	(p."FIRSTNAME" || ' ' || p."LASTNAME") AS person_fullname,
	JSON_QUERY(p."JSONPROP", '$.key1') AS json_key1
    )
)
Exemple : tri des données

Invite : Find friends of Scott Tiger ordered by their last name

SELECT friend_firstname, friend_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON") -[e IS "KNOWS"]-> (f IS "PERSON")
    WHERE UPPER(p."FIRSTNAME") = UPPER('Scott') AND UPPER(p."LASTNAME") = UPPER('Tiger')
    COLUMNS (f."FIRSTNAME" AS friend_firstname, f."LASTNAME" AS friend_lastname)
)
ORDER BY friend_lastname
Exemple : limitation des lignes

Invite : Find all people ordered by first name. Skip one result and return 2 results only

SELECT person_firstname
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p IS "PERSON")
    COLUMNS (p."FIRSTNAME" AS person_firstname))
ORDER BY person_firstname
OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY

Requêtes non prises en charge

Pour les requêtes suivantes, certains LLM génèrent une valeur NL2SQL valide, mais le code SQL résultant utilise des fonctionnalités qui ne sont pas encore prises en charge dans Oracle AI Database 26ai.

Exemple : requêtes nécessitant de ne pas correspondre à un certain modèle

Invite : Find people that do not know Scott.

La sous-interrogation EXISTS n'est pas prise en charge.

SELECT person_id, first_name, last_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (p1 IS "PERSON")
    WHERE NOT EXISTS (
	SELECT 1
	FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
	    MATCH (p2 IS "PERSON") -[e IS "PERSONKNOWSPERSON"]-> (p3 IS "PERSON"
)
	    WHERE p2."ID" = p1."ID" AND UPPER(p3."FIRSTNAME") = UPPER('Scott')
	    COLUMNS (1 AS dummy_value))
    )
    COLUMNS (p1."ID" AS person_id, p1."FIRSTNAME" AS first_name, p1."LASTNAME" A
S last_name))
Exemple : requêtes nécessitant éventuellement une correspondance avec un certain modèle

Invite : Show all people and how many posts they have liked (show people even if they have not liked a post).

La correspondance OPTIONAL n'est pas prise en charge.

SELECT person_id, person_firstname, person_lastname, liked_post_ids
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
MATCH (p is "PERSON") OPTIONAL MATCH (p) -[l is "PERSONLIKESPOST"]-> (post is "POST")
COLUMNS(
    VERTEX_ID(p) as person_id,
    p."FIRSTNAME" as person_firstname,
    p."LASTNAME" as person_lastname,
    JSON_ARRAYAGG(VERTEX_ID(post)) as liked_post_ids
))
Exemple : modèles de chemin récursif non limité

Invite : Find all people that Scott can reach.

Les requêtes qui utilisent des quantificateurs non limités ne sont pas prises en charge.

SELECT person_id, person_firstname, person_lastname
FROM GRAPH_TABLE("ADB_USER"."PERSONGRAPH"
    MATCH (src IS "PERSON") -[e IS "PERSONKNOWSPERSON"]->* (dst IS "PERSON")
    WHERE src."FIRSTNAME" = 'Scott'
    COLUMNS (
	VERTEX_ID(dst) AS person_id,
	dst."FIRSTNAME" AS person_firstname,
	dst."LASTNAME" AS person_lastname
    )
)

Requêtes intermittentes

Il a été démontré que les LLM ont du mal à traduire des requêtes qui nécessitent plusieurs opérateurs GRAPH_TABLE. Voici quelques exemples :

Invite : Show people who have liked all the same posts as Hans

SELECT person_id, person_name
FROM GRAPH_TABLE("PERSON_GRAPH"
  MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST"),
	(other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post)
  WHERE hans."FIRSTNAME" = 'Hans'
  COLUMNS (VERTEX_ID(other_person) as person_id, other_person."FIRSTNAME" AS person_name)
)
WHERE NOT EXISTS (
  SELECT 1
  FROM GRAPH_TABLE("PERSONGRAPH"
    MATCH (hans is "PERSON") -[likes_hans is "PERSONLIKESPOST"]-> (post is "POST")
    WHERE hans."FIRSTNAME" = 'Hans'
    COLUMNS (VERTEX_ID(post) as post_id)
  ) hans_posts
  LEFT JOIN GRAPH_TABLE("PERSONGRAPH"
    MATCH (other_person is "PERSON") -[likes_other is "PERSONLIKESPOST"]-> (post
 is "POST")
    COLUMNS (VERTEX_ID(post) as post_id)
  ) other_posts
  ON hans_posts.post_id = other_posts.post_id
  WHERE other_posts.post_id IS NULL
)
Exemple : correspondance de modèles de chemin récursif avec des limites définies.

Invite : Find all names of the people that can be reached in a 1 to 3 edge path

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") -[e IS "KNOWS"]->{1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
Exemple : filtrage des données des noeuds le long d'un chemin récursif

Invite : Find all names of the people that can be reached in a 1 to 3 edge path where each person is younger than the next one

SELECT person_name
FROM GRAPH_TABLE("ADB_USER"."PERSON_GRAPH"
    MATCH (start_person IS "PERSON") ((v1 IS "PERSON") -[e IS "KNOWS"]-> (v2 IS"PERSON") WHERE v1."AGE" < v2."AGE"){1,3} (end_person IS "PERSON")
    COLUMNS (end_person."FIRSTNAME" AS person_name))
Exemple : regroupement et agrégation

Les LLM ont souvent du mal à traduire des requêtes qui nécessitent un regroupement et une agrégation. Une erreur courante consiste à placer des agrégations dans la clause COLUMNS au lieu de la clause SELECT.

Invite : Find the average number of posts liked by all the users

SELECT AVG(COUNT(post)) AS average_liked_count
FROM GRAPH_TABLE("PERSON_GRAPH"
MATCH (p IS "PERSON") -[e IS "PERSONLIKESPOST"]-> (post IS "POST")
COLUMNS (VERTEX_ID(p) AS person, VERTEX_ID(post) AS post))
GROUP BY person;