Structured Query Language (SQL) er et komplekst sprog, der kræver en forståelse af databaser og metadata. I dag, generativ AI kan aktivere folk uden SQL viden. Denne generative AI-opgave kaldes tekst-til-SQL, som genererer SQL-forespørgsler fra naturlig sprogbehandling (NLP) og konverterer tekst til semantisk korrekt SQL. Løsningen i dette indlæg har til formål at bringe virksomhedsanalyseoperationer til næste niveau ved at forkorte vejen til dine data ved hjælp af naturligt sprog.
Med fremkomsten af store sprogmodeller (LLM'er) har NLP-baseret SQL-generering gennemgået en betydelig transformation. LLM'er demonstrerer enestående ydeevne og er nu i stand til at generere nøjagtige SQL-forespørgsler fra naturlige sprogbeskrivelser. Der er dog stadig udfordringer. For det første er det menneskelige sprog i sagens natur tvetydigt og kontekstafhængigt, hvorimod SQL er præcist, matematisk og struktureret. Dette hul kan resultere i unøjagtig konvertering af brugerens behov til den SQL, der genereres. For det andet skal du muligvis bygge tekst-til-SQL-funktioner for hver database, fordi data ofte ikke er gemt i et enkelt mål. Du skal muligvis genskabe kapaciteten for hver database for at aktivere brugere med NLP-baseret SQL-generering. For det tredje, på trods af den større udbredelse af centraliserede analyseløsninger som datasøer og varehuse, stiger kompleksiteten med forskellige tabelnavne og andre metadata, der er nødvendige for at skabe SQL'en til de ønskede kilder. Derfor er det fortsat en udfordring at indsamle omfattende metadata af høj kvalitet. For at lære mere om tekst-til-SQL bedste praksis og designmønstre, se Generering af værdi fra virksomhedsdata: Bedste praksis for Text2SQL og generativ AI.
Vores løsning sigter mod at løse disse udfordringer ved hjælp af Amazonas grundfjeld , AWS Analytics Services. Vi bruger Antropiske Claude v2.1 på Amazon Bedrock som vores LLM. For at løse udfordringerne inkorporerer vores løsning først metadataene fra datakilderne i AWS Glue Data Katalog for at øge nøjagtigheden af den genererede SQL-forespørgsel. Workflowet inkluderer også en afsluttende evaluering og korrektionsløkke, hvis eventuelle SQL-problemer identificeres af Amazonas Athena, som bruges downstream som SQL-motoren. Athena giver os også mulighed for at bruge et væld af understøttede endepunkter og stik til at dække et stort sæt datakilder.
Efter vi har gennemgået trinene til at bygge løsningen, præsenterer vi resultaterne af nogle testscenarier med varierende SQL-kompleksitetsniveauer. Til sidst diskuterer vi, hvordan det er ligetil at inkorporere forskellige datakilder i dine SQL-forespørgsler.
Løsningsoversigt
Der er tre kritiske komponenter i vores arkitektur: Retrieval Augmented Generation (RAG) med databasemetadata, en flertrins selvkorrektionsløkke og Athena som vores SQL-motor.
Vi bruger RAG-metoden til at hente tabelbeskrivelserne og skemabeskrivelserne (kolonner) fra AWS Glue metastore for at sikre, at anmodningen er relateret til den rigtige tabel og datasæt. I vores løsning byggede vi de individuelle trin til at køre en RAG-ramme med AWS Glue Data Catalog til demonstrationsformål. Du kan dog også bruge videnbaser i Amazon Bedrock for at bygge RAG-løsninger hurtigt.
Flertrinskomponenten gør det muligt for LLM at rette den genererede SQL-forespørgsel for nøjagtighed. Her sendes den genererede SQL for syntaksfejl. Vi bruger Athena-fejlmeddelelser til at berige vores prompt til LLM for mere nøjagtige og effektive rettelser i den genererede SQL.
Du kan overveje, at fejlmeddelelserne lejlighedsvis kommer fra Athena som feedback. Omkostningskonsekvenserne af et fejlkorrektionstrin er ubetydelige sammenlignet med den leverede værdi. Du kan endda inkludere disse korrigerende trin som overvågede forstærkede læringseksempler for at finjustere dine LLM'er. Vi dækkede dog ikke dette flow i vores indlæg for forenklingsformål.
Bemærk, at der altid er en iboende risiko for at have unøjagtigheder, hvilket naturligvis kommer med generative AI-løsninger. Selvom Athena-fejlmeddelelser er yderst effektive til at mindske denne risiko, kan du tilføje flere kontroller og visninger, såsom menneskelig feedback eller eksempelforespørgsler til finjustering, for yderligere at minimere sådanne risici.
Athena giver os ikke kun mulighed for at rette SQL-forespørgslerne, men det forenkler også det overordnede problem for os, fordi det fungerer som navet, hvor egerne er flere datakilder. Adgangsstyring, SQL-syntaks og mere håndteres alle via Athena.
Følgende diagram illustrerer løsningsarkitekturen.
Procesflowet omfatter følgende trin:
- Opret AWS Glue Data Catalogue ved hjælp af en AWS Glue crawler (eller en anden metode).
- Brug af Titan-Text-Embeddings model på Amazon Bedrock, konverter metadataene til indlejringer og gem dem i en Amazon OpenSearch Serverløs vektor butik, som fungerer som vores vidensbase i vores RAG-ramme.
På dette stadium er processen klar til at modtage forespørgslen i naturligt sprog. Trin 7-9 repræsenterer en korrektionsløkke, hvis det er relevant.
- Brugeren indtaster deres forespørgsel på naturligt sprog. Du kan bruge enhver webapplikation til at levere chat-brugergrænsefladen. Derfor dækkede vi ikke UI-detaljerne i vores indlæg.
- Løsningen anvender en RAG-ramme via lighedssøgning, som tilføjer den ekstra kontekst fra metadataene fra vektordatabasen. Denne tabel bruges til at finde den korrekte tabel, database og attributter.
- Forespørgslen flettes med konteksten og sendes til Antropiske Claude v2.1 på Amazon Bedrock.
- Modellen får den genererede SQL-forespørgsel og forbinder til Athena for at validere syntaksen.
- Hvis Athena giver en fejlmeddelelse, der nævner, at syntaksen er forkert, bruger modellen fejlteksten fra Athenas svar.
- Den nye prompt tilføjer Athenas svar.
- Modellen opretter den korrigerede SQL og fortsætter processen. Denne iteration kan udføres flere gange.
- Til sidst kører vi SQL ved hjælp af Athena og genererer output. Her præsenteres output for brugeren. Af hensyn til den arkitektoniske enkelhed viste vi ikke dette trin.
Forudsætninger
For dette indlæg skal du opfylde følgende forudsætninger:
- har du en AWS-konto.
- Installer og AWS kommandolinjegrænseflade (AWS CLI).
- Indstil SDK til Python (Boto3).
- Opret AWS Glue Data Catalogue ved hjælp af en AWS Glue crawler (eller en anden metode).
- Brug af Titan-Text-Embeddings model på Amazon Bedrock, konverter metadataene til indlejringer og gem dem i en OpenSearch Serverless vektor butik.
Implementer løsningen
Du kan bruge følgende Jupyter notesbog, som inkluderer alle kodestykkerne i dette afsnit, for at bygge løsningen. Vi anbefaler at bruge Amazon SageMaker Studio at åbne denne notesbog med en ml.t3.medium-instans med Python 3 (Data Science)-kernen. For instruktioner, se Træn en Machine Learning Model. Udfør følgende trin for at konfigurere løsningen:
- Opret videnbasen i OpenSearch Service til RAG-rammerne:
- Byg prompten (
final_question
) ved at kombinere brugerinput i naturligt sprog (user_query
), de relevante metadata fra vektorlageret (vector_search_match
), og vores instruktioner (details
): - Kald Amazon Bedrock til LLM (Claude v2), og bed den om at generere SQL-forespørgslen. I den følgende kode gør den flere forsøg for at illustrere selvkorrektionstrinnet:x
- Hvis der modtages problemer med den genererede SQL-forespørgsel (
{sqlgenerated}
) fra Athena-svaret ({syntaxcheckmsg}
), den nye prompt (prompt
) genereres baseret på svaret, og modellen forsøger igen at generere den nye SQL: - Efter at SQL er genereret, kaldes Athena-klienten til at køre og generere output:
Test løsningen
I dette afsnit kører vi vores løsning med forskellige eksempelscenarier for at teste forskellige kompleksitetsniveauer af SQL-forespørgsler.
For at teste vores tekst-til-SQL bruger vi to datasæt tilgængelige fra IMDB. Undersæt af IMDb-data er tilgængelige til personlig og ikke-kommerciel brug. Du kan downloade datasættene og gemme dem i Amazon Simple Storage Service (Amazon S3). Du kan bruge følgende Spark SQL-kodestykke til at oprette tabeller i AWS Glue. Til dette eksempel bruger vi title_ratings
, title
:
Gem data i Amazon S3 og metadata i AWS Glue
I dette scenarie er vores datasæt gemt i en S3-spand. Athena har et S3-stik, der giver dig mulighed for at bruge Amazon S3 som en datakilde, der kan forespørges.
Til vores første forespørgsel giver vi inputtet "Jeg er ny i dette. Kan du hjælpe mig med at se alle tabellerne og kolonnerne i imdb-skemaet?"
Følgende er den genererede forespørgsel:
Følgende skærmbillede og kode viser vores output.
For vores anden forespørgsel spørger vi "Vis mig alle titler og detaljer i den amerikanske region, hvis vurdering er mere end 9.5."
Følgende er vores genererede forespørgsel:
Svaret er som følger.
Til vores tredje forespørgsel indtaster vi "Great Response! Vis mig nu alle de originale typetitler med vurderinger på mere end 7.5 og ikke i USA-regionen."
Følgende forespørgsel genereres:
Vi får følgende resultater.
Generer selvkorrigeret SQL
Dette scenarie simulerer en SQL-forespørgsel, der har syntaksproblemer. Her vil den genererede SQL blive selvkorrigeret baseret på svaret fra Athena. I det følgende svar gav Athena en COLUMN_NOT_FOUND
fejl og nævnte det table_description
kan ikke løses:
Brug af løsningen med andre datakilder
For at bruge løsningen sammen med andre datakilder, varetager Athena jobbet for dig. For at gøre dette bruger Athena datakildeforbindelser der kan bruges med fødererede forespørgsler. Du kan overveje et stik som en udvidelse af Athena-forespørgselsmotoren. Der findes forudbyggede Athena-datakildeforbindelser til datakilder som f.eks Amazon CloudWatch-logfiler, Amazon DynamoDB, Amazon DocumentDB (med MongoDB-kompatibilitet)og Amazon Relationel Database Service (Amazon RDS) og JDBC-kompatible relationelle datakilder såsom MySQL og PostgreSQL under Apache 2.0-licensen. Når du har oprettet en forbindelse til en datakilde, kan du bruge den foregående kodebase til at udvide løsningen. For mere information, se Forespørg enhver datakilde med Amazon Athenas nye fødererede forespørgsel.
Ryd op
For at rydde op i ressourcerne kan du starte med rengøring af din S3-spand hvor data findes. Medmindre din applikation påberåber sig Amazon Bedrock, vil det ikke medføre nogen omkostninger. Af hensyn til bedste praksis for infrastrukturstyring anbefaler vi at slette de ressourcer, der er oprettet i denne demonstration.
Konklusion
I dette indlæg præsenterede vi en løsning, der giver dig mulighed for at bruge NLP til at generere komplekse SQL-forespørgsler med en række ressourcer aktiveret af Athena. Vi øgede også nøjagtigheden af de genererede SQL-forespørgsler via en flertrins-evalueringsløkke baseret på fejlmeddelelser fra downstream-processer. Derudover brugte vi metadataene i AWS Glue Data Catalog til at overveje de tabelnavne, der blev bedt om i forespørgslen gennem RAG-rammen. Vi testede derefter løsningen i forskellige realistiske scenarier med forskellige forespørgselskompleksitetsniveauer. Til sidst diskuterede vi, hvordan man anvender denne løsning på forskellige datakilder understøttet af Athena.
Amazon Bedrock er i centrum for denne løsning. Amazon Bedrock kan hjælpe dig med at bygge mange generative AI-applikationer. For at komme i gang med Amazon Bedrock anbefaler vi at følge hurtigstarten i det følgende GitHub repo og gør dig bekendt med at bygge generative AI-applikationer. Du kan også prøve videnbaser i Amazon Bedrock for at bygge sådanne RAG-løsninger hurtigt.
Om forfatterne
Sanjeeb Panda er data- og ML-ingeniør hos Amazon. Med baggrund i AI/ML, Data Science og Big Data designer og udvikler Sanjeeb innovative data- og ML-løsninger, der løser komplekse tekniske udfordringer og opnår strategiske mål for globale 3P-sælgere, der administrerer deres virksomheder på Amazon. Ud over sit arbejde som data- og ML-ingeniør hos Amazon er Sanjeeb Panda en ivrig madelsker og musikentusiast.
Burak Gozluklu er en Principal AI/ML Specialist Solutions Architect beliggende i Boston, MA. Han hjælper strategiske kunder med at adoptere AWS-teknologier og specifikt Generative AI-løsninger for at nå deres forretningsmål. Burak har en PhD i Aerospace Engineering fra METU, en MS i Systems Engineering og en post-doc i system dynamics fra MIT i Cambridge, MA. Burak er stadig en forskningspartner i MIT. Burak er passioneret omkring yoga og meditation.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- PlatoData.Network Vertical Generative Ai. Styrk dig selv. Adgang her.
- PlatoAiStream. Web3 intelligens. Viden forstærket. Adgang her.
- PlatoESG. Kulstof, CleanTech, Energi, Miljø, Solenergi, Affaldshåndtering. Adgang her.
- PlatoHealth. Bioteknologiske og kliniske forsøgs intelligens. Adgang her.
- Kilde: 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
- :er
- :ikke
- :hvor
- $OP
- 1
- 10
- 100
- 11
- 12
- 13
- 14
- 16
- 20
- 2024
- 22
- 23
- 29
- 30
- 32
- 39
- 50
- 500
- 521
- 7
- 8
- 9
- a
- Om
- over
- adgang
- nøjagtighed
- præcis
- opnå
- tilføje
- Derudover
- adresse
- Tilføjer
- vedtage
- Vedtagelse
- Luftfart
- Affiliate
- Efter
- igen
- AI
- AI / ML
- målsætninger
- Justerer
- Alle
- tillader
- også
- alternativ
- altid
- am
- Amazon
- Amazon RDS
- Amazon Web Services
- an
- analytics
- ,
- besvare
- Antropisk
- enhver
- Apache
- anvendelig
- Anvendelse
- applikationer
- gælder
- Indløs
- arkitektonisk
- arkitektur
- ER
- AS
- spørg
- At
- atlanta
- forsøg
- Forsøg på
- attributter
- augmented
- autoriseret
- til rådighed
- AWS
- AWS Lim
- baggrund
- bund
- baseret
- BE
- fordi
- jf. nedenstående
- BEDSTE
- bedste praksis
- Big
- Big data
- Bloker
- boston
- bringe
- bygge
- Bygning
- bygget
- virksomhed
- virksomheder
- men
- by
- kaldet
- Cambridge
- CAN
- kan ikke
- kapacitet
- stand
- hvilken
- tilfælde
- katalog
- center
- centraliseret
- udfordre
- udfordringer
- chatte
- afkrydset
- kontrol
- ren
- cli
- kunde
- kode
- kodebase
- Indsamling
- Kolonne
- Kolonner
- kombinerer
- kommer
- kommer
- sammenlignet
- sammenligne
- kompatibilitet
- fuldføre
- komplekse
- kompleksitet
- komponent
- komponenter
- omfattende
- tilslutning
- forbinder
- Overvej
- sammenhæng
- fortsætter
- kontrol
- Konvertering
- konvertere
- korrigere
- korrigeret
- Rettelser
- Koste
- tælle
- dæksel
- skabe
- oprettet
- skaber
- kritisk
- Kunder
- data
- datalogi
- Database
- databaser
- datasæt
- Dato
- dato tid
- leveret
- demonstrerer
- Design
- design mønstre
- ønskes
- Trods
- detaljer
- udvikle
- diagram
- DID
- forskellige
- diskutere
- drøftet
- forskelligartede
- do
- docs
- dokumenter
- downloade
- i løbet af
- dynamik
- Effektiv
- andet
- fremkomsten
- muliggøre
- aktiveret
- Engine (Motor)
- ingeniør
- Engineering
- berige
- sikre
- Indtast
- Enterprise
- Går ind i
- entusiast
- fejl
- fejl
- evaluering
- Endog
- Hver
- eksempel
- eksempler
- enestående
- udførelse
- eksisterer
- eksisterende
- Forklar
- udvide
- udvidelse
- ekstra
- mislykkedes
- falsk
- Funktionalitet
- tilbagemeldinger
- endelige
- Endelig
- finde
- Fornavn
- flow
- følger
- efter
- følger
- Til
- Framework
- fra
- yderligere
- kløft
- gav
- generere
- genereret
- genererer
- generere
- generation
- generative
- Generativ AI
- få
- får
- Global
- Mål
- fik
- Håndterer
- Have
- have
- he
- hjælpe
- hjælper
- link.
- høj kvalitet
- stærkt
- hans
- Hvordan
- How To
- Men
- HTML
- http
- HTTPS
- Hub
- menneskelig
- i
- identificeret
- if
- illustrere
- illustrerer
- implikationer
- vigtigt
- in
- forkert
- omfatter
- omfatter
- indarbejde
- inkorporerer
- forkert
- Forøg
- øget
- indeks
- individuel
- info
- oplysninger
- Infrastruktur
- iboende
- sagens natur
- initial
- indre
- innovativ
- indgang
- instans
- anvisninger
- ind
- påberåbes
- påberåber sig
- spørgsmål
- spørgsmål
- IT
- iteration
- Job
- deltage
- jpg
- viden
- søer
- Sprog
- stor
- større
- LÆR
- læring
- Niveau
- niveauer
- Licens
- ligesom
- GRÆNSE
- Line (linje)
- LLM
- placeret
- kærlighed
- maskine
- machine learning
- lave
- maerker
- ledelse
- styring
- mange
- matematiske
- Kan..
- me
- meditation
- medium
- nævnte
- nævner
- besked
- beskeder
- Metadata
- metode
- måske
- minimere
- MIT
- afbøde
- ML
- model
- modeller
- MongoDB
- mere
- MS
- flere
- mangfoldighed
- Musik
- mysql
- navn
- navne
- Natural
- Natural Language Processing
- Behov
- behov
- Ny
- næste
- NLP
- ikke-kommercielle
- notesbog
- nu
- nummer
- målsætninger
- of
- tit
- on
- kun
- åbent
- Produktion
- or
- ordrer
- original
- Andet
- vores
- output
- uden for
- samlet
- Bestået
- lidenskabelige
- sti
- mønstre
- Mennesker
- ydeevne
- udføres
- personale
- phd
- plato
- Platon Data Intelligence
- PlatoData
- Vær venlig
- Indlæg
- postgresql
- praksis
- forud
- brug
- forudsætninger
- præsentere
- forelagt
- Main
- Problem
- behandle
- Processer
- forarbejdning
- prompter
- give
- forudsat
- giver
- formål
- Python
- forespørgsler
- query
- spørgsmål
- Hurtig
- hurtigt
- citater
- klud
- bedømmelse
- ratings
- Læs
- klar
- realistisk
- modtage
- modtaget
- anbefaler
- henvise
- region
- relaterede
- relevant
- forblive
- resterne
- repræsentere
- anmode
- påkrævet
- Krav
- Kræver
- forskning
- bor
- løse
- løst
- Ressourcer
- respekt
- svar
- resultere
- Resultater
- hentning
- afkast
- højre
- Stiger
- Risiko
- risici
- robust
- RÆKKE
- Kør
- sagemaker
- skyld
- samme
- så
- scenarie
- scenarier
- Videnskab
- søgning
- Anden
- Sektion
- se
- Vælg
- SELV
- Sælgere
- sendt
- Serverless
- tjener
- tjeneste
- Tjenester
- sæt
- bør
- Vis
- viser
- vist
- side
- signifikant
- Simpelt
- enkelhed
- forenkler
- enkelt
- uddrag
- løsninger
- Løsninger
- SOLVE
- nogle
- Kilde
- Kilder
- Spark
- specialist
- specifikt
- Stage
- starte
- påbegyndt
- Tilstand
- Statement
- Status
- Trin
- Steps
- Stadig
- opbevaring
- butik
- opbevaret
- ligetil
- Strategisk
- String
- struktureret
- sådan
- Understøttet
- sikker
- syntaks
- SYS
- systemet
- Systemer
- bord
- Tag
- mål
- Opgaver
- Teknisk
- Teknologier
- prøve
- afprøvet
- tekst
- end
- at
- navet
- deres
- Them
- derefter
- Der.
- derfor
- Disse
- Tredje
- denne
- dem
- tre
- Gennem
- gange
- Titel
- titler
- til
- i dag
- Transformation
- prøv
- to
- typen
- typer
- ui
- under
- gennemgået
- forståelse
- medmindre
- Opdatering
- opdateret
- us
- brug
- anvendte
- Bruger
- brugere
- bruger
- ved brug af
- VALIDATE
- værdi
- række
- forskellige
- Varierende
- via
- visninger
- Wake
- gå
- Vej..
- we
- web
- Webapplikation
- webservices
- ud fra følgende betragtninger
- som
- mens
- hvis
- vilje
- med
- inden for
- uden
- Arbejde
- workflow
- skriver
- skrivning
- X
- Yoga
- Du
- Din
- dig selv
- zephyrnet