Comment passer du texte à SQL avec LLMS






Image de l’auteur | Toile
Avec de grands modèles Lagnuage (LLMS), tout le monde est un codeur aujourd’hui! Ceci est un message que vous recevez des documents promotionnels LLM. Ce n’est évidemment pas vrai, comme toute annonce. Le codage est bien plus que de produire du code à une vitesse vertigineuse. Cependant, la traduction de l’anglais (ou d’autres langues naturelles) en requêtes SQL exécutables est l’une des utilisations les plus convaincantes des LLM, et il a sa place dans le monde.
# Pourquoi utiliser LLMS pour générer SQL?
Il y a plusieurs avantages à utiliser les LLM pour générer des SQL et, comme pour tout, il y a aussi quelques inconvénients.
# Deux types de Text-to-SQL LLMS
Nous pouvons faire la distinction entre deux très larges types de technologies de texte à SQL actuellement disponibles concernant leur accès à votre schéma de base de données.
- LLMS sans accès direct
- LLMS avec accès direct
// 1. LLMS sans accès direct au schéma de base de données
Ces LLM ne se connectent pas ou ne font pas de requêtes par rapport à la base de données réelle. Le plus proche possible consiste à télécharger les ensembles de données que vous souhaitez interroger. Ces outils reposent sur vous en fournissant un contexte sur votre schéma.
Exemples d’outils:
Cas d’utilisation:
- Requête et prototypage de requête
- Apprentissage et enseignement
- Génération de code statique pour une revue ultérieure
// 2. LLMS avec un accès direct au schéma de base de données
Ces LLM se connectent directement à vos sources de données en direct, telles que Postgresql, Flocon de neige, Grosseryou Décalage vers le rouge. Ils vous permettent de générer, d’exécuter et de retourner les résultats de SQL Queries en direct sur votre base de données.
Exemples d’outils:
Cas d’utilisation:
- Analyse conversationnelle pour les utilisateurs professionnels
- Exploration des données en temps réel
- Assistants IA intégrés dans les plates-formes BI
# Étape par étape: comment passer du texte à SQL
Le flux de travail de base de l’obtention de SQL à partir du texte est similaire, que vous utilisiez des LLM déconnectés ou connectés.
Nous essaierons de résoudre un Question d’entrevue de Shopify et Amazon Utilisation des étapes ci-dessus dans Chatgpt.
// 1. Définissez le schéma
Pour que la requête fonctionne sur vos données, le LLM doit comprendre clairement votre structure de données. Cela englobe généralement:
- Noms de table
- Noms et types de colonnes
- Relations entre les tables (jointures, clés)
Ces informations peuvent être transmises directement dans l’invite ou peuvent être récupérées en utilisant dynamiquement Recherche vectorielle dans la génération auprès de la récupération (RAG) pipeline.
// 2. Invite avec un langage naturel
L’invite comprendra généralement deux segments:
- Définition du schéma
- Question pour laquelle nous avons besoin d’une réponse SQL
Exemple: Permettez-moi d’abord de vous fournir une structure rapide qui inclut les espaces réservés. Nous rédigerons ensuite une invite réelle.
Nous utiliserons jeu de rôlece qui signifie demander à Chatgpt d’assumer un rôle spécifique.
Voici comment structurer l’invite.
Dataset: My dataset consists of (number of tables) tables.
The first one is (table “” not found /)
with the following columns and data types:
(column names and data types)
The second table is (table “” not found /)
with the following columns and data types:
(column names and data types)
Question: (provide a question to be answered)
Assumptions: (provide assumptions for solving the question)
Role: (describe a role LLM has to play)
Écrivons maintenant une invite réelle qui résout nos questions d’entrevue.
Le voici, et nous espérons qu’il fournira une solution SQL correcte. Les noms de colonne, les types de données, les questions et les hypothèses sont simplement collés à partir de la question elle-même.
Dataset: My dataset consists of two tables.
The first one is "customers" with the following columns and data types:
address:
text
city:
text
first_name:
text
id:
bigint
last_name:
text
phone_number:
text
The second table is "orders" with the following columns and data types:
cust_id:
bigint
id:
bigint
order_date:
date
order_details:
text
total_order_cost:
bigint
Question: Find the customers with the highest daily total order cost between 2019-02-01 and 2019-05-01. If a customer had more than one order on a certain day, sum the order costs on a daily basis. Output each customer's first name, total cost of their items, and the date.
Assumption: For simplicity, you can assume that every first name in the dataset is unique.
Role: Act as a SQL expert and write a PostgreSQL query that answers the question.
// 3. Générez la requête SQL
À ce stade, le LLM de votre choix génère la requête SQL.
Exemple: Voici le code postgresql Produit pour nous.
SELECT
c.first_name,
daily_totals.order_date,
daily_totals.total_cost
FROM (
SELECT
cust_id,
order_date,
SUM(total_order_cost) AS total_cost
FROM orders
WHERE order_date BETWEEN '2019-02-01' AND '2019-05-01'
GROUP BY cust_id, order_date
) AS daily_totals
JOIN customers c ON c.id = daily_totals.cust_id
WHERE (daily_totals.cust_id, daily_totals.order_date) IN (
SELECT
cust_id,
order_date
FROM (
SELECT
cust_id,
order_date,
SUM(total_order_cost) AS total_cost,
RANK() OVER (ORDER BY SUM(total_order_cost) DESC) AS rnk
FROM orders
WHERE order_date BETWEEN '2019-02-01' AND '2019-05-01'
GROUP BY cust_id, order_date
) ranked
WHERE rnk = 1
);
// 4. Exécuter la requête
Maintenant, vous pouvez exécuter la requête, que ce soit directement (si votre LLM prend en charge les connexions en direct) ou en la copie et en l’exécutant dans votre système de base de données.
Exemple: Dans notre cas, nous copierons le code dans l’éditeur de code Stratascratch et utiliserons le bouton «Vérifier la solution» pour valider la solution.
C’est ce qu’il publie, et c’est une solution correcte. Bravo pour chatgpt! Il l’a cloué lors du premier essai!
prénom | order_date | total_cost |
---|---|---|
Jill | 2019-04-19 | 275 |
Marque | 2019-04-19 | 275 |
// 5. Examiner, visualiser et affiner
Selon l’objectif de l’utilisation de LLMS pour écrire du code SQL, cette étape peut être facultative. Dans le monde des affaires, vous présentez généralement la sortie de la requête dans un format convivial, ce qui implique généralement:
- Montrant les résultats en tant que table et / ou graphique
- Autoriser les exigences de suivi (par exemple, « pouvez-vous inclure la ville client? ») Et fournir la question modifiée et la sortie
# Pièges et meilleures pratiques
Dans notre exemple, Chatgpt a immédiatement trouvé la bonne réponse. Cependant, cela ne signifie pas que cela le fait toujours, surtout lorsque les données et les exigences deviennent plus compliquées. L’utilisation de LLMS pour obtenir des requêtes SQL à partir du texte n’est pas sans pièges. Vous pouvez les éviter en appliquant des meilleures pratiques si vous souhaitez faire de la génération de requête LLM une partie de votre flux de travail de science des données.
# Conclusion
Les LLM peuvent être votre meilleur ami lorsque vous souhaitez créer des requêtes SQL à partir de texte. Cependant, pour tirer le meilleur parti de ces outils, vous devez avoir une compréhension claire de ce que vous voulez réaliser et des cas d’utilisation où l’utilisation de LLMS est bénéfique.
Cet article vous fournit de telles directives, ainsi qu’un exemple de la façon d’inviter un LLM en langage naturel et d’obtenir un code SQL fonctionnel.
Nate Rosidi est un scientifique des données et en stratégie de produit. Il est également professeur auxiliaire qui enseigne l’analyse et est le fondateur de Stratascratch, une plate-forme aidant les scientifiques des données à se préparer à leurs entretiens avec de véritables questions d’entrevue de grandes entreprises. Nate écrit sur les dernières tendances du marché de la carrière, donne des conseils d’entrevue, partage des projets de science des données et couvre tout SQL.
Source link