Réinventer l’expérience des données Utilisez l’IA générative et l’architecture de données moderne pour débloquer les idées.

Réinventez l'expérience des données avec l'IA générative et une architecture de données moderne pour libérer des idées.

Implémenter une architecture de données moderne offre une méthode évolutive pour intégrer des données provenant de sources disparates. En organisant les données par domaines métiers plutôt que par infrastructure, chaque domaine peut choisir les outils qui conviennent à leurs besoins. Les organisations peuvent maximiser la valeur de leur architecture de données moderne avec des solutions d’IA générative tout en innovant en continu.

Les capacités de langage naturel permettent aux utilisateurs non techniques de interroger les données en anglais conversationnel plutôt qu’en SQL complexe. Cependant, réaliser tous les avantages nécessite de surmonter certains défis. Les modèles d’IA et de langage doivent identifier les sources de données appropriées, générer des requêtes SQL efficaces et produire des réponses cohérentes avec des résultats intégrés à grande échelle. Ils ont également besoin d’une interface utilisateur pour les questions en langage naturel.

Dans l’ensemble, l’implémentation d’une architecture de données moderne et de techniques d’IA générative avec AWS est une approche prometteuse pour extraire et diffuser des informations clés à partir de données diverses et vastes à une échelle d’entreprise. La dernière offre d’IA générative d’AWS est Amazon Bedrock, qui est un service entièrement géré et le moyen le plus simple de créer et de mettre à l’échelle des applications d’IA générative avec des modèles de fondation. AWS propose également des modèles de fondation via Amazon SageMaker JumpStart en tant que points de terminaison d’Amazon SageMaker. La combinaison de grands modèles de langage (LLM), y compris la facilité d’intégration offerte par Amazon Bedrock, et d’une infrastructure de données évolutive et orientée vers les domaines métiers positionne cette solution comme une méthode intelligente pour accéder aux informations abondantes contenues dans diverses bases de données et data lakes d’analyse.

Dans le post, nous présentons un scénario où une entreprise a déployé une architecture de données moderne avec des données résidant sur plusieurs bases de données et API telles que des données juridiques sur Amazon Simple Storage Service (Amazon S3), des ressources humaines sur Amazon Relational Database Service (Amazon RDS), des ventes et du marketing sur Amazon Redshift, des données de marché financier sur une solution de data warehouse tiers sur Snowflake, et des données de produit en tant qu’API. Cette mise en œuvre vise à améliorer la productivité de l’analyse commerciale de l’entreprise, des propriétaires de produits et des experts du domaine commercial. Tout cela est réalisé grâce à l’utilisation de l’IA générative dans cette architecture de maillage de domaine, qui permet à l’entreprise d’atteindre plus efficacement ses objectifs commerciaux. Cette solution offre la possibilité d’inclure des LLM de JumpStart en tant que point de terminaison SageMaker ainsi que des modèles tiers. Nous fournissons aux utilisateurs de l’entreprise une IPGirl pour poser des questions factuelles sans avoir de connaissances sous-jacentes sur les canaux de données, ce qui permet d’abstraire la complexité de l’écriture de requêtes SQL simples à complexes.

Aperçu de la solution

Une architecture de données moderne sur AWS applique l’intelligence artificielle et le traitement du langage naturel pour interroger plusieurs bases de données d’analyse. En utilisant des services tels qu’Amazon Redshift, Amazon RDS, Snowflake, Amazon Athena et AWS Glue, il crée une solution évolutive pour intégrer des données provenant de différentes sources. En utilisant LangChain, une puissante bibliothèque pour travailler avec des LLM, y compris des modèles de fondation d’Amazon Bedrock et JumpStart dans les notebooks d’Amazon SageMaker Studio, un système est construit où les utilisateurs peuvent poser des questions commerciales en anglais naturel et recevoir des réponses avec des données tirées des bases de données pertinentes.

Le diagramme suivant illustre l’architecture.

L’architecture hybride utilise plusieurs bases de données et LLM, avec des modèles de fondation d’Amazon Bedrock et JumpStart pour l’identification des sources de données, la génération de SQL et la génération de texte avec des résultats.

Le diagramme suivant illustre les étapes spécifiques du flux de travail pour notre solution.

