Structured Query Language (SQL) er et komplekst språk som krever forståelse av databaser og metadata. I dag, generativ AI kan aktivere personer uten SQL-kunnskap. Denne generative AI-oppgaven kalles tekst-til-SQL, som genererer SQL-spørringer fra naturlig språkbehandling (NLP) og konverterer tekst til semantisk korrekt SQL. Løsningen i dette innlegget tar sikte på å bringe bedriftsanalyseoperasjoner til neste nivå ved å forkorte veien til dataene dine ved å bruke naturlig språk.
Med fremveksten av store språkmodeller (LLM), har NLP-basert SQL-generering gjennomgått en betydelig transformasjon. LLM-er demonstrerer eksepsjonell ytelse og er nå i stand til å generere nøyaktige SQL-spørringer fra naturlige språkbeskrivelser. Det gjenstår imidlertid fortsatt utfordringer. For det første er menneskelig språk iboende tvetydig og kontekstavhengig, mens SQL er presis, matematisk og strukturert. Dette gapet kan føre til unøyaktig konvertering av brukerens behov til SQL-en som genereres. For det andre må du kanskje bygge tekst-til-SQL-funksjoner for hver database fordi data ofte ikke er lagret i et enkelt mål. Du må kanskje gjenskape muligheten for hver database for å aktivere brukere med NLP-basert SQL-generering. For det tredje, til tross for større bruk av sentraliserte analyseløsninger som datainnsjøer og varehus, øker kompleksiteten med forskjellige tabellnavn og andre metadata som kreves for å lage SQL for de ønskede kildene. Derfor er det fortsatt en utfordring å samle inn omfattende metadata av høy kvalitet. For å lære mer om beste fremgangsmåter for tekst-til-SQL og designmønstre, se Generer verdi fra bedriftsdata: Beste praksis for Text2SQL og generativ AI.
Vår løsning tar sikte på å møte disse utfordringene ved å bruke Amazonas grunnfjell og AWS Analytics-tjenester. Vi bruker Antropiske Claude v2.1 på Amazon Bedrock som vår LLM. For å møte utfordringene, inkorporerer løsningen vår først metadataene til datakildene i AWS Lim Data Catalog for å øke nøyaktigheten til den genererte SQL-spørringen. Arbeidsflyten inkluderer også en sluttevaluering og korrigeringssløyfe, i tilfelle eventuelle SQL-problemer blir identifisert av Amazonas Athena, som brukes nedstrøms som SQL-motoren. Athena lar oss også bruke en mengde av støttede endepunkter og koblinger for å dekke et stort sett med datakilder.
Etter at vi har gått gjennom trinnene for å bygge løsningen, presenterer vi resultatene av noen testscenarier med varierende SQL-kompleksitetsnivåer. Til slutt diskuterer vi hvordan det er enkelt å inkorporere forskjellige datakilder i SQL-spørringene dine.
Løsningsoversikt
Det er tre kritiske komponenter i arkitekturen vår: Retrieval Augmented Generation (RAG) med databasemetadata, en flertrinns selvkorrigeringsløkke og Athena som vår SQL-motor.
Vi bruker RAG-metoden for å hente tabellbeskrivelsene og skjemabeskrivelsene (kolonner) fra AWS Glue metastore for å sikre at forespørselen er relatert til riktig tabell og datasett. I løsningen vår bygde vi de individuelle trinnene for å kjøre et RAG-rammeverk med AWS Glue Data Catalog for demonstrasjonsformål. Du kan imidlertid også bruke kunnskapsbaser i Amazon Bedrock for å bygge RAG-løsninger raskt.
Flertrinnskomponenten lar LLM korrigere den genererte SQL-spørringen for nøyaktighet. Her sendes generert SQL for syntaksfeil. Vi bruker Athena-feilmeldinger for å berike spørsmålet vårt om LLM for mer nøyaktige og effektive rettelser i den genererte SQL-en.
Du kan vurdere at feilmeldingene av og til kommer fra Athena som tilbakemeldinger. Kostnadsimplikasjonene av et feilrettingstrinn er ubetydelige sammenlignet med den leverte verdien. Du kan til og med inkludere disse korrigerende trinnene som overvåkede forsterkede læringseksempler for å finjustere LLM-ene dine. Vi dekket imidlertid ikke denne flyten i innlegget vårt for enkelhets skyld.
Merk at det alltid er en iboende risiko for å ha unøyaktigheter, noe som naturlig følger med generative AI-løsninger. Selv om Athena-feilmeldinger er svært effektive for å redusere denne risikoen, kan du legge til flere kontroller og visninger, for eksempel menneskelig tilbakemelding eller eksempelforespørsler for finjustering, for å minimere slike risikoer ytterligere.
Athena lar oss ikke bare korrigere SQL-spørringene, men det forenkler også det generelle problemet for oss fordi det fungerer som navet, der eikene er flere datakilder. Tilgangsadministrasjon, SQL-syntaks og mer håndteres via Athena.
Følgende diagram illustrerer løsningsarkitekturen.
Prosessflyten inkluderer følgende trinn:
- Lag AWS Glue Data Catalogue ved hjelp av en AWS Glue crawler (eller en annen metode).
- Bruke Titan-Text-Embeddings-modell på Amazons grunnfjell, konverter metadataene til innebygginger og lagre dem i en Amazon OpenSearch Serverless vektor butikk, som fungerer som vår kunnskapsbase i vårt RAG-rammeverk.
På dette stadiet er prosessen klar til å motta spørringen på naturlig språk. Trinn 7–9 representerer en korreksjonssløyfe, hvis aktuelt.
- Brukeren legger inn søket på naturlig språk. Du kan bruke hvilken som helst nettapplikasjon for å tilby chat-grensesnittet. Derfor dekket vi ikke UI-detaljene i innlegget vårt.
- Løsningen bruker et RAG-rammeverk via likhetssøk, som legger til den ekstra konteksten fra metadataene fra vektordatabasen. Denne tabellen brukes for å finne riktig tabell, database og attributter.
- Spørringen slås sammen med konteksten og sendes til Antropiske Claude v2.1 på Amazonas grunnfjell.
- Modellen henter den genererte SQL-spørringen og kobler til Athena for å validere syntaksen.
- Hvis Athena gir en feilmelding som nevner at syntaksen er feil, bruker modellen feilteksten fra Athenas svar.
- Den nye ledeteksten legger til Athenas svar.
- Modellen lager den korrigerte SQL-en og fortsetter prosessen. Denne iterasjonen kan utføres flere ganger.
- Til slutt kjører vi SQL ved hjelp av Athena og genererer utdata. Her blir resultatet presentert for brukeren. Av hensyn til arkitektonisk enkelhet viste vi ikke dette trinnet.
Forutsetninger
For dette innlegget bør du fullføre følgende forutsetninger:
- Ha en AWS-konto.
- Install de AWS kommandolinjegrensesnitt (AWS CLI).
- Sett opp SDK for Python (Boto3).
- Lag AWS Glue Data Catalogue ved hjelp av en AWS Glue crawler (eller en annen metode).
- Bruke Titan-Text-Embeddings-modell på Amazons grunnfjell, konverter metadataene til innebygginger og lagre dem i en OpenSearch Serverless vektor butikk.
Implementer løsningen
Du kan bruke følgende Jupyter notisbok, som inkluderer alle kodebitene i denne delen, for å bygge løsningen. Vi anbefaler å bruke Amazon SageMaker Studio for å åpne denne notatboken med en ml.t3.medium-forekomst med Python 3 (Data Science)-kjernen. For instruksjoner, se Tren en maskinlæringsmodell. Fullfør følgende trinn for å sette opp løsningen:
- Opprett kunnskapsbasen i OpenSearch Service for RAG-rammeverket:
- Bygg ledeteksten (
final_question
) ved å kombinere brukerinndata på naturlig språk (user_query
), de relevante metadataene fra vektorlageret (vector_search_match
), og våre instruksjoner (details
): - Påkall Amazon Bedrock for LLM (Claude v2) og be den generere SQL-spørringen. I den følgende koden gjør den flere forsøk for å illustrere selvkorrigeringstrinnet:x
- Hvis noen problemer mottas med den genererte SQL-spørringen (
{sqlgenerated}
) fra Athena-svaret ({syntaxcheckmsg}
), den nye ledeteksten (prompt
) genereres basert på responsen og modellen prøver igjen å generere den nye SQL-en: - Etter at SQL er generert, startes Athena-klienten for å kjøre og generere utdata:
Test løsningen
I denne delen kjører vi løsningen vår med forskjellige eksempelscenarier for å teste forskjellige kompleksitetsnivåer for SQL-spørringer.
For å teste vår tekst-til-SQL bruker vi to datasett tilgjengelig fra IMDB. Undersett av IMDb-data er tilgjengelig for personlig og ikke-kommersiell bruk. Du kan laste ned datasettene og lagre dem i Amazon enkel lagringstjeneste (Amazon S3). Du kan bruke følgende Spark SQL-kodebit for å lage tabeller i AWS Glue. For dette eksempelet bruker vi title_ratings
og title
:
Lagre data i Amazon S3 og metadata i AWS Glue
I dette scenariet er datasettet vårt lagret i en S3-bøtte. Athena har en S3-kontakt som lar deg bruke Amazon S3 som en datakilde som kan spørres.
For vår første forespørsel gir vi innspillet "Jeg er ny på dette. Kan du hjelpe meg med å se alle tabellene og kolonnene i imdb-skjemaet?"
Følgende er den genererte spørringen:
Følgende skjermbilde og kode viser produksjonen vår.
For vårt andre søk spør vi "Vis meg alle tittelen og detaljene i USA-regionen hvis vurdering er mer enn 9.5."
Følgende er vår genererte spørring:
Svaret er som følger.
For vår tredje forespørsel skriver vi inn "Great Response! Vis meg nå alle de originale typetitlene med vurderinger over 7.5 og ikke i USA-regionen.»
Følgende spørring genereres:
Vi får følgende resultater.
Generer selvkorrigert SQL
Dette scenariet simulerer en SQL-spørring som har syntaksproblemer. Her vil den genererte SQL-en selvkorrigeres basert på svaret fra Athena. I det følgende svaret ga Athena en COLUMN_NOT_FOUND
feil og nevnte det table_description
kan ikke løses:
Bruk av løsningen med andre datakilder
For å bruke løsningen med andre datakilder, håndterer Athena jobben for deg. For å gjøre dette bruker Athena datakildekoblinger som kan brukes med fødererte søk. Du kan vurdere en kobling som en utvidelse av Athena-spørringsmotoren. Forhåndsbygde Athena-datakildekoblinger finnes for datakilder som Amazon CloudWatch-logger, Amazon DynamoDB, Amazon DocumentDB (med MongoDB-kompatibilitet)og Amazon Relational Database Service (Amazon RDS), og JDBC-kompatible relasjonsdatakilder som MySQL og PostgreSQL under Apache 2.0-lisensen. Etter at du har satt opp en tilkobling til en datakilde, kan du bruke den foregående kodebasen til å utvide løsningen. For mer informasjon, se Spør en hvilken som helst datakilde med Amazon Athenas nye fødererte spørring.
Rydd opp
For å rydde opp i ressursene kan du begynne med rydde opp i S3-bøtten hvor dataene befinner seg. Med mindre applikasjonen din påkaller Amazon Bedrock, vil den ikke medføre noen kostnad. Av hensyn til beste praksis for infrastrukturadministrasjon anbefaler vi å slette ressursene som er opprettet i denne demonstrasjonen.
konklusjonen
I dette innlegget presenterte vi en løsning som lar deg bruke NLP til å generere komplekse SQL-spørringer med en rekke ressurser aktivert av Athena. Vi økte også nøyaktigheten til de genererte SQL-spørringene via en flertrinns evalueringssløyfe basert på feilmeldinger fra nedstrømsprosesser. I tillegg brukte vi metadataene i AWS Glue Data Catalog for å vurdere tabellnavnene som ble spurt i spørringen gjennom RAG-rammeverket. Deretter testet vi løsningen i ulike realistiske scenarier med ulike spørringskompleksitetsnivåer. Til slutt diskuterte vi hvordan denne løsningen kan brukes på forskjellige datakilder støttet av Athena.
Amazon Bedrock er i sentrum av denne løsningen. Amazon Bedrock kan hjelpe deg med å bygge mange generative AI-applikasjoner. For å komme i gang med Amazon Bedrock anbefaler vi å følge hurtigstarten i det følgende GitHub repo og gjøre deg kjent med å bygge generative AI-applikasjoner. Du kan også prøve kunnskapsbaser i Amazon Bedrock for å bygge slike RAG-løsninger raskt.
Om forfatterne
Sanjeeb Panda er data- og ML-ingeniør hos Amazon. Med bakgrunn i AI/ML, Data Science og Big Data, designer og utvikler Sanjeeb innovative data- og ML-løsninger som løser komplekse tekniske utfordringer og oppnår strategiske mål for globale 3P-selgere som administrerer virksomhetene deres på Amazon. Utenom arbeidet som data- og ML-ingeniør hos Amazon, er Sanjeeb Panda en ivrig matelsker og musikkentusiast.
Burak Gozluklu er en rektor for AI/ML Specialist Solutions Architect lokalisert i Boston, MA. Han hjelper strategiske kunder med å ta i bruk AWS-teknologier og spesifikt Generative AI-løsninger for å nå sine forretningsmål. Burak har en doktorgrad i luftfartsteknikk fra METU, en MS i systemteknikk og en post-doc i systemdynamikk fra MIT i Cambridge, MA. Burak er fortsatt forskningstilknyttet i MIT. Burak er lidenskapelig opptatt av yoga og meditasjon.
- SEO-drevet innhold og PR-distribusjon. Bli forsterket i dag.
- PlatoData.Network Vertical Generative Ai. Styrk deg selv. Tilgang her.
- PlatoAiStream. Web3 Intelligence. Kunnskap forsterket. Tilgang her.
- PlatoESG. Karbon, CleanTech, Energi, Miljø, Solenergi, Avfallshåndtering. Tilgang her.
- PlatoHelse. Bioteknologisk og klinisk etterretning. Tilgang 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
- $OPP
- 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
- ovenfor
- adgang
- nøyaktighet
- nøyaktig
- Oppnå
- legge til
- I tillegg
- adresse
- Legger
- adoptere
- Adopsjon
- Aerospace
- Partnerskap
- Etter
- en gang til
- AI
- AI / ML
- mål
- Justerer
- Alle
- tillater
- også
- alternativ
- alltid
- am
- Amazon
- Amazon RDS
- Amazon Web Services
- an
- analytics
- og
- besvare
- Antropisk
- noen
- Apache
- aktuelt
- Søknad
- søknader
- gjelder
- Påfør
- arkitektonisk
- arkitektur
- ER
- AS
- spør
- At
- atlanta
- forsøk
- forsøk
- attributter
- augmented
- autorisert
- tilgjengelig
- AWS
- AWS Lim
- bakgrunn
- basen
- basert
- BE
- fordi
- under
- BEST
- beste praksis
- Stor
- Store data
- Blokker
- boston
- bringe
- bygge
- Bygning
- bygget
- virksomhet
- bedrifter
- men
- by
- som heter
- cambridge
- CAN
- kan ikke
- evne
- stand
- hvilken
- saken
- katalog
- sentrum
- sentralisert
- utfordre
- utfordringer
- chatte
- sjekket
- kontroll
- ren
- cli
- kunde
- kode
- kodebase
- Samle
- Kolonne
- kolonner
- kombinere
- kommer
- kommer
- sammenlignet
- sammenligne
- kompatibilitet
- fullføre
- komplekse
- kompleksitet
- komponent
- komponenter
- omfattende
- tilkobling
- forbinder
- Vurder
- kontekst
- fortsetter
- kontroller
- Konvertering
- konvertere
- korrigere
- Korrigert
- Korreksjoner
- Kostnad
- telle
- dekke
- skape
- opprettet
- skaper
- kritisk
- Kunder
- dato
- datavitenskap
- Database
- databaser
- datasett
- Dato
- dato tid
- levert
- demonstrere
- utforming
- designmønstre
- ønsket
- Til tross for
- detaljer
- utvikle
- diagram
- gJORDE
- forskjellig
- diskutere
- diskutert
- diverse
- do
- docs
- dokumenter
- nedlasting
- under
- dynamikk
- Effektiv
- ellers
- veksten
- muliggjøre
- aktivert
- Motor
- ingeniør
- Ingeniørarbeid
- berike
- sikre
- Enter
- Enterprise
- Går inn
- entusiast
- feil
- feil
- evaluering
- Selv
- Hver
- eksempel
- eksempler
- eksepsjonell
- utførende
- eksisterer
- eksisterende
- Forklar
- utvide
- forlengelse
- ekstra
- Mislyktes
- falsk
- Egenskaper
- tilbakemelding
- slutt~~POS=TRUNC
- Endelig
- finne
- Først
- flyten
- følge
- etter
- følger
- Til
- Rammeverk
- fra
- videre
- mellomrom
- ga
- generere
- generert
- genererer
- genererer
- generasjonen
- generative
- Generativ AI
- få
- blir
- Global
- Mål
- fikk
- Håndterer
- Ha
- å ha
- he
- hjelpe
- hjelper
- her.
- høykvalitets
- svært
- hans
- Hvordan
- Hvordan
- Men
- HTML
- http
- HTTPS
- Hub
- menneskelig
- i
- identifisert
- if
- illustrere
- illustrerer
- implikasjoner
- viktig
- in
- unøyaktig
- inkludere
- inkluderer
- innlemme
- inkorporerer
- feil
- Øke
- økt
- indeks
- individuelt
- info
- informasjon
- Infrastruktur
- iboende
- iboende
- innledende
- indre
- innovative
- inngang
- f.eks
- instruksjoner
- inn
- påkalt
- påkaller
- utstedelse
- saker
- IT
- køyring
- Jobb
- bli medlem
- jpg
- kunnskap
- innsjøer
- Språk
- stor
- større
- LÆRE
- læring
- Nivå
- nivåer
- Tillatelse
- i likhet med
- BEGRENSE
- linje
- LLM
- ligger
- elsker
- maskin
- maskinlæring
- gjøre
- GJØR AT
- ledelse
- administrerende
- mange
- matematiske
- Kan..
- me
- meditasjon
- medium
- nevnt
- nevner
- melding
- meldinger
- metadata
- metode
- kunne
- minimere
- MIT
- Minske
- ML
- modell
- modeller
- MongoDB
- mer
- MS
- flere
- mangfold
- musikk
- mysql
- navn
- navn
- Naturlig
- Natural Language Processing
- Trenger
- behov
- Ny
- neste
- nlp
- ikke-kommersielt
- bærbare
- nå
- Antall
- mål
- of
- ofte
- on
- bare
- åpen
- Drift
- or
- rekkefølge
- original
- Annen
- vår
- produksjon
- utenfor
- samlet
- bestått
- lidenskapelig
- banen
- mønstre
- Ansatte
- ytelse
- utført
- personlig
- phd
- plato
- Platon Data Intelligence
- PlatonData
- vær så snill
- Post
- postgresql
- praksis
- forut
- presis
- forutsetninger
- presentere
- presentert
- Principal
- Problem
- prosess
- Prosesser
- prosessering
- ledetekster
- gi
- forutsatt
- gir
- formål
- Python
- spørsmål
- spørring
- spørsmål
- Rask
- raskt
- sitater
- fille
- vurdering
- rangeringer
- Lese
- klar
- realistisk
- motta
- mottatt
- anbefaler
- referere
- region
- i slekt
- relevant
- forbli
- forblir
- representere
- anmode
- påkrevd
- Krav
- Krever
- forskning
- bor
- løse
- løst
- Ressurser
- respekt
- svar
- resultere
- Resultater
- gjenfinning
- retur
- ikke sant
- reiser seg
- Risiko
- risikoer
- robust
- RAD
- Kjør
- sagemaker
- sake
- samme
- så
- scenario
- scenarier
- Vitenskap
- søker
- Sekund
- Seksjon
- se
- velg
- SELV
- selgere
- sendt
- server~~POS=TRUNC
- serverer
- tjeneste
- Tjenester
- sett
- bør
- Vis
- viser
- vist
- side
- signifikant
- Enkelt
- enkelhet
- forenkler
- enkelt
- tekstutdrag
- løsning
- Solutions
- LØSE
- noen
- kilde
- Kilder
- Spark
- spesialist
- spesielt
- Scene
- Begynn
- startet
- Tilstand
- Uttalelse
- status
- Trinn
- Steps
- Still
- lagring
- oppbevare
- lagret
- rett fram
- Strategisk
- String
- strukturert
- slik
- Støttes
- sikker
- syntaks
- SYS
- system
- Systemer
- bord
- Ta
- Target
- Oppgave
- Teknisk
- Technologies
- test
- testet
- tekst
- enn
- Det
- De
- navet
- deres
- Dem
- deretter
- Der.
- derfor
- Disse
- Tredje
- denne
- De
- tre
- Gjennom
- ganger
- Tittel
- titler
- til
- i dag
- Transformation
- prøve
- to
- typen
- typer
- ui
- etter
- gått
- forståelse
- med mindre
- Oppdater
- oppdatert
- us
- bruke
- brukt
- Bruker
- Brukere
- bruker
- ved hjelp av
- VALIDERE
- verdi
- variasjon
- ulike
- Varierende
- av
- visninger
- Wake
- gå
- Vei..
- we
- web
- Webapplikasjon
- webtjenester
- mens
- hvilken
- mens
- hvem sin
- vil
- med
- innenfor
- uten
- Arbeid
- arbeidsflyt
- skrive
- skriving
- X
- yoga
- Du
- Din
- deg selv
- zephyrnet