Structured Query Language (SQL) is een complexe taal die inzicht in databases en metadata vereist. Vandaag, generatieve AI kan mensen zonder SQL-kennis inschakelen. Deze generatieve AI-taak wordt tekst-naar-SQL genoemd, die SQL-query's genereert op basis van natuurlijke taalverwerking (NLP) en tekst omzet in semantisch correcte SQL. De oplossing in dit bericht is bedoeld om bedrijfsanalyseactiviteiten naar een hoger niveau te tillen door het pad naar uw gegevens te verkorten met behulp van natuurlijke taal.
Met de opkomst van grote taalmodellen (LLM's) heeft de op NLP gebaseerde SQL-generatie een aanzienlijke transformatie ondergaan. LLM's demonstreren uitzonderlijke prestaties en zijn nu in staat nauwkeurige SQL-query's te genereren op basis van beschrijvingen in natuurlijke taal. Er blijven echter nog steeds uitdagingen bestaan. Ten eerste is menselijke taal inherent dubbelzinnig en contextafhankelijk, terwijl SQL nauwkeurig, wiskundig en gestructureerd is. Deze kloof kan resulteren in een onnauwkeurige conversie van de behoeften van de gebruiker naar de SQL die wordt gegenereerd. Ten tweede moet u mogelijk voor elke database tekst-naar-SQL-functies bouwen, omdat gegevens vaak niet in één doel worden opgeslagen. Mogelijk moet u voor elke database de mogelijkheid opnieuw creëren om gebruikers in staat te stellen op NLP gebaseerde SQL-generatie mogelijk te maken. Ten derde neemt de complexiteit toe, ondanks de grotere acceptatie van gecentraliseerde analyseoplossingen zoals datalakes en magazijnen, met verschillende tabelnamen en andere metagegevens die nodig zijn om de SQL voor de gewenste bronnen te creëren. Daarom blijft het verzamelen van uitgebreide en hoogwaardige metadata ook een uitdaging. Zie voor meer informatie over best practices en ontwerppatronen voor tekst-naar-SQL Waarde genereren uit bedrijfsgegevens: best practices voor Text2SQL en generatieve AI.
Onze oplossing is bedoeld om deze uitdagingen aan te pakken met behulp van Amazonebodem en AWS Analytics-diensten. We gebruiken Antropische Claude v2.1 op Amazon Bedrock als onze LLM. Om de uitdagingen aan te pakken, integreert onze oplossing eerst de metadata van de gegevensbronnen binnen de AWS-lijmgegevenscatalogus om de nauwkeurigheid van de gegenereerde SQL-query te vergroten. De workflow omvat ook een laatste evaluatie- en correctielus, voor het geval er SQL-problemen worden geïdentificeerd Amazone Athene, die stroomafwaarts wordt gebruikt als de SQL-engine. Athena stelt ons ook in staat een groot aantal te gebruiken ondersteunde eindpunten en connectoren om een groot aantal gegevensbronnen te bestrijken.
Nadat we de stappen hebben doorlopen om de oplossing te bouwen, presenteren we de resultaten van enkele testscenario's met verschillende SQL-complexiteitsniveaus. Ten slotte bespreken we hoe u eenvoudig verschillende gegevensbronnen in uw SQL-query's kunt opnemen.
Overzicht oplossingen
Er zijn drie cruciale componenten in onze architectuur: Retrieval Augmented Generation (RAG) met database-metagegevens, een meerstaps zelfcorrectielus en Athena als onze SQL-engine.
We gebruiken de RAG-methode om de tabelbeschrijvingen en schemabeschrijvingen (kolommen) op te halen uit de AWS Glue-metastore om ervoor te zorgen dat het verzoek gerelateerd is aan de juiste tabel en datasets. In onze oplossing hebben we voor demonstratiedoeleinden de afzonderlijke stappen gebouwd om een RAG-framework uit te voeren met de AWS Glue Data Catalog. Je kunt echter ook gebruiken kennisbanken in Amazon Bedrock om snel RAG-oplossingen te bouwen.
Dankzij de uit meerdere stappen bestaande component kan de LLM de gegenereerde SQL-query corrigeren op nauwkeurigheid. Hier wordt de gegenereerde SQL verzonden vanwege syntaxisfouten. We gebruiken Athena-foutmeldingen om onze vraag naar de LLM te verrijken voor nauwkeurigere en effectievere correcties in de gegenereerde SQL.
Je kunt de foutmeldingen die af en toe van Athena komen, beschouwen als feedback. De kostenimplicaties van een foutcorrectiestap zijn verwaarloosbaar in vergelijking met de geleverde waarde. U kunt deze corrigerende stappen zelfs opnemen als versterkte leervoorbeelden onder toezicht om uw LLM's te verfijnen. Omwille van de eenvoud hebben we deze stroom echter niet in onze post behandeld.
Houd er rekening mee dat er altijd een inherent risico bestaat op onnauwkeurigheden, wat uiteraard gepaard gaat met generatieve AI-oplossingen. Zelfs als Athena-foutmeldingen zeer effectief zijn om dit risico te beperken, kunt u meer controles en weergaven toevoegen, zoals menselijke feedback of voorbeeldvragen voor verfijning, om dergelijke risico's verder te minimaliseren.
Met Athena kunnen we niet alleen de SQL-query's corrigeren, maar het vereenvoudigt ook het algehele probleem voor ons omdat het als hub dient, waarbij de spaken meerdere gegevensbronnen zijn. Toegangsbeheer, SQL-syntaxis en meer worden allemaal afgehandeld via Athena.
Het volgende diagram illustreert de oplossingsarchitectuur.
De processtroom omvat de volgende stappen:
- Maak de AWS Glue-gegevenscatalogus met behulp van een AWS Glue-crawler (of een andere methode).
- De Titan-Text-Embeddings-model op Amazon Bedrock, converteer de metagegevens naar inbedding en sla deze op in een Amazon OpenSearch Serverloos vector winkel, die dient als onze kennisbasis in ons RAG-framework.
In dit stadium is het proces klaar om de vraag in natuurlijke taal te ontvangen. Stappen 7–9 vertegenwoordigen, indien van toepassing, een correctielus.
- De gebruiker voert zijn vraag in natuurlijke taal in. U kunt elke webtoepassing gebruiken om de chat-gebruikersinterface te bieden. Daarom hebben we de UI-details in ons bericht niet behandeld.
- De oplossing past een RAG-framework toe via gelijkenis zoeken, die de extra context uit de metagegevens uit de vectordatabase toevoegt. Deze tabel wordt gebruikt voor het vinden van de juiste tabel, database en attributen.
- De query wordt samengevoegd met de context en verzonden naar Antropische Claude v2.1 op Amazon Bedrock.
- Het model haalt de gegenereerde SQL-query op en maakt verbinding met Athena om de syntaxis te valideren.
- Als Athena een foutmelding geeft waarin wordt vermeld dat de syntaxis onjuist is, gebruikt het model de fouttekst uit het antwoord van Athena.
- De nieuwe prompt voegt het antwoord van Athena toe.
- Het model creëert de gecorrigeerde SQL en vervolgt het proces. Deze iteratie kan meerdere keren worden uitgevoerd.
- Ten slotte voeren we de SQL uit met Athena en genereren we uitvoer. Hier wordt de uitvoer aan de gebruiker gepresenteerd. Omwille van de architectonische eenvoud hebben we deze stap niet getoond.
Voorwaarden
Voor deze functie moet u aan de volgende vereisten voldoen:
- Heb een AWS-account.
- Install de AWS-opdrachtregelinterface (AWS CLI).
- Stel de SDK voor Python (Boto3).
- Maak de AWS Glue-gegevenscatalogus met behulp van een AWS Glue-crawler (of een andere methode).
- De Titan-Text-Embeddings-model op Amazon Bedrock, converteer de metagegevens naar insluitingen en sla deze op in een OpenSearch Serverless vector winkel.
Implementeer de oplossing
U kunt het volgende gebruiken Jupyter notitieboek, dat alle codefragmenten in deze sectie bevat, om de oplossing te bouwen. Wij raden aan om te gebruiken Amazon SageMaker Studio om dit notebook te openen met een ml.t3.medium-instantie met de Python 3 (Data Science)-kernel. Voor instructies, zie Train een Machine Learning-model. Voer de volgende stappen uit om de oplossing in te stellen:
- Creëer de kennisbank in OpenSearch Service voor het RAG-framework:
- Bouw de prompt (
final_question
) door de gebruikersinvoer in natuurlijke taal te combineren (user_query
), de relevante metagegevens uit het vectorarchief (vector_search_match
), en onze instructies (details
): - Roep Amazon Bedrock aan voor de LLM (Claude v2) en vraag deze om de SQL-query te genereren. In de volgende code worden meerdere pogingen ondernomen om de zelfcorrectiestap te illustreren:x
- Als er problemen optreden met de gegenereerde SQL-query (
{sqlgenerated}
) uit het antwoord van Athena ({syntaxcheckmsg}
), de nieuwe prompt (prompt
) wordt gegenereerd op basis van het antwoord en het model probeert opnieuw de nieuwe SQL te genereren: - Nadat de SQL is gegenereerd, wordt de Athena-client aangeroepen om de uitvoer uit te voeren en te genereren:
Test de oplossing
In deze sectie voeren we onze oplossing uit met verschillende voorbeeldscenario's om verschillende complexiteitsniveaus van SQL-query's te testen.
Om onze tekst-naar-SQL te testen, gebruiken we er twee datasets beschikbaar via IMDB. Subsets van IMDb-gegevens zijn beschikbaar voor persoonlijk en niet-commercieel gebruik. U kunt de datasets downloaden en daarin opslaan Amazon eenvoudige opslagservice (Amazone S3). U kunt het volgende Spark SQL-fragment gebruiken om tabellen te maken in AWS Glue. Voor dit voorbeeld gebruiken we title_ratings
en title
:
Bewaar gegevens in Amazon S3 en metadata in AWS Glue
In dit scenario wordt onze dataset opgeslagen in een S3-bucket. Athena heeft een S3-connector waarmee je Amazon S3 kunt gebruiken als gegevensbron die kan worden opgevraagd.
Voor onze eerste vraag geven we de invoer “Ik ben nieuw hier. Kun je me helpen alle tabellen en kolommen in het imdb-schema te zien?
Het volgende is de gegenereerde query:
De volgende schermafbeelding en code tonen onze uitvoer.
Voor onze tweede vraag vragen we: “Toon mij alle titels en details in de Amerikaanse regio waarvan de beoordeling hoger is dan 9.5.”
Het volgende is onze gegenereerde query:
Het antwoord luidt als volgt.
Voor onze derde vraag voeren we 'Geweldige respons! Laat me nu alle originele typetitels zien met een beoordeling van meer dan 7.5 en niet in de Amerikaanse regio.
De volgende query wordt gegenereerd:
We krijgen de volgende resultaten.
Genereer zelfgecorrigeerde SQL
Dit scenario simuleert een SQL-query met syntaxisproblemen. Hier wordt de gegenereerde SQL zelf gecorrigeerd op basis van het antwoord van Athena. In het volgende antwoord gaf Athena een COLUMN_NOT_FOUND
fout en vermeldde dat table_description
kan niet worden opgelost:
De oplossing gebruiken met andere gegevensbronnen
Als u de oplossing met andere gegevensbronnen wilt gebruiken, handelt Athena de klus voor u af. Om dit te doen, gebruikt Athena gegevensbronconnectoren waarmee gebruikt kan worden federatieve zoekopdrachten. U kunt een connector beschouwen als een uitbreiding van de Athena-query-engine. Er bestaan vooraf gebouwde Athena-gegevensbronconnectoren voor gegevensbronnen zoals Amazon CloudWatch-logboeken, Amazon DynamoDB, Amazon DocumentDB (met MongoDB-compatibiliteit) en Amazon relationele databaseservice (Amazon RDS) en JDBC-compatibele relationele gegevensbronnen zoals MySQL en PostgreSQL onder de Apache 2.0-licentie. Nadat u een verbinding met een gegevensbron tot stand hebt gebracht, kunt u de voorgaande codebasis gebruiken om de oplossing uit te breiden. Voor meer informatie, zie Query's uitvoeren op elke gegevensbron met de nieuwe federatieve query van Amazon Athena.
Opruimen
Om de bronnen op te ruimen, kunt u beginnen met uw S3-emmer opruimen waar de gegevens zich bevinden. Tenzij uw toepassing Amazon Bedrock aanroept, zijn er geen kosten aan verbonden. Met het oog op best practices voor infrastructuurbeheer raden we u aan de bronnen te verwijderen die in deze demonstratie zijn gemaakt.
Conclusie
In dit bericht hebben we een oplossing gepresenteerd waarmee u NLP kunt gebruiken om complexe SQL-query's te genereren met een verscheidenheid aan bronnen die door Athena worden ingeschakeld. We hebben ook de nauwkeurigheid van de gegenereerde SQL-query's vergroot via een meerstaps evaluatielus op basis van foutmeldingen van downstream-processen. Daarnaast hebben we de metadata in de AWS Glue Data Catalog gebruikt om rekening te houden met de tabelnamen die in de query via het RAG-framework worden gevraagd. Vervolgens hebben we de oplossing getest in verschillende realistische scenario's met verschillende niveaus van querycomplexiteit. Ten slotte hebben we besproken hoe we deze oplossing kunnen toepassen op verschillende gegevensbronnen die door Athena worden ondersteund.
Amazon Bedrock staat centraal in deze oplossing. Amazon Bedrock kan je helpen bij het bouwen van veel generatieve AI-applicaties. Om aan de slag te gaan met Amazon Bedrock raden wij u aan de onderstaande snelle start te volgen GitHub repo en vertrouwd raken met het bouwen van generatieve AI-toepassingen. Je kunt het ook proberen kennisbanken in Amazon Bedrock om dergelijke RAG-oplossingen snel te bouwen.
Over de auteurs
Sanjeeb Panda is een data- en ML-ingenieur bij Amazon. Met een achtergrond in AI/ML, Data Science en Big Data ontwerpt en ontwikkelt Sanjeeb innovatieve data- en ML-oplossingen die complexe technische uitdagingen oplossen en strategische doelen bereiken voor wereldwijde 3P-verkopers die hun bedrijven op Amazon beheren. Naast zijn werk als Data- en ML-ingenieur bij Amazon is Sanjeeb Panda een fervent foodie- en muziekliefhebber.
Burak Gozluklu is een Principal AI/ML Specialist Solutions Architect gevestigd in Boston, MA. Hij helpt strategische klanten AWS-technologieën en specifiek generatieve AI-oplossingen te adopteren om hun bedrijfsdoelstellingen te bereiken. Burak heeft een PhD in lucht- en ruimtevaarttechniek van METU, een MS in Systems Engineering en een postdoc in systeemdynamica van MIT in Cambridge, MA. Burak is nog steeds een onderzoeksfiliaal bij MIT. Burak heeft een passie voor yoga en meditatie.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoData.Network Verticale generatieve AI. Versterk jezelf. Toegang hier.
- PlatoAiStream. Web3-intelligentie. Kennis versterkt. Toegang hier.
- PlatoESG. carbon, CleanTech, Energie, Milieu, Zonne, Afvalbeheer. Toegang hier.
- Plato Gezondheid. Intelligentie op het gebied van biotech en klinische proeven. Toegang hier.
- Bron: https://aws.amazon.com/blogs/machine-learning/build-a-robust-text-to-sql-solution-generating-complex-queries-self-correcting-and-querying-diverse-data-sources/
- : heeft
- :is
- :niet
- :waar
- $UP
- 1
- 10
- 100
- 11
- 12
- 13
- 14
- 16
- 20
- 2024
- 22
- 23
- 29
- 30
- 32
- 39
- 50
- 500
- 521
- 7
- 8
- 9
- a
- Over
- boven
- toegang
- nauwkeurigheid
- accuraat
- Bereiken
- toevoegen
- Daarnaast
- adres
- Voegt
- adopteren
- Adoptie
- LUCHT- EN RUIMTEVAART
- Affiliate
- Na
- weer
- AI
- AI / ML
- wil
- Lijnt uit
- Alles
- toestaat
- ook
- alternatief
- altijd
- am
- Amazone
- Amazon RDS
- Amazon Web Services
- an
- analytics
- en
- beantwoorden
- antropisch
- elke
- apache
- toepasselijk
- Aanvraag
- toepassingen
- geldt
- Solliciteer
- bouwkundig
- architectuur
- ZIJN
- AS
- vragen
- At
- Atlanta
- poging
- pogingen
- attributen
- aangevuld
- bevoegd
- Beschikbaar
- AWS
- AWS lijm
- achtergrond
- baseren
- gebaseerde
- BE
- omdat
- onder
- BEST
- 'best practices'
- Groot
- Big data
- Blok
- Boston
- brengen
- bouw
- Gebouw
- bebouwd
- bedrijfsdeskundigen
- ondernemingen
- maar
- by
- Dit betekent dat we onszelf en onze geliefden praktisch vergiftigen.
- Cambridge
- CAN
- kan niet
- bekwaamheid
- in staat
- verzorging
- geval
- catalogus
- Centreren
- gecentraliseerde
- uitdagen
- uitdagingen
- de chat
- gecontroleerd
- controleren
- schoon
- cli
- klant
- code
- codebasis
- Het verzamelen van
- Kolom
- columns
- combineren
- komt
- komst
- vergeleken
- vergelijken
- verenigbaarheid
- compleet
- complex
- ingewikkeldheid
- bestanddeel
- componenten
- uitgebreid
- versterken
- verbindt
- Overwegen
- verband
- blijft
- controles
- Camper ombouw
- converteren
- te corrigeren
- gecorrigeerd
- Correcties
- Kosten
- tellen
- deksel
- en je merk te creëren
- aangemaakt
- creëert
- kritisch
- Klanten
- gegevens
- data science
- Database
- databanken
- datasets
- Datum
- datetime
- geleverd
- demonstrating
- Design
- ontwerp patronen
- gewenste
- Niettegenstaande
- gegevens
- ontwikkelen
- diagram
- DEED
- anders
- bespreken
- besproken
- diversen
- do
- docs
- documenten
- Download
- gedurende
- dynamica
- effectief
- anders
- opkomst
- in staat stellen
- ingeschakeld
- Motor
- ingenieur
- Engineering
- verrijken
- verzekeren
- Enter
- Enterprise
- Komt binnen
- enthousiast
- fout
- fouten
- evaluatie
- Zelfs
- Alle
- voorbeeld
- voorbeelden
- uitzonderlijk
- uitvoeren
- bestaan
- bestaand
- Verklaren
- verlengen
- uitbreiding
- extra
- Mislukt
- vals
- Voordelen
- feedback
- finale
- Tot slot
- het vinden van
- Voornaam*
- stroom
- volgen
- volgend
- volgt
- Voor
- Achtergrond
- oppompen van
- verder
- kloof
- gaf
- voortbrengen
- gegenereerde
- genereert
- het genereren van
- generatie
- generatief
- generatieve AI
- krijgen
- krijgt
- Globaal
- Doelen
- kreeg
- Handvaten
- Hebben
- met
- he
- hulp
- helpt
- hier
- hoogwaardige
- zeer
- zijn
- Hoe
- How To
- Echter
- HTML
- http
- HTTPS
- Naaf
- menselijk
- i
- geïdentificeerd
- if
- illustreren
- illustreert
- implicaties
- belangrijk
- in
- onnauwkeurig
- omvatten
- omvat
- nemen
- omvat
- onjuist
- Laat uw omzet
- meer
- index
- individueel
- info
- informatie
- Infrastructuur
- inherent
- inherent
- eerste
- binnenste
- innovatieve
- invoer
- instantie
- instructies
- in
- ingeroepen
- oproept
- kwestie
- problemen
- IT
- herhaling
- Jobomschrijving:
- mee
- jpg
- kennis
- meren
- taal
- Groot
- groter
- LEARN
- leren
- Niveau
- niveaus
- Vergunning
- als
- LIMIT
- Lijn
- LLM
- gelegen
- liefde
- machine
- machine learning
- maken
- MERKEN
- management
- beheren
- veel
- wiskundig
- Mei..
- me
- meditatie
- Medium
- vermeld
- vermeldt
- Bericht
- berichten
- Metadata
- methode
- macht
- verkleinen
- MIT
- Verzachten
- ML
- model
- modellen
- MongoDB
- meer
- MS
- meervoudig
- menigte
- Muziek
- mysql
- naam
- namen
- Naturel
- Natural Language Processing
- Noodzaak
- behoeften
- New
- volgende
- nlp
- niet commercieel
- notitieboekje
- nu
- aantal
- doelstellingen
- of
- vaak
- on
- Slechts
- open
- Operations
- or
- bestellen
- origineel
- Overige
- onze
- uitgang
- buiten
- totaal
- voorbij
- hartstochtelijk
- pad
- patronen
- Mensen
- prestatie
- uitgevoerd
- persoonlijk
- phd
- Plato
- Plato gegevensintelligentie
- PlatoData
- dan
- Post
- postgresql
- praktijken
- voorafgaat
- nauwkeurig
- vereisten
- presenteren
- gepresenteerd
- Principal
- probleem
- processen
- verwerking
- prompts
- zorgen voor
- mits
- biedt
- doeleinden
- Python
- queries
- vraag
- vraag
- Quick
- snel
- citaten
- doek
- waardering
- waarderingen
- Lees
- klaar
- realistisch
- ontvangen
- ontvangen
- adviseren
- verwijzen
- regio
- verwant
- relevante
- blijven
- stoffelijk overschot
- vertegenwoordigen
- te vragen
- nodig
- Voorwaarden
- vereist
- onderzoek
- woont
- oplossen
- opgelost
- Resources
- culturele wortels
- antwoord
- resultaat
- Resultaten
- ophalen
- terugkeer
- rechts
- stijgt
- Risico
- risico's
- robuust
- RIJ
- lopen
- sagemaker
- sake
- dezelfde
- zagen
- scenario
- scenario's
- Wetenschap
- zoeken
- Tweede
- sectie
- zien
- kiezen
- ZELF
- Verkopers
- verzonden
- Serverless
- bedient
- service
- Diensten
- reeks
- moet
- tonen
- tonen
- getoond
- kant
- aanzienlijke
- Eenvoudig
- eenvoud
- vereenvoudigt
- single
- snipper
- oplossing
- Oplossingen
- OPLOSSEN
- sommige
- bron
- bronnen
- Vonk
- specialist
- specifiek
- Stadium
- begin
- gestart
- Land
- Statement
- Status
- Stap voor
- Stappen
- Still
- mediaopslag
- shop
- opgeslagen
- eenvoudig
- strategisch
- Draad
- gestructureerde
- dergelijk
- ondersteunde
- zeker
- syntaxis
- SYS
- system
- Systems
- tafel
- Nemen
- doelwit
- Taak
- Technisch
- Technologies
- proef
- getest
- tekst
- neem contact
- dat
- De
- de hub
- hun
- Ze
- harte
- Er.
- daarom
- Deze
- Derde
- dit
- die
- drie
- Door
- keer
- Titel
- titels
- naar
- vandaag
- Transformatie
- proberen
- twee
- type dan:
- types
- ui
- voor
- ondergaan
- begrip
- tenzij
- bijwerken
- bijgewerkt
- us
- .
- gebruikt
- Gebruiker
- gebruikers
- toepassingen
- gebruik
- BEVESTIG
- waarde
- variëteit
- divers
- wisselende
- via
- .
- Wake
- lopen
- Manier..
- we
- web
- web applicatie
- webservices
- terwijl
- welke
- en
- waarvan
- wil
- Met
- binnen
- zonder
- Mijn werk
- workflow
- schrijven
- het schrijven van
- X
- Yoga
- You
- Your
- jezelf
- zephyrnet