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.
- Clustering privé de manière différentielle pour de vastes ensembles de données.
- Organiser les données non structurées
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:
- Un utilisateur commercial fournit une requête de question en anglais.
- 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).
- 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.
- L’invite et la base de données et la table identifiées sont transmises à la séquence de chaîne 2.
- LangChain établit une connexion à la base de données et exécute la requête SQL pour obtenir les résultats.
- Les résultats sont transmis à l’LLM pour générer une réponse en anglais avec les données.
- 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:
- 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.
- 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
- 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!
Was this article helpful?
93 out of 132 found this helpful
Related articles