Les étapes sont les suivantes:

  1. Un utilisateur commercial fournit une requête de question en anglais.
  2. Un crawler AWS Glue est programmé pour s’exécuter à des intervalles fréquents afin d’extraire les métadonnées des bases de données et de créer des définitions de table dans le catalogue de données AWS Glue. Le Catalogue de données est entré dans la séquence de chaîne 1 (voir le diagramme précédent).
  3. LangChain, un outil pour travailler avec des LLM et des invites, est utilisé dans les notebooks Studio. LangChain requiert qu’un LLM soit défini. Dans le cadre de la séquence de chaîne 1, l’invite et les métadonnées du Catalogue de données sont transmises à un LLM, hébergé sur un point de terminaison SageMaker, pour identifier la base de données et la table pertinente à l’aide de LangChain.
  4. L’invite et la base de données et la table identifiées sont transmises à la séquence de chaîne 2.
  5. LangChain établit une connexion à la base de données et exécute la requête SQL pour obtenir les résultats.
  6. Les résultats sont transmis à l’LLM pour générer une réponse en anglais avec les données.
  7. L’utilisateur reçoit une réponse en anglais à leur invite, interrogeant des données provenant de différentes bases de données.

Ces sections suivantes expliquent certaines des étapes clés avec le code associé. Pour plonger plus profondément dans la solution et le code pour toutes les étapes présentées ici, consultez le référentiel GitHub. Le diagramme suivant montre la séquence des étapes suivies:

Prérequis

Vous pouvez utiliser n’importe quelle base de données compatible avec SQLAlchemy pour générer des réponses à partir de LLM et de LangChain. Cependant, ces bases de données doivent avoir leurs métadonnées enregistrées dans le catalogue de données AWS Glue. De plus, vous devrez avoir accès à LLM via JumpStart ou des clés API.

Se connecter aux bases de données à l’aide de SQLAlchemy

LangChain utilise SQLAlchemy pour se connecter aux bases de données SQL. Nous initialisons la fonction SQLDatabase de LangChain en créant un moteur et en établissant une connexion pour chaque source de données. Voici un exemple de connexion à une base de données sans serveur Amazon Aurora compatible avec MySQL et ne contenant que la table des employés:

# Connexion à AWS Aurora MySQL
cluster_arn = <cluster_arn>
secret_arn = <secret_arn>
engine_rds=create_engine('mysql+auroradataapi://:@/employees',echo=True,
  connect_args=dict(aurora_cluster_arn=cluster_arn, secret_arn=secret_arn))
dbrds = SQLDatabase(engine_rds, include_tables=['employees'])

Ensuite, nous construisons des invites utilisées par Chain Sequence 1 pour identifier la base de données et le nom de la table en fonction de la question de l’utilisateur.

Générer des modèles d’invite dynamiques

Nous utilisons le catalogue de données AWS Glue, conçu pour stocker et gérer les informations de métadonnées, pour identifier la source de données pour une requête utilisateur et construire des invites pour la séquence de chaîne 1, comme détaillé dans les étapes suivantes:

  1. Nous construisons un catalogue de données en parcourant les métadonnées de plusieurs sources de données à l’aide de la connexion JDBC utilisée dans la démonstration.
  2. Avec la bibliothèque Boto3, nous construisons une vue consolidée du catalogue de données à partir de plusieurs sources de données. Voici un exemple de récupération des métadonnées de la table des employés dans le catalogue de données pour la base de données Aurora MySQL:
 # Récupérer les métadonnées du catalogue de données Glue
  glue_tables_rds = glue_client.get_tables(DatabaseName=<database_name>, MaxResults=1000)
    for table in glue_tables_rds['TableList']:
        for column in table['StorageDescriptor']['Columns']:
             columns_str=columns_str+'\n'+('rdsmysql|employees|'+table['Name']+"|"+column['Name'])

Un catalogue de données consolidé contient des détails sur la source de données, tels que le schéma, les noms de table et les noms de colonne. Voici un exemple de sortie du catalogue de données consolidé:

database|schema|table|column_names
redshift|tickit|tickit_sales|listid
rdsmysql|employees|employees|emp_no
....
s3|none|claims|policy_id
  1. Nous transmettons le catalogue de données consolidé au modèle d’invite et définissons les invites utilisées par LangChain:
prompt_template = """
From the table below, find the database (in column database) which will contain the data (in corresponding column_names) to answer the question {query} \n
"""+glue_catalog +""" Give your answer as database == \n Also,give your answer as database.table =="""

Séquence de chaîne 1: Détecter les métadonnées de la source pour la requête de l’utilisateur en utilisant LangChain et un LLM

Nous transmettons le modèle d’invite généré à l’étape précédente à l’invite, ainsi que la requête de l’utilisateur au modèle LangChain, pour trouver la meilleure source de données pour répondre à la question. LangChain utilise le modèle LLM de notre choix pour détecter les métadonnées de la source.

Utilisez le code suivant pour utiliser un LLM de JumpStart ou des modèles tiers:

# Définir votre modèle LLM ici
llm = <LLM>
# Transmettre le modèle d'invite et la requête de l'utilisateur à l'invite
PROMPT = PromptTemplate(template=prompt_template, input_variables=["query"])
# Définir la chaîne LLM
llm_chain = LLMChain(prompt=PROMPT, llm=llm)
# Exécuter la requête et enregistrer dans les textes générés
generated_texts = llm_chain.run(query)

