Découvertes des questions-réponses avec les données d’entreprise utilisant GenAI pour Oracle Autonomous Database / Blogs / Perficient

L’IA en langage naturel a proliféré dans de nombreuses applications et plates-formes actuelles. L’un des cas d’utilisation les plus demandés est la capacité à trouver des réponses rapides aux questions sur ce qui est caché dans les données organisationnelles, telles que les données opérationnelles, financières ou autres. Par conséquent, tirer parti des dernières avancées dans l’espace GenAI avec les entrepôts de données d’entreprise présente des avantages précieux. La fonctionnalité SelectAI d’Oracle Autonomous Database (ADB) atteint ce résultat. Il élimine la complexité liée à l’exploitation de divers modèles d’IA en grand langage (LLM) à partir de la base de données elle-même. Du point de vue de l’utilisateur final, SelectAI est aussi simple que de poser la question, sans avoir à se soucier de la génération d’invites GenAI, de la modélisation des données ou du réglage fin du LLM.
Dans cet article, je résumerai mes conclusions sur la mise en œuvre d’ADB SelectAI et partagerai quelques conseils sur ce qui a le mieux fonctionné et ce qu’il faut surveiller lors de la planification de votre mise en œuvre.
Plusieurs modèles GenAI : lequel utiliser ?
Ce que j’aime chez SelectAI, c’est que changer de modèle GenAI sous-jacent est simple. Ceci est important au fil du temps pour rester à jour et profiter des dernières et meilleures offres des LLM et au coût le plus approprié. Nous pouvons également configurer SelectAI avec plusieurs LLM simultanément, par exemple, pour répondre à différents groupes d’utilisateurs, à différents niveaux de service. À l’avenir, il y aura toujours un meilleur modèle LLM à utiliser, mais pour le moment, ces résultats sont basés sur des essais du modèle Cohere Command partagé d’Oracle Cloud Infrastructure (OCI), du modèle OpenAI GPT-3.5-Turbo et de l’OpenAI GPT. -4 modèle. Voici un résumé de la façon dont chacun a fonctionné :
- Cohérer la commande: Bien que ce modèle ait bien fonctionné pour des questions simples bien formulées avec des noms liés aux métadonnées, il n’a pas bien fonctionné lorsque la question est devenue plus complexe. Il n’a pas donné de mauvaise réponse, mais a plutôt renvoyé le message suivant s’excusant de l’impossibilité de générer une réponse : « Désolé, malheureusement, une instruction SELECT valide n’a pas pu être générée… ». Au moment d’écrire ces lignes, le modèle Command R+ vient d’être introduit et est devenu généralement disponible, mais il n’a pas été tenté dans le cadre de cet exercice. Il reste à découvrir dans quelle mesure le nouveau modèle R+ est plus efficace par rapport aux autres.
- OpenAI GPT-4: Ce LLM a fonctionné beaucoup mieux que Cohere Command dans la mesure où il a répondu à toutes les questions que Command ne pouvait pas répondre. Cependant, cela coûte plus cher.
- OpenAI GPT-3.5-Turbo: Celui-ci est mon préféré dans la mesure où il répond également à toutes les questions que Command ne pouvait pas poser et est environ 50 fois moins cher que GPT-4. Il est également beaucoup plus rapide de répondre par rapport au Cohere Command partagé par OCI. Il y a cependant parfois eu des différences dans la manière dont les réponses sont présentées. Voici un exemple de ce que je veux dire :
Exemple de question : comparez les ventes pour la taille de package P entre les canaux directs et indirects
Réponses générées par chaque modèle :
- Cohérer la commande: Désolé, malheureusement, une instruction SELECT valide n’a pas pu être générée
- OpenAI gpt-3.5-turbo: Cela a permis de générer un bon ensemble de résultats basé sur la requête suivante, mais les résultats n’ont pas été automatiquement regroupés de manière concise.
SELECT s.PROD_ID, s.AMOUNT_SOLD, s.QUANTITY_SOLD, s.CHANNEL_ID, p.PROD_PACK_SIZE, c.CHANNEL_CLASS
FROM ADW_USER.SALES_V s
JOIN ADW_USER.CHANNELS_V c ON s.CHANNEL_ID = c.CHANNEL_ID
JOIN ADW_USER.PRODUCTS_V p ON s.PROD_ID = p.PROD_ID
WHERE p.PROD_PACK_SIZE = 'P' AND c.CHANNEL_CLASS IN ('Direct', 'Indirect');
- OpenAI gpt-4 : Cela a fourni la meilleure réponse et les résultats étaient les plus adaptés à la question car ils étaient regroupés par classe de canal pour comparer facilement les ventes.
SELECT c.CHANNEL_CLASS AS Channel_Class, SUM(s.AMOUNT_SOLD) AS Total_Sales
FROM ADW_USER.SALES_V s
JOIN ADW_USER.PRODUCTS_V p ON s.PROD_ID = p.PROD_ID
JOIN ADW_USER.CHANNELS_V c ON s.CHANNEL_ID = c.CHANNEL_ID
WHERE p.PROD_PACK_SIZE = 'P'AND c.CHANNEL_CLASS IN ('Direct', 'Indirect')
GROUP BY c.CHANNEL_CLASS;
Malgré cette différence, la plupart des réponses étaient similaires entre GPT-4 et GPT-3.5-Turbo et c’est pourquoi je recommande de commencer par le 3.5-Turbo et d’expérimenter vos schémas à un coût minime.
Un autre aspect intéressant des modèles OpenAI GPT est qu’ils prennent en charge les questions de type conversationnel à suivre sous la forme d’un fil de discussion. Ainsi, après avoir demandé le total des ventes par région, je peux poser une question de suivi dans la même conversation et dire par exemple « garder uniquement les Amériques ». La requête est mise à jour pour limiter les résultats précédents à ma nouvelle demande.
Conseils pour préparer le schéma pour les questions GenAI
Quel que soit le niveau d’intelligence que vous choisissez pour un modèle LLM, l’expérience d’utilisation de GenAI ne sera agréable que si les schémas de base de données sont bien préparés pour le langage naturel. Grâce à Autonomous Database SelectAI, nous n’avons pas à nous soucier des métadonnées à chaque fois que nous posons une question. Il s’agit d’une configuration initiale qui est effectuée et s’applique à toutes les questions. Voici quelques conseils de préparation de schéma qui font une grande différence dans l’expérience globale de questions-réponses sur les données.
- Objets de schéma sélectifs: limitez SelectAI à opérer sur l’ensemble de tables/vues le plus pertinent de votre ADB. Par exemple, excluez toutes les tables intermédiaires, temporaires ou non pertinentes et activez SelectAI uniquement sur l’ensemble d’objets prêts pour la création de rapports. Ceci est important car SelectAI génère automatiquement l’invite avec les informations de schéma à envoyer au LLM avec la question. L’envoi de métadonnées qui excluent tous les objets de base de données inutiles réduit la portée du LLM à mesure qu’il génère une réponse.
- Jointures de table/vue: Pour obtenir des jointures correctes entre les tables, nommez les colonnes de jointure avec le même nom. Par exemple, SALES.CHANNEL_ID = CHANNELS.CHANNEL_ID. Les contraintes de clé étrangère et les contraintes de clé primaire n’affectent pas la façon dont les tables sont jointes, du moins au moment de la rédaction de cet article. Nous devrons donc nous appuyer sur une dénomination cohérente des colonnes de jointure dans les objets de la base de données.
- Créer des vues de base de données : La création de vues de base de données est très utile pour SelectAI de plusieurs manières.
- Les vues nous permettent de référencer des tables dans d’autres schémas afin que nous puissions configurer SelectAI sur un schéma qui référence des objets dans plusieurs autres schémas.
- Nous pouvons facilement renommer les colonnes afin de les rendre plus significatives pour le traitement du langage naturel.
- Lors de la création d’une vue, nous pouvons exclure les colonnes inutiles qui n’ajoutent pas de valeur à SelectAI et limiter en même temps la taille de l’invite LLM.
- Renommez les colonnes dans les vues afin que les jointures portent des noms de colonnes identiques.
- Commentaires: L’ajout de commentaires fait une énorme différence dans l’efficacité de SelectAI. Voici quelques conseils sur ce qu’il faut faire avec les commentaires :
- Commentaire au niveau de la table/vue : décrivez le type d’informations qu’une table ou une vue contient : Par exemple, une vue appelée « Données démographiques » peut contenir le commentaire suivant : « Contient des informations démographiques sur l’éducation du client, la taille du ménage, la profession et les années d’activité. résidence »
- Commentaire au niveau des colonnes : pour des raisons de sécurité, SelectAI (en mode non-Narrate) n’envoie pas de données au modèle GenAI. Seules les métadonnées sont envoyées. Cela signifie que si un utilisateur pose une question sur une valeur de données spécifique, le LLM n’a pas de visibilité là où elle existe dans la base de données. Pour améliorer l’expérience utilisateur lorsque l’envoi de certaines valeurs de données au LLM ne constitue pas un problème de sécurité, incluez les valeurs de données importantes dans le commentaire. Cela permet au LLM de savoir où se trouvent ces données. Par exemple, voici un commentaire sur une colonne appelée COUNTRY_REGION : « région. certaines valeurs sont l’Asie, l’Afrique, l’Océanie, le Moyen-Orient, l’Europe, les Amériques ». Ou pour une colonne de canal, un commentaire comme celui-ci peut être utile en incluant des valeurs de canal : « description du canal. Par exemple, télévente, internet, catalogue, partenaires”
- Expliquez certaines valeurs de données : Parfois, les valeurs de données sont codées et nécessitent une traduction. Voici un exemple de cas où cela peut être utile : commentez la colonne Products.VALID_FLAG : « indique si un produit est actif. la valeur est A pour actif”
Existe-t-il une meilleure façon de poser une question ?
Bien que les conseils susmentionnés soient adaptés à la configuration administrative initiale de SelectAI, voici quelques conseils pour l’utilisateur final de SelectAI.
- Utilisez des guillemets doubles pour les valeurs de données composées de plusieurs mots : ceci est utile par exemple lorsque nous souhaitons filtrer les données sur des valeurs particulières telles qu’un nom de client ou de produit. Les guillemets aident également à transmettre la sensibilité à la casse d’un mot. Par exemple : quelles sont les ventes totales de « Téléventes » à « New York ».
- Ajoutez l’expression « insensible à la casse » à la fin de votre question pour vous aider à trouver une réponse. Par exemple : « calculer les ventes pour le canal des partenaires sans tenir compte de la casse ». La condition de requête SQL générée dans ce cas est : WHERE UPPER(c.CHANNEL_CLASS) = ‘PARTNERS’, ce qui signifie simplement ignorer le respect de la casse lors de la recherche d’informations sur les partenaires.
- Si les résultats sont filtrés, ajoutez une déclaration comme celle-ci à la fin de la question pour éviter les filtres inutiles : « Ne pas appliquer de condition de filtre ». Cela était plus applicable avec le modèle de commande Cohere qu’avec les modèles OpenAI.
- Par exemple, commencer la question par « requête » au lieu de « qu’est-ce que » fonctionnait mieux avec le modèle de commande Cohere.
- Soyez spécifique à un champ lorsque cela est possible : au lieu de simplement demander des informations par client ou par produit, soyez plus spécifique à un champ tel que « nom du client » ou « catégorie de produit ».
- Ajoutez des instructions supplémentaires à votre question : Vous pouvez faire suivre la question principale de demandes spécifiques par exemple pour filtrer ou renvoyer l’information. Voici un exemple de la façon dont cela peut être fait :
« Quelle est la moyenne des ventes totales par nom de client en Amérique du Nord, regroupées par client. Ne considérez que les ventes directes et les clients ayant plus de 3 ans de résidence et en agriculture. insensible à la casse.
Les résultats sont renvoyés en fonction des éléments suivants qui génèrent automatiquement une requête SQL :
SELECT c.CUST_FIRST_NAME || ' ' || c.CUST_LAST_NAME AS CUSTOMER_NAME, AVG(s.AMOUNT_SOLD)
FROM ADW_USER.SALES_V s JOIN ADW_USER.CUSTOMERS_V c ON s.CUST_ID = c.CUST_ID
JOIN ADW_USER.COUNTRIES_V co ON c.COUNTRY_ID = co.COUNTRY_ID
JOIN ADW_USER.CHANNELS_V ch ON s.CHANNEL_ID = ch.CHANNEL_ID
JOIN ADW_USER.CUSTOMER_DEMOGRAPHICS_V cd ON c.CUST_ID = cd.CUST_ID
WHERE UPPER(co.COUNTRY_SUBREGION) = 'NORTHERN AMERICA'
AND UPPER(ch.CHANNEL_CLASS) = 'DIRECT'
AND cd.YRS_RESIDENCE > 3
AND UPPER(cd.OCCUPATION) = 'FARMING'
GROUP BY c.CUST_FIRST_NAME, c.CUST_LAST_NAME;
Il est impressionnant de voir comment GenAI peut alléger le fardeau de l’entreprise en trouvant des réponses rapides et opportunes aux questions qui peuvent surgir tout au long de la journée, le tout sans risque pour la sécurité des données. Contactez-nous si vous souhaitez libérer la puissance de GenAI pour les données de votre entreprise.
Source link