Structured Query Language (SQL) är ett komplext språk som kräver förståelse för databaser och metadata. I dag, generativ AI kan aktivera människor utan SQL-kunskaper. Denna generativa AI-uppgift kallas text-to-SQL, som genererar SQL-frågor från naturlig språkbehandling (NLP) och omvandlar text till semantiskt korrekt SQL. Lösningen i det här inlägget syftar till att ta företagsanalysverksamheten till nästa nivå genom att förkorta vägen till din data med naturligt språk.
Med framväxten av stora språkmodeller (LLM) har NLP-baserad SQL-generering genomgått en betydande transformation. LLM:er demonstrerar exceptionell prestanda och kan nu generera korrekta SQL-frågor från beskrivningar av naturliga språk. Men det finns fortfarande utmaningar kvar. För det första är det mänskliga språket i sig tvetydigt och kontextberoende, medan SQL är exakt, matematiskt och strukturerat. Denna lucka kan resultera i felaktig konvertering av användarens behov till den SQL som genereras. För det andra kan du behöva bygga text-till-SQL-funktioner för varje databas eftersom data ofta inte lagras i ett enda mål. Du kanske måste återskapa kapaciteten för varje databas för att möjliggöra för användare med NLP-baserad SQL-generering. För det tredje, trots den större användningen av centraliserade analyslösningar som datasjöar och lager, ökar komplexiteten med olika tabellnamn och annan metadata som krävs för att skapa SQL för de önskade källorna. Därför är det fortfarande en utmaning att samla in omfattande och högkvalitativ metadata. För att lära dig mer om text-till-SQL bästa praxis och designmönster, se Generera värde från företagsdata: Bästa metoder för Text2SQL och generativ AI.
Vår lösning syftar till att hantera dessa utmaningar med hjälp av Amazonas berggrund och AWS Analytics-tjänster. Vi använder Antropisk Claude v2.1 på Amazon Bedrock som vår LLM. För att möta utmaningarna, införlivar vår lösning först metadata från datakällorna inom AWS limdatakatalog för att öka noggrannheten i den genererade SQL-frågan. Arbetsflödet inkluderar också en slutlig utvärdering och korrigeringsslinga, om några SQL-problem identifieras av Amazonas Athena, som används nedströms som SQL-motor. Athena låter oss också använda en mängd av stödda ändpunkter och kontakter för att täcka en stor uppsättning datakällor.
Efter att vi gått igenom stegen för att bygga lösningen presenterar vi resultaten av några testscenarier med varierande SQL-komplexitetsnivåer. Slutligen diskuterar vi hur det är enkelt att införliva olika datakällor i dina SQL-frågor.
Lösningsöversikt
Det finns tre kritiska komponenter i vår arkitektur: Retrieval Augmented Generation (RAG) med databasmetadata, en självkorrigeringsloop i flera steg och Athena som vår SQL-motor.
Vi använder RAG-metoden för att hämta tabellbeskrivningar och schemabeskrivningar (kolumner) från AWS Glue-metastore för att säkerställa att begäran är relaterad till rätt tabell och datauppsättningar. I vår lösning byggde vi de individuella stegen för att köra ett RAG-ramverk med AWS Glue Data Catalog för demonstrationsändamål. Men du kan också använda kunskapsbaser i Amazon Bedrock för att snabbt bygga RAG-lösningar.
Flerstegskomponenten tillåter LLM att korrigera den genererade SQL-frågan för noggrannhet. Här skickas den genererade SQL-koden för syntaxfel. Vi använder Athena-felmeddelanden för att berika vår uppmaning till LLM för mer exakta och effektiva korrigeringar i den genererade SQL-koden.
Du kan betrakta felmeddelanden som ibland kommer från Athena som feedback. Kostnadskonsekvenserna av ett felkorrigeringssteg är försumbara jämfört med det levererade värdet. Du kan till och med inkludera dessa korrigerande steg som övervakade exempel på förstärkt lärande för att finjustera dina LLM:er. Vi täckte dock inte detta flöde i vårt inlägg för enkelhets skull.
Observera att det alltid finns en inneboende risk för felaktigheter, vilket naturligtvis kommer med generativa AI-lösningar. Även om Athena-felmeddelanden är mycket effektiva för att minska denna risk, kan du lägga till fler kontroller och vyer, såsom mänsklig feedback eller exempelfrågor för finjustering, för att ytterligare minimera sådana risker.
Athena tillåter oss inte bara att korrigera SQL-frågorna, utan det förenklar också det övergripande problemet för oss eftersom det fungerar som navet, där ekrarna är flera datakällor. Åtkomsthantering, SQL-syntax och mer hanteras alla via Athena.
Följande diagram illustrerar lösningsarkitekturen.
Processflödet inkluderar följande steg:
- Skapa AWS Glue Data Catalog med hjälp av en AWS Glue-crawler (eller en annan metod).
- Använda Titan-Text-Embeddings-modell på Amazon Bedrockkonvertera metadata till inbäddningar och lagra dem i en Amazon OpenSearch Serverlös vektor butik, som fungerar som vår kunskapsbas i vårt RAG-ramverk.
I detta skede är processen redo att ta emot frågan på naturligt språk. Steg 7–9 representerar en korrigeringsslinga, om tillämpligt.
- Användaren anger sin fråga på naturligt språk. Du kan använda vilken webbapplikation som helst för att tillhandahålla chattgränssnittet. Därför täckte vi inte UI-detaljerna i vårt inlägg.
- Lösningen tillämpar ett RAG-ramverk via likhetssökning, som lägger till det extra sammanhanget från metadata från vektordatabasen. Den här tabellen används för att hitta rätt tabell, databas och attribut.
- Frågan slås samman med sammanhanget och skickas till Antropisk Claude v2.1 på Amazon Bedrock.
- Modellen får den genererade SQL-frågan och ansluter till Athena för att validera syntaxen.
- Om Athena ger ett felmeddelande som nämner att syntaxen är felaktig, använder modellen feltexten från Athenas svar.
- Den nya uppmaningen lägger till Athenas svar.
- Modellen skapar den korrigerade SQL-koden och fortsätter processen. Denna iteration kan utföras flera gånger.
- Slutligen kör vi SQL med Athena och genererar utdata. Här presenteras resultatet för användaren. För den arkitektoniska enkelhetens skull visade vi inte detta steg.
Förutsättningar
För detta inlägg bör du uppfylla följande förutsättningar:
- Ha en AWS-konto.
- installera d AWS-kommandoradsgränssnitt (AWS CLI).
- Ställ in SDK för Python (Boto3).
- Skapa AWS Glue Data Catalog med hjälp av en AWS Glue-crawler (eller en annan metod).
- Använda Titan-Text-Embeddings-modell på Amazon Bedrock, konvertera metadata till inbäddningar och lagra dem i en OpenSearch Serverless vektor butik.
Implementera lösningen
Du kan använda följande Jupyter anteckningsbok, som innehåller alla kodavsnitt som tillhandahålls i det här avsnittet, för att bygga lösningen. Vi rekommenderar att du använder Amazon SageMaker Studio för att öppna den här anteckningsboken med en ml.t3.medium-instans med Python 3 (Data Science) kärnan. För instruktioner, se Utbilda en maskininlärningsmodell. Utför följande steg för att konfigurera lösningen:
- Skapa kunskapsbasen i OpenSearch Service för RAG-ramverket:
- Bygg uppmaningen (
final_question
) genom att kombinera användarinmatningen på naturligt språk (user_query
), relevant metadata från vektorarkivet (vector_search_match
), och våra instruktioner (details
): - Anropa Amazon Bedrock för LLM (Claude v2) och uppmana den att generera SQL-frågan. I följande kod gör den flera försök för att illustrera självkorrigeringssteget:x
- Om några problem tas emot med den genererade SQL-frågan (
{sqlgenerated}
) från Athenas svar ({syntaxcheckmsg}
), den nya prompten (prompt
) genereras baserat på svaret och modellen försöker igen att generera den nya SQL:en: - Efter att SQL har genererats anropas Athena-klienten för att köra och generera utdata:
Testa lösningen
I det här avsnittet kör vi vår lösning med olika exempelscenarier för att testa olika komplexitetsnivåer för SQL-frågor.
För att testa vår text-till-SQL använder vi två datauppsättningar tillgängliga från IMDB. Underuppsättningar av IMDb-data är tillgängliga för personligt och icke-kommersiellt bruk. Du kan ladda ner datamängder och lagra dem i Amazon enkel lagringstjänst (Amazon S3). Du kan använda följande Spark SQL-kodavsnitt för att skapa tabeller i AWS Glue. För det här exemplet använder vi title_ratings
och title
:
Lagra data i Amazon S3 och metadata i AWS Glue
I det här scenariot lagras vår datauppsättning i en S3-hink. Athena har en S3-kontakt som gör att du kan använda Amazon S3 som en datakälla som kan frågas.
För vår första fråga ger vi input "Jag är ny på det här. Kan du hjälpa mig att se alla tabeller och kolumner i imdb-schema?"
Följande är den genererade frågan:
Följande skärmdump och kod visar vår utdata.
För vår andra fråga frågar vi "Visa mig alla titel och detaljer i USA-regionen vars betyg är mer än 9.5."
Följande är vår genererade fråga:
Svaret är följande.
För vår tredje fråga anger vi "Bra svar! Visa mig nu alla titlar av originaltyp med betyg över 7.5 och inte i USA.
Följande fråga genereras:
Vi får följande resultat.
Generera självkorrigerad SQL
Det här scenariot simulerar en SQL-fråga som har syntaxproblem. Här kommer den genererade SQL-koden att självkorrigeras baserat på svaret från Athena. I följande svar gav Athena en COLUMN_NOT_FOUND
fel och nämnde det table_description
kan inte lösas:
Använda lösningen med andra datakällor
För att använda lösningen med andra datakällor sköter Athena jobbet åt dig. För att göra detta använder Athena datakälla-anslutningar som kan användas med federerade frågor. Du kan överväga en anslutning som en förlängning av Athena-frågemotorn. Det finns förbyggda Athena-datakälla-anslutningar för datakällor som Amazon CloudWatch-loggar, Amazon DynamoDB, Amazon DocumentDB (med MongoDB-kompatibilitet)och Amazon Relational Databas Service (Amazon RDS), och JDBC-kompatibla relationsdatakällor som MySQL och PostgreSQL under Apache 2.0-licensen. När du har skapat en anslutning till valfri datakälla kan du använda den föregående kodbasen för att utöka lösningen. För mer information, se Fråga vilken datakälla som helst med Amazon Athenas nya federerade fråga.
Städa upp
För att rensa upp resurserna kan du börja med städa upp din S3 hink var uppgifterna finns. Om inte din applikation åberopar Amazon Bedrock kommer det inte att medföra någon kostnad. För bästa praxis för infrastrukturhantering rekommenderar vi att du tar bort resurserna som skapats i den här demonstrationen.
Slutsats
I det här inlägget presenterade vi en lösning som låter dig använda NLP för att generera komplexa SQL-frågor med en mängd olika resurser aktiverade av Athena. Vi ökade också noggrannheten hos de genererade SQL-frågorna via en flerstegsutvärderingsslinga baserad på felmeddelanden från nedströmsprocesser. Dessutom använde vi metadata i AWS Glue Data Catalog för att överväga tabellnamnen som ställdes i frågan genom RAG-ramverket. Vi testade sedan lösningen i olika realistiska scenarier med olika frågekomplexitetsnivåer. Slutligen diskuterade vi hur man tillämpar denna lösning på olika datakällor som stöds av Athena.
Amazon Bedrock är i centrum för denna lösning. Amazon Bedrock kan hjälpa dig att bygga många generativa AI-applikationer. För att komma igång med Amazon Bedrock rekommenderar vi att du följer snabbstarten nedan GitHub repo och bekanta dig med att bygga generativa AI-applikationer. Du kan också prova kunskapsbaser i Amazon Bedrock för att snabbt bygga sådana RAG-lösningar.
Om författarna
Sanjeeb Panda är data- och ML-ingenjör på Amazon. Med bakgrunden inom AI/ML, Data Science och Big Data designar och utvecklar Sanjeeb innovativa data- och ML-lösningar som löser komplexa tekniska utmaningar och uppnår strategiska mål för globala 3P-säljare som hanterar sina verksamheter på Amazon. Utöver sitt arbete som data- och ML-ingenjör på Amazon är Sanjeeb Panda en ivrig matälskare och musikentusiast.
Burak Gozluklu är en Principal AI/ML Specialist Solutions Architect i Boston, MA. Han hjälper strategiska kunder att ta till sig AWS-teknologier och specifikt generativa AI-lösningar för att uppnå sina affärsmål. Burak har en doktorsexamen i flygteknik från METU, en MS i systemteknik och en post-doc i systemdynamik från MIT i Cambridge, MA. Burak är fortfarande en forskningsfilial i MIT. Burak brinner för yoga och meditation.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoData.Network Vertical Generative Ai. Styrka dig själv. Tillgång här.
- PlatoAiStream. Web3 Intelligence. Kunskap förstärkt. Tillgång här.
- Platoesg. Kol, CleanTech, Energi, Miljö, Sol, Avfallshantering. Tillgång här.
- PlatoHealth. Biotech och kliniska prövningar Intelligence. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/build-a-robust-text-to-sql-solution-generating-complex-queries-self-correcting-and-querying-diverse-data-sources/
- : har
- :är
- :inte
- :var
- $UPP
- 1
- 10
- 100
- 11
- 12
- 13
- 14
- 16
- 20
- 2024
- 22
- 23
- 29
- 30
- 32
- 39
- 50
- 500
- 521
- 7
- 8
- 9
- a
- Om oss
- ovan
- tillgång
- noggrannhet
- exakt
- Uppnå
- lägga till
- Dessutom
- adress
- Lägger
- anta
- Antagande
- Aerospace
- Dotterbolag
- Efter
- igen
- AI
- AI / ML
- Syftet
- Justerar
- Alla
- tillåter
- också
- alternativ
- alltid
- am
- amason
- Amazon RDS
- Amazon Web Services
- an
- analytics
- och
- svara
- Antropisk
- vilken som helst
- Apache
- tillämplig
- Ansökan
- tillämpningar
- applicerar
- Ansök
- arkitektoniska
- arkitektur
- ÄR
- AS
- be
- At
- atlanta
- försök
- Försök
- attribut
- augmented
- tillstånd
- tillgänglig
- AWS
- AWS-lim
- bakgrund
- bas
- baserat
- BE
- därför att
- nedan
- BÄST
- bästa praxis
- Stor
- Stora data
- Blockera
- boston
- föra
- SLUTRESULTAT
- Byggnad
- byggt
- företag
- företag
- men
- by
- kallas
- cambridge
- KAN
- kan inte
- kapacitet
- kapabel
- vilken
- Vid
- katalog
- Centrum
- centraliserad
- utmanar
- utmaningar
- chatt
- kontrollerade
- kontroll
- rena
- cli
- klient
- koda
- kodbas
- Samla
- Kolumn
- Kolonner
- kombinera
- kommer
- kommande
- jämfört
- jämförande
- kompatibilitet
- fullborda
- komplex
- Komplexiteten
- komponent
- komponenter
- omfattande
- anslutning
- ansluter
- Tänk
- sammanhang
- fortsätter
- kontroller
- Konvertering
- konvertera
- korrekt
- Korrigerad
- Korrigeringar
- Pris
- räkna
- täcka
- skapa
- skapas
- skapar
- kritisk
- Kunder
- datum
- datavetenskap
- Databas
- databaser
- datauppsättningar
- Datum
- datum Tid
- levereras
- demonstrera
- Designa
- Design mönster
- önskas
- Trots
- detaljer
- utveckla
- Diagrammet
- DID
- olika
- diskutera
- diskuteras
- flera
- do
- docs
- dokument
- ladda ner
- under
- Dynamiken
- Effektiv
- annars
- uppkomst
- möjliggöra
- aktiverad
- Motor
- ingenjör
- Teknik
- berika
- säkerställa
- ange
- Företag
- Går in
- entusiast
- fel
- fel
- utvärdering
- Även
- Varje
- exempel
- exempel
- exceptionell
- exekvera
- existerar
- befintliga
- Förklara
- förlänga
- förlängning
- extra
- Misslyckades
- falsk
- Funktioner
- återkoppling
- slutlig
- Slutligen
- finna
- Förnamn
- flöda
- följer
- efter
- följer
- För
- Ramverk
- från
- ytterligare
- spalt
- gav
- generera
- genereras
- genererar
- generera
- generering
- generativ
- Generativ AI
- skaffa sig
- blir
- Välgörenhet
- Mål
- fick
- Handtag
- Har
- har
- he
- hjälpa
- hjälper
- här.
- hög kvalitet
- höggradigt
- hans
- Hur ser din drömresa ut
- How To
- Men
- html
- http
- HTTPS
- Nav
- humant
- i
- identifierade
- if
- illustrera
- illustrerar
- implikationer
- med Esport
- in
- felaktig
- innefattar
- innefattar
- införliva
- inkorporerar
- felaktig
- Öka
- ökat
- index
- individuellt
- info
- informationen
- Infrastruktur
- inneboende
- inneboende
- inledande
- inre
- innovativa
- ingång
- exempel
- instruktioner
- in
- åberopas
- anropar
- fråga
- problem
- IT
- iteration
- Jobb
- delta
- jpg
- kunskap
- sjöar
- språk
- Large
- större
- LÄRA SIG
- inlärning
- Nivå
- nivåer
- Licens
- tycka om
- BEGRÄNSA
- linje
- LLM
- belägen
- älskar
- Maskinen
- maskininlärning
- göra
- GÖR
- ledning
- hantera
- många
- matematisk
- Maj..
- me
- meditation
- Medium
- nämnts
- nämner
- meddelande
- meddelanden
- metadata
- metod
- kanske
- minimera
- MIT
- Mildra
- ML
- modell
- modeller
- MongoDB
- mer
- MS
- multipel
- mängd
- Musik
- mysql
- namn
- namn
- Natural
- Naturlig språkbehandling
- Behöver
- behov
- Nya
- Nästa
- nlp
- icke-kommersiell
- anteckningsbok
- nu
- antal
- mål
- of
- Ofta
- on
- endast
- öppet
- Verksamhet
- or
- beställa
- ursprungliga
- Övriga
- vår
- produktion
- utanför
- övergripande
- Godkänd
- brinner
- bana
- mönster
- Personer
- prestanda
- utfört
- personlig
- phd
- plato
- Platon Data Intelligence
- PlatonData
- snälla du
- Inlägg
- PostgreSQL
- praxis
- föregående
- exakt
- förutsättningar
- presentera
- presenteras
- Principal
- Problem
- process
- processer
- bearbetning
- prompter
- ge
- förutsatt
- ger
- syfte
- Python
- sökfrågor
- fråga
- fråga
- Snabbt
- snabbt
- citat
- trasa
- betyg
- betyg
- Läsa
- redo
- realistisk
- motta
- mottagna
- rekommenderar
- hänvisa
- region
- relaterad
- relevanta
- förblir
- resterna
- representerar
- begära
- Obligatorisk
- Krav
- Kräver
- forskning
- bor
- Lös
- löst
- Resurser
- avseende
- respons
- resultera
- Resultat
- hämtning
- avkastning
- höger
- Stiger
- Risk
- risker
- robusta
- RAD
- Körning
- sagemaker
- skull
- Samma
- såg
- scenario
- scenarier
- Vetenskap
- söka
- Andra
- §
- se
- välj
- SJÄLV
- Säljare
- skickas
- Server
- serverar
- service
- Tjänster
- in
- skall
- show
- visar
- visas
- sida
- signifikant
- Enkelt
- enkelhet
- förenklar
- enda
- kodavsnitt
- lösning
- Lösningar
- LÖSA
- några
- Källa
- Källor
- Gnista
- specialist
- specifikt
- Etapp
- starta
- igång
- Ange
- .
- status
- Steg
- Steg
- Fortfarande
- förvaring
- lagra
- lagras
- okomplicerad
- Strategisk
- Sträng
- strukturerade
- sådana
- Som stöds
- säker
- syntax
- SYS
- system
- System
- bord
- Ta
- Målet
- uppgift
- Teknisk
- Tekniken
- testa
- testade
- text
- än
- den där
- Smakämnen
- navet
- deras
- Dem
- sedan
- Där.
- därför
- Dessa
- Tredje
- detta
- de
- tre
- Genom
- gånger
- Titel
- titlar
- till
- i dag
- Transformation
- prova
- två
- Typ
- typer
- ui
- under
- genomgått
- förståelse
- såvida inte
- Uppdatering
- uppdaterad
- us
- användning
- Begagnade
- Användare
- användare
- användningar
- med hjälp av
- BEKRÄFTA
- värde
- mängd
- olika
- varierande
- via
- visningar
- Vakna
- gå
- Sätt..
- we
- webb
- webbapplikation
- webbservice
- medan
- som
- medan
- vars
- kommer
- med
- inom
- utan
- Arbete
- arbetsflöde
- skriva
- skrivning
- X
- Yoga
- Om er
- Din
- själv
- zephyrnet