Le texte généré contient des informations telles que les noms de la base de données et de la table contre lesquels la requête utilisateur est exécutée. Par exemple, pour la requête utilisateur “Nommez tous les employés dont la date de naissance est ce mois-ci”, generated_text contient les informations database == rdsmysql et database.table == rdsmysql.employees.

Ensuite, nous transmettons les détails du domaine des ressources humaines, de la base de données Aurora MySQL et de la table des employés à la chaîne de séquence 2.

Chaîne de séquence 2 : Récupération des réponses des sources de données pour répondre à la requête utilisateur

Ensuite, nous exécutons la chaîne SQL de LangChain pour convertir le texte en SQL et exécuter implicitement le SQL généré contre la base de données pour récupérer les résultats de la base de données dans un langage simple et lisible.

Nous commençons par définir un modèle de prompt qui indique à LLM de générer du SQL dans un dialecte syntaxiquement correct, puis de l’exécuter contre la base de données :

_DEFAULT_TEMPLATE = """Given an input question, first create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer.
Only use the following tables:
{table_info}
If someone asks for the sales, they really mean the tickit.sales table.
Question: {input}"""
#define the prompt
PROMPT = PromptTemplate( input_variables=["input", "table_info", "dialect"], template=_DEFAULT_TEMPLATE)

Enfin, nous passons LLM, la connexion à la base de données et le prompt à la chaîne de base de données SQL et exécutons la requête SQL :

db_chain = SQLDatabaseChain.from_llm(llm, db, prompt=PROMPT)
response=db_chain.run(query)

Par exemple, pour la requête utilisateur “Nommez tous les employés dont la date de naissance est ce mois-ci”, la réponse est la suivante :

Question: Name all employees with birth date this month

SELECT * FROM employees WHERE MONTH(birth_date) = MONTH(CURRENT_DATE());

User Response:
The employees with birthdays this month are:
Christian Koblick
Tzvetan Zielinski

Nettoyage

Après avoir exécuté l’architecture de données moderne avec l’IA générative, assurez-vous de nettoyer les ressources qui ne seront pas utilisées. Fermez et supprimez les bases de données utilisées (Amazon Redshift, Amazon RDS, Snowflake). De plus, supprimez les données dans Amazon S3 et arrêtez toutes les instances de notebook Studio pour ne pas encourir de frais supplémentaires. Si vous avez utilisé JumpStart pour déployer un LLM en tant que point de terminaison en temps réel SageMaker, supprimez le point de terminaison via la console SageMaker ou Studio.

Conclusion

Dans cet article, nous avons intégré une architecture de données moderne avec une IA générative et des LLM dans SageMaker. Cette solution utilise divers modèles de fondation de texte à texte de JumpStart ainsi que des modèles tiers. Cette approche hybride identifie les sources de données, écrit des requêtes SQL et génère des réponses avec les résultats de la requête. Elle utilise Amazon Redshift, Amazon RDS, Snowflake et LLM. Pour améliorer la solution, vous pourriez ajouter plus de bases de données, une interface utilisateur pour les requêtes en anglais, l’ingénierie de prompt et des outils de données. Cela pourrait devenir un moyen intelligent et unifié d’obtenir des informations à partir de plusieurs magasins de données. Pour approfondir la solution et le code présenté dans cet article, consultez le référentiel GitHub. Consultez également Amazon Bedrock pour des cas d’utilisation sur l’IA générative, les modèles de fondation et les grands modèles de langage.

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Related articles

    Science des données

    Science des données

    Libérez le potentiel des données avec l'art et la science de la science des données.

      Discover more

      Science des données

      Explication des bases de données vectorielles en 3 niveaux de difficulté

      Cet article explique les bases de données vectorielles, depuis l'intuition jusqu'à certains exemples et détails techn...

      AI

      Comment l'IA perturbe-t-elle la gouvernance des données?

      L'IA générative a déjà commencé à secouer le monde de la gouvernance des données, et elle continuera probablement de ...

      AI

      Analyse de la complexité des séries temporelles à l'aide de l'entropie

      Tout data scientist le sait la première étape pour résoudre un problème d'apprentissage automatique est l'exploratio...

      Science des données

      Est-ce que ChatGPT remplacera les Data Scientists ?

      Chaque emploi est en danger. Voici comment vous pouvez sécuriser votre carrière face à l'IA.

      AI

      De brut à raffiné Un voyage à travers la prétraitement des données - Partie 3 Données en double

      La présence de valeurs en double dans les données est souvent ignorée par de nombreux programmeurs. Cependant, traite...

      AI

      Travailler avec MS SQL Server en Julia

      Les bases de données SQL sont l'un des logiciels les plus largement déployés dans le monde. Elles constituent la colo...