Dit bericht is geschreven in samenwerking met Stanislav Yeshchenko van Q4 Inc.
Bedrijven wenden zich tot Retrieval Augmented Generation (RAG) als een mainstreambenadering voor het bouwen van vraag- en antwoordchatbots. We blijven nieuwe uitdagingen zien die voortkomen uit de aard van het assortiment beschikbare datasets. Deze datasets zijn vaak een mix van numerieke en tekstgegevens, soms gestructureerd, ongestructureerd of semi-gestructureerd.
Q4 Inc. nodig om een โโaantal van deze uitdagingen aan te pakken in een van hun vele AI-gebruiksscenarioโs gebouwd op AWS. In dit bericht bespreken we een Q&A-botgebruiksscenario dat Q4 heeft geรฏmplementeerd, de uitdagingen die numerieke en gestructureerde datasets met zich meebrachten, en hoe Q4 concludeerde dat het gebruik van SQL een haalbare oplossing kan zijn. Ten slotte gaan we dieper in op hoe het Q4-team gebruikte Amazonebodem en SQLDatabaseChain om een โโop RAG gebaseerde oplossing met SQL-generatie te implementeren.
Gebruik case-overzicht
Q4 Inc., met hoofdkantoor in Toronto en kantoren in New York en Londen, is een toonaangevend platform voor toegang tot kapitaalmarkten dat de manier transformeert waarop emittenten, investeerders en verkopers efficiรซnt met elkaar in contact komen, communiceren en met elkaar omgaan. Het Q4 Platform faciliteert interacties op de kapitaalmarkten via IR-websiteproducten, oplossingen voor virtuele evenementen, engagementanalyses, investor relations Customer Relationship Management (CRM), aandeelhouders- en marktanalyse, toezicht en ESG-tools.
In het snelle en datagestuurde financiรซle landschap van vandaag spelen Investor Relations Officers (IRO's) een cruciale rol bij het bevorderen van de communicatie tussen een bedrijf en zijn aandeelhouders, analisten en investeerders. Als onderdeel van hun dagelijkse taken analyseren IRO's diverse datasets, waaronder CRM, eigendomsgegevens en aandelenmarktgegevens. Het geheel van deze gegevens wordt gebruikt om financiรซle rapporten te genereren, doelstellingen voor investeerdersrelaties vast te stellen en de communicatie met bestaande en potentiรซle investeerders te beheren.
Om tegemoet te komen aan de groeiende vraag naar efficiรซnt en dynamisch ophalen van gegevens, wilde Q4 een vraag- en antwoordtool voor chatbots creรซren die IRO's een intuรฏtieve en eenvoudige methode zou bieden om toegang te krijgen tot de noodzakelijke informatie die ze nodig hebben in een gebruiksvriendelijk formaat.
Het einddoel was om een โโchatbot te creรซren die publiek beschikbare gegevens naadloos zou integreren, samen met bedrijfseigen klantspecifieke gegevens uit het vierde kwartaal, met behoud van het hoogste niveau van beveiliging en gegevensprivacy. Wat de prestaties betreft, was het doel om een โโresponstijd voor vragen van seconden aan te houden om een โโpositieve ervaring voor eindgebruikers te garanderen.
De financiรซle markten zijn een gereguleerde sector waar grote belangen bij betrokken zijn. Het verstrekken van onjuiste of verouderde informatie kan het vertrouwen van investeerders en aandeelhouders aantasten, naast andere mogelijke risico's voor de privacy van gegevens. Q4 begrijpt de branche en de vereisten en stelt gegevensprivacy en responsnauwkeurigheid als leidende principes bij het evalueren van elke oplossing voordat deze op de markt kan worden gebracht.
Voor de proof of concept besloot Q4 een dataset voor financieel eigendom te gebruiken. De dataset bestaat uit tijdreeksgegevenspunten die het aantal activa in eigendom vertegenwoordigen; de transactiegeschiedenis tussen beleggingsinstellingen, particulieren en beursgenoteerde bedrijven; en nog veel meer elementen.
Omdat Q4 ervoor wilde zorgen dat het aan alle functionele en niet-functionele vereisten kon voldoen die we hebben besproken, moest het project ook commercieel haalbaar blijven. Dit werd gedurende het hele proces van besluitvorming over aanpak, architectuur, technologiekeuze en oplossingsspecifieke elementen gerespecteerd.
Experimenteren en uitdagingen
Het was vanaf het begin duidelijk dat Q4 grote taalmodellen (LLM's) zou moeten gebruiken om een โโmenselijke taalvraag te begrijpen en nauwkeurige antwoorden te genereren.
Hieronder volgen enkele van de experimenten die door het team zijn uitgevoerd, samen met de geรฏdentificeerde uitdagingen en geleerde lessen:
- Vooropleiding โ Q4 begreep de complexiteit en uitdagingen die gepaard gaan met het vooraf trainen van een LLM met behulp van zijn eigen dataset. Het werd al snel duidelijk dat deze aanpak veel middelen vergt en veel niet-triviale stappen omvat, zoals gegevensvoorverwerking, training en evaluatie. Naast de moeite die het met zich meebrengt, zou het ook onbetaalbaar zijn. Gezien de aard van de tijdreeksdataset realiseerde Q4 zich ook dat deze voortdurend incrementele pre-training zou moeten uitvoeren naarmate er nieuwe gegevens binnenkwamen. Hiervoor was een speciaal interdisciplinair team nodig met expertise op het gebied van datawetenschap, machinaal leren en domeinkennis. kennis.
- Scherpstellen โ Het verfijnen van een vooraf getraind funderingsmodel (FM), waarbij gebruik wordt gemaakt van verschillende gelabelde voorbeelden. Deze aanpak kende aanvankelijk enig succes, maar in veel gevallen vormde modelhallucinatie een uitdaging. Het model had moeite om genuanceerde contextuele aanwijzingen te begrijpen en leverde onjuiste resultaten op.
- RAG met semantisch zoeken โ Conventionele RAG met semantisch zoeken was de laatste stap vรณรณr de overstap naar het genereren van SQL. Het team experimenteerde met zoeken, semantisch zoeken en insluitingen om context te extraheren. Tijdens het insluitingsexperiment werd de dataset omgezet in insluitingen, opgeslagen in een vectordatabase en vervolgens gekoppeld aan de insluitingen van de vraag om context te extraheren. De opgehaalde context in een van de drie experimenten werd vervolgens gebruikt om de oorspronkelijke prompt aan te vullen als invoer voor de LLM. Deze aanpak werkte goed voor op tekst gebaseerde inhoud, waarbij de gegevens bestaan โโuit natuurlijke taal met woorden, zinnen en alinea's. Gezien de aard van de dataset van het vierde kwartaal, die voornamelijk bestaat uit financiรซle gegevens bestaande uit cijfers, financiรซle transacties, aandelenkoersen en datums, waren de resultaten in alle drie de gevallen niet optimaal. Zelfs bij het gebruik van insluitingen hadden de uit cijfers gegenereerde insluitingen moeite met de rangschikking van overeenkomsten, en leidden ze in veel gevallen tot het ophalen van onjuiste informatie.
Conclusie van Q4: SQL genereren is de weg voorwaarts
Gezien de uitdagingen waarmee de conventionele RAG-methodologie te maken kreeg, begon het team het genereren van SQL te overwegen. Het idee was om de LLM te gebruiken om eerst een SQL-instructie te genereren op basis van de gebruikersvraag, die in natuurlijke taal aan de LLM werd gepresenteerd. De gegenereerde query wordt vervolgens uitgevoerd op de database om de relevante context op te halen. De context wordt ten slotte gebruikt om de invoerprompt voor een samenvattingsstap te vergroten.
De hypothese van Q4 was dat ze, om een โโhogere herinnering voor de ophaalstap te krijgen, specifiek voor de numerieke dataset, eerst SQL moesten genereren op basis van de gebruikersvraag. Er werd aangenomen dat dit niet alleen de nauwkeurigheid zou vergroten, maar ook de context voor een bepaalde vraag binnen het zakelijke domein zou houden. Voor het genereren van query's en om nauwkeurige SQL te genereren, moest Q4 de LLM volledig contextbewust maken van hun datasetstructuur. Dit betekende dat de prompt het databaseschema, een paar voorbeeldgegevensrijen en voor mensen leesbare velduitleg moest bevatten voor de velden die niet gemakkelijk te begrijpen zijn.
Op basis van de eerste tests liet deze methode geweldige resultaten zien. De LLM, uitgerust met alle benodigde informatie, kon de juiste SQL genereren, die vervolgens tegen de database werd uitgevoerd om de juiste context op te halen. Na met het idee te hebben geรซxperimenteerd, besloot Q4 dat het genereren van SQL de beste oplossing was om uitdagingen op het gebied van contextextractie voor hun eigen specifieke dataset aan te pakken.
Laten we beginnen met het beschrijven van de algehele oplossingsaanpak, deze opsplitsen in de componenten en vervolgens de stukjes samenvoegen.
Overzicht oplossingen
LLM's zijn grote modellen met miljarden parameters die vooraf zijn getraind met behulp van zeer grote hoeveelheden gegevens uit verschillende bronnen. Vanwege de breedte van de trainingsdatasets wordt van LLM's verwacht dat ze algemene kennis hebben op verschillende domeinen. LLM's staan โโook bekend om hun redeneervermogen, dat van model tot model varieert. Dit algemene gedrag kan worden geoptimaliseerd voor een specifiek domein of een specifieke sector door een basismodel verder te optimaliseren met behulp van aanvullende domeinspecifieke pre-trainingsgegevens of door het verfijnen van gelabelde gegevens. Gegeven de juiste context, metadata en instructies kan een goed geselecteerde LLM voor algemene doeleinden SQL van goede kwaliteit produceren, zolang deze toegang heeft tot de juiste domeinspecifieke context.
In de use case van Q4 beginnen we met het vertalen van de klantvraag naar SQL. We doen dit door de gebruikersvraag, het databaseschema, enkele voorbeelddatabaserijen en gedetailleerde instructies te combineren als een prompt voor de LLM om SQL te genereren. Nadat we de SQL hebben, kunnen we indien nodig een validatiestap uitvoeren. Als we tevreden zijn met de kwaliteit van de SQL, voeren we de query uit op de database om de relevante context op te halen die we nodig hebben voor de volgende stap. Nu we de relevante context hebben, kunnen we de oorspronkelijke vraag van de gebruiker, de opgehaalde context en een reeks instructies terugsturen naar de LLM om een โโuiteindelijk samengevat antwoord te produceren. Het doel van de laatste stap is om de LLM de resultaten te laten samenvatten en een contextueel en accuraat antwoord te geven dat vervolgens aan de gebruiker kan worden doorgegeven.
De keuze van de LLM die in elke fase van het proces wordt gebruikt, heeft grote invloed op de nauwkeurigheid, kosten en prestaties. Het kiezen van een platform of technologie die u de flexibiliteit biedt om te schakelen tussen LLM's binnen dezelfde use case (meerdere LLM-trips voor verschillende taken), of tussen verschillende use cases, kan nuttig zijn bij het optimaliseren van de kwaliteit van de output, latentie en kosten . We bespreken de keuze voor LLM later in dit bericht.
Bouwstenen voor oplossingen
Nu we de aanpak op een hoog niveau hebben belicht, gaan we dieper in op de details, te beginnen met de bouwstenen van de oplossing.
Amazonebodem
Amazon Bedrock is een volledig beheerde service die een keuze biedt uit goed presterende FM's van toonaangevende bedrijven, waaronder AI21 Labs, Anthropic, Cohere, Meta, Stability AI en Amazon. Amazon Bedrock biedt ook een breed scala aan tools die nodig zijn om generatieve AI-applicaties te bouwen, het ontwikkelingsproces te vereenvoudigen en de privacy en veiligheid te behouden. Bovendien kunt u bij Amazon Bedrock kiezen uit verschillende FM-opties, en kunt u de modellen privรฉ verder verfijnen met behulp van uw eigen gegevens om de reacties van modellen af โโte stemmen op uw gebruiksvereisten. Amazon Bedrock is volledig serverloos en heeft geen onderliggende infrastructuur om de uitbreiding van de toegang tot beschikbare modellen via รฉรฉn enkele API te beheren. Ten slotte ondersteunt Amazon Bedrock verschillende beveiligings- en privacyvereisten, waaronder HIPAA-geschiktheid en naleving van de AVG.
In de oplossing van Q4 gebruiken we Amazon Bedrock als een serverloze, op API gebaseerde modelbouwsteen met meerdere funderingen. Omdat we van plan zijn om binnen dezelfde use case meerdere uitstapjes naar de LLM te maken, kunnen we op basis van het taaktype het model kiezen dat het meest optimaal is voor een specifieke taak, of het nu gaat om het genereren, valideren of samenvatten van SQL.
LangChain
LangChain is een open source integratie- en orkestratieframework met een reeks vooraf gebouwde modules (I/O, retrieval, ketens en agenten) die u kunt gebruiken om taken tussen FM's, gegevensbronnen en tools te integreren en te orkestreren. Het raamwerk vergemakkelijkt het bouwen van generatieve AI-applicaties waarbij meerdere stappen moeten worden georkestreerd om de gewenste output te produceren, zonder dat je helemaal opnieuw code hoeft te schrijven. LangChain ondersteunt Amazon Bedrock als een model-API met meerdere funderingen.
Specifiek voor de use case van Q4 gebruiken we LangChain voor het coรถrdineren en orkestreren van taken in onze workflow, inclusief verbinding maken met gegevensbronnen en LLM's. Deze aanpak heeft onze code vereenvoudigd omdat we de bestaande LangChain-modules kunnen gebruiken.
SQLDatabaseChain
SQLDatabaseChain is een LangChain-keten die kan worden geรฏmporteerd uit langchain_experimental. SLDatabaseChain maakt het eenvoudig om SQL-query's te maken, implementeren en uit te voeren, met behulp van effectieve tekst-naar-SQL-conversies en -implementaties.
In ons gebruiksscenario gebruiken we SQLDatabaseChain bij het genereren van SQL, waardoor de interacties tussen de database en de LLM worden vereenvoudigd en georkestreerd.
De dataset
Onze gestructureerde dataset kan zich in een SQL-database, data lake of datawarehouse bevinden, zolang we ondersteuning voor SQL hebben. In onze oplossing kunnen we elk type dataset gebruiken met SQL-ondersteuning; dit moet worden geabstraheerd van de oplossing en mag de oplossing op geen enkele manier veranderen.
Implementatie details
Nu we de oplossingsaanpak, de oplossingscomponenten, de keuze van de technologie en de tools hebben verkend, kunnen we de stukken in elkaar zetten. Het volgende diagram benadrukt de end-to-end-oplossing.
Laten we de implementatiedetails en de processtroom doornemen.
Genereer de SQL-query
Om het coderen te vereenvoudigen, gebruiken we bestaande raamwerken. We gebruiken LangChain als orkestratieframework. We beginnen met de invoerfase, waar we de gebruikersvraag in natuurlijke taal ontvangen.
In deze eerste fase nemen we deze invoer en genereren we een gelijkwaardige SQL die we op de database kunnen uitvoeren voor contextextractie. Om SQL te genereren, gebruiken we SQLDatabaseChain, dat afhankelijk is van Amazon Bedrock voor toegang tot onze gewenste LLM. Met Amazon Bedrock krijgen we met behulp van รฉรฉn enkele API toegang tot een aantal onderliggende LLM's en kunnen we de juiste kiezen voor elke LLM-reis die we maken. We brengen eerst een verbinding tot stand met de database en halen het vereiste tabelschema op, samen met enkele voorbeeldrijen uit de tabellen die we willen gebruiken.
Tijdens onze tests hebben we vastgesteld dat twee tot vijf rijen tabelgegevens voldoende zijn om voldoende informatie aan het model te geven zonder al te veel onnodige overhead toe te voegen. Drie rijen waren net genoeg om context te bieden, zonder het model te overweldigen met al te veel input. In ons gebruiksscenario zijn we begonnen met Anthropic Claude V2. Het model staat bekend om zijn geavanceerde redenering en gearticuleerde contextuele reacties, mits voorzien van de juiste context en instructies. Als onderdeel van de instructies kunnen we meer verduidelijkende details aan de LLM toevoegen. We kunnen die kolom bijvoorbeeld beschrijven Comp_NAME
staat voor de bedrijfsnaam. We kunnen nu de prompt samenstellen door de gebruikersvraag zoals deze is, het databaseschema, drie voorbeeldrijen uit de tabel die we willen gebruiken, en een reeks instructies te combineren om de vereiste SQL in schoon SQL-formaat te genereren zonder opmerkingen of toevoegingen.
Alle gecombineerde invoerelementen worden beschouwd als de modelinvoerprompt. Een goed ontworpen invoerprompt die is afgestemd op de voorkeurssyntaxis van het model heeft een grote invloed op zowel de kwaliteit als de prestaties van de uitvoer. De keuze van het model dat voor een specifieke taak moet worden gebruikt, is ook belangrijk, niet alleen omdat dit van invloed is op de uitvoerkwaliteit, maar ook omdat dit gevolgen heeft voor de kosten en de prestaties.
We bespreken modelselectie en prompt-engineering en -optimalisatie later in dit bericht, maar het is de moeite waard om op te merken dat we voor de fase van het genereren van zoekopdrachten hebben gemerkt dat Claude Instant vergelijkbare resultaten kon produceren, vooral als de gebruikersvraag goed geformuleerd en niet zo geavanceerd was. Claude V2 produceerde echter betere resultaten, zelfs met complexere en indirecte gebruikersinvoer. Dat hebben we in sommige gevallen geleerd Claude Instant kan voldoende nauwkeurigheid bieden tegen een betere latentie en prijs, ons pleidooi voor het genereren van zoekopdrachten was beter geschikt voor Claude V2.
Controleer de SQL-query
Onze volgende stap is het verifiรซren dat de LLM met succes de juiste querysyntaxis heeft gegenereerd en dat de query contextueel zinvol is, rekening houdend met de databaseschema's en de gegeven voorbeeldrijen. Voor deze verificatiestap kunnen we terugkeren naar de native queryvalidatie binnen SQLDatabaseChain, of we kunnen een tweede trip naar de LLM uitvoeren, inclusief de gegenereerde query samen met de validatie-instructie.
Als we een LLM gebruiken voor de validatiestap, kunnen we dezelfde LLM gebruiken als voorheen (Claude V2) of een kleinere, beter presterende LLM voor een eenvoudiger taak, zoals Claude Instant. Omdat we Amazon Bedrock gebruiken, zou dit een heel eenvoudige aanpassing moeten zijn. Met dezelfde API kunnen we de modelnaam in onze API-aanroep wijzigen, die voor de wijziging zorgt. Het is belangrijk op te merken dat een kleinere LLM in de meeste gevallen een betere efficiรซntie kan bieden op het gebied van zowel kosten als latentie, en dat deze moet worden overwogen, zolang u maar de gewenste nauwkeurigheid krijgt. In ons geval bleek uit testen dat de gegenereerde zoekopdracht consistent accuraat was en de juiste syntaxis had. Omdat we dat wisten, konden we deze validatiestap overslaan en besparen op latentie en kosten.
Voer de SQL-query uit
Nu we de geverifieerde SQL-query hebben, kunnen we de SQL-query op de database uitvoeren en de relevante context ophalen. Dit zou een eenvoudige stap moeten zijn.
We nemen de gegenereerde context, verstrekken deze aan de LLM van onze keuze met de initiรซle gebruikersvraag en enige instructie, en vragen het model om een โโcontextuele en gearticuleerde samenvatting te genereren. Vervolgens presenteren we de gegenereerde samenvatting aan de gebruiker als antwoord op de initiรซle vraag, allemaal afgestemd op de context die uit onze dataset is gehaald.
Voor de LLM die betrokken is bij de samenvattingsstap kunnen we Titan Text Express of Claude Instant gebruiken. Ze zouden allebei goede opties bieden voor de samenvattingstaak.
Applicatie-integratie
De Q&A-chatbotfunctie is een van de AI-diensten van Q4. Om modulariteit en schaalbaarheid te garanderen, bouwt Q4 AI-services als microservices die via APIโs toegankelijk zijn voor Q4-applicaties. Deze API-gebaseerde aanpak maakt een naadloze integratie met het Q4 Platform-ecosysteem mogelijk en vergemakkelijkt het blootstellen van de mogelijkheden van de AI-diensten aan het volledige pakket platformapplicaties.
Het belangrijkste doel van de AI-diensten is het bieden van eenvoudige mogelijkheden voor het ophalen van gegevens uit elke openbare of bedrijfseigen gegevensbron, waarbij gebruik wordt gemaakt van natuurlijke taal als invoer. Bovendien bieden de AI-diensten extra abstractielagen om ervoor te zorgen dat aan functionele en niet-functionele vereisten, zoals gegevensprivacy en beveiliging, wordt voldaan. Het volgende diagram demonstreert het integratieconcept.
Implementatie-uitdagingen
Naast de uitdagingen die voortvloeien uit de aard van de gestructureerde, numerieke dataset die we eerder hebben besproken, werd het vierde kwartaal geconfronteerd met een aantal andere implementatie-uitdagingen die moesten worden aangepakt.
LLM-selectie en prestaties
Het selecteren van de juiste LLM voor de taak is van cruciaal belang omdat dit een directe invloed heeft op de kwaliteit van de output en de prestaties (retourlatentie). Hier zijn enkele factoren die een rol spelen bij het LLM-selectieproces:
- Type LLM โ De manier waarop de FM's zijn ontworpen en de initiรซle gegevens waarop het model vooraf is getraind, bepalen in welke soorten taken de LLM goed zou zijn en hoe goed deze zal zijn. Een tekst-LLM zou bijvoorbeeld goed zijn in het genereren en samenvatten van tekst, terwijl een tekst-naar-afbeelding- of afbeelding-naar-tekst-model meer gericht zou zijn op beeldanalyse en generatietaken.
- LLM-grootte โ FM-groottes worden gemeten aan de hand van het aantal modelparameters dat een bepaald model heeft, doorgaans in miljarden voor moderne LLMโs. Hoe groter het model, hoe duurder het is om het in eerste instantie te trainen of vervolgens te verfijnen. Aan de andere kant geldt voor dezelfde modelarchitectuur in het algemeen dat hoe groter het model is, des te slimmer we verwachten dat het het soort taak zal uitvoeren waarop het is gericht.
- LLM-prestaties โ Hoe groter het model, hoe meer tijd het kost om uitvoer te genereren, ervan uitgaande dat u dezelfde reken- en I/O-parameters gebruikt (prompt- en uitvoergrootte). Bovendien worden de prestaties voor dezelfde modelgrootte sterk beรฏnvloed door hoe geoptimaliseerd uw prompt is, de grootte van de I/O-tokens en de duidelijkheid en syntaxis van de prompt. Een goed ontworpen prompt, samen met een geoptimaliseerde I/O-tokengrootte, kan de responstijd van het model verbeteren.
Houd daarom bij het optimaliseren van uw taak rekening met de volgende best practices:
- Kies een model dat geschikt is voor de taak die u moet uitvoeren
- Selecteer de kleinste modelgrootte die de nauwkeurigheid kan bieden waarnaar u op zoek bent
- Optimaliseer uw promptstructuur en wees zo specifiek mogelijk met de instructies op een manier die voor het model gemakkelijk te begrijpen is
- Gebruik de kleinste invoerprompt die voldoende instructie en context kan bieden om het nauwkeurigheidsniveau te bereiken waarnaar u op zoek bent
- Beperk de uitvoergrootte tot de kleinste grootte die voor u zinvol kan zijn en voldoe aan uw uitvoervereisten
Rekening houdend met de factoren voor modelselectie en prestatie-optimalisatie, gingen we aan de slag om onze use case voor het genereren van SQL te optimaliseren. Na wat testen merkten we dat, op voorwaarde dat we de juiste context en instructies hadden, Claude Instant, met dezelfde snelle gegevens, een vergelijkbare kwaliteit SQL zou produceren als Claude V2, tegen een veel betere prestatie en prijs. Dit geldt wanneer de gebruikersinvoer directer en eenvoudiger van aard is. Voor meer geavanceerde invoer was Claude V2 nodig om de gewenste nauwkeurigheid te produceren.
Door dezelfde logica toe te passen op de samenvattingstaak kwamen we tot de conclusie dat het gebruik van Claude Instant of Titan Text Express de vereiste nauwkeurigheid zou opleveren bij een veel beter prestatiepunt dan wanneer we een groter model zoals Claude V2 zouden gebruiken. Titan Text Expressed bood ook betere prijs-kwaliteitverhouding, zoals we eerder bespraken.
De orkestratie-uitdaging
We realiseerden ons dat er veel moet worden georkestreerd voordat we een betekenisvol uitvoerantwoord voor de gebruikersvraag kunnen krijgen. Zoals blijkt uit het oplossingsoverzicht omvatte het proces meerdere databasetrips en meerdere LLM-trips die met elkaar verweven zijn. Als we helemaal opnieuw hadden moeten bouwen, hadden we een aanzienlijke investering moeten doen in het ongedifferentieerde zware werk om de basiscode gereed te krijgen. We zijn snel overgestapt op het gebruik van LangChain als orkestratieframework, waarbij we hebben geprofiteerd van de kracht van de open source-gemeenschap en bestaande modules hebben hergebruikt zonder het wiel opnieuw uit te vinden.
De SQL-uitdaging
We realiseerden ons ook dat het genereren van SQL niet zo eenvoudig is als contextextractiemechanismen zoals semantisch zoeken of het gebruik van inbedding. We moeten eerst het databaseschema en een paar voorbeeldrijen ophalen om op te nemen in onze prompt voor de LLM. Er is ook de SQL-validatiefase, waarin we moesten communiceren met zowel de database als de LLM. SQLDatabaseChain was de voor de hand liggende toolkeuze. Omdat het deel uitmaakt van LangChain, was het eenvoudig aan te passen, en nu kunnen we de SQL-generatie en -verificatie beheren met behulp van de keten, waardoor de hoeveelheid werk die we moesten doen tot een minimum wordt beperkt.
Prestatie-uitdagingen
Met het gebruik van Claude V2 en na een goede, snelle engineering (die we in de volgende sectie bespreken), waren we in staat SQL van hoge kwaliteit te produceren. Gezien de kwaliteit van de gegenereerde SQL, zijn we gaan kijken hoeveel waarde de validatiefase daadwerkelijk toevoegt. Na verdere analyse van de resultaten werd het duidelijk dat de kwaliteit van de gegenereerde SQL consistent accuraat was op een manier die de kosten/baten van het toevoegen van een SQL-validatiefase ongunstig maakte. Uiteindelijk hebben we de SQL-validatiefase geรซlimineerd zonder de kwaliteit van onze output negatief te beรฏnvloeden en hebben we de SQL-validatie-round trip-tijd afgeschoren.
Naast het optimaliseren voor een meer kosten- en prestatie-efficiรซntere LLM voor de samenvattingsstap, konden we Titan Text Express gebruiken om betere prestaties en kostenefficiรซntie te verkrijgen.
Verdere prestatie-optimalisatie omvatte het verfijnen van het proces voor het genereren van query's met behulp van efficiรซnte prompt-engineeringtechnieken. In plaats van een overvloed aan tokens te bieden, lag de nadruk op het leveren van zo min mogelijk invoertokens, in de juiste syntaxis die het model leert begrijpen, en met de minimale maar toch optimale set instructies. We bespreken dit meer in de volgende sectie. Het is een belangrijk onderwerp dat niet alleen hier van toepassing is, maar ook in andere gebruiksscenario's.
Snelle engineering en optimalisatie
Je kunt Claude op Amazon Bedrock aanpassen voor verschillende zakelijke gebruiksscenario's als de juiste snelle technische technieken worden gebruikt. Claude treedt voornamelijk op als gespreksassistent, waarbij gebruik wordt gemaakt van een mens/assistent-format. Claude is getraind in het invullen van tekst voor de rol van assistent. Gegeven de gewenste instructies en snelle afhandeling, kunnen we onze prompts voor Claude optimaliseren met behulp van verschillende technieken.
We beginnen met een goed opgemaakte promptsjabloon die een geldige voltooiing oplevert. Vervolgens kunnen we de reacties verder optimaliseren door te experimenteren met prompts met verschillende sets invoer die representatief zijn voor gegevens uit de echte wereld. Het wordt aanbevolen om veel input te krijgen tijdens het ontwikkelen van een promptsjabloon. U kunt ook afzonderlijke sets promptontwikkelingsgegevens en testgegevens gebruiken.
Een andere manier om de reactie van Claude te optimaliseren is door te experimenteren en te herhalen door regels, instructies en instructies toe te voegen nuttige optimalisaties. Uit deze optimalisaties kun je verschillende soorten voltooiingen bekijken, bijvoorbeeld door Claude te vertellen 'Ik weet het niet' te zeggen om hallucinaties te voorkomen, door stap voor stap na te denken, door promptchaining te gebruiken, ruimte te geven aan 'denken' terwijl dit reacties genereert en dubbele controle op begrip en nauwkeurigheid.
Laten we onze taak voor het genereren van query's gebruiken en enkele van de technieken bespreken die we hebben gebruikt om onze prompt te optimaliseren. Er waren een paar kernelementen die onze inspanningen voor het genereren van zoekopdrachten ten goede kwamen:
- Gebruik van de juiste menselijke/assistent-syntaxis
- XML-tags gebruiken (Claude respecteert en begrijpt XML-tags)
- Het toevoegen van duidelijke instructies voor het model om hallucinaties te voorkomen
Het volgende algemene voorbeeld laat zien hoe we de menselijke/assistent-syntaxis hebben gebruikt, XML-tags hebben toegepast en instructies hebben toegevoegd om de uitvoer tot SQL te beperken en het model te instrueren om "sorry, ik kan niet helpen" te zeggen als het geen relevante SQL kan produceren . De XML-tags werden gebruikt om de instructies, aanvullende hints, het databaseschema, aanvullende tabeluitleg en voorbeeldrijen in te kaderen.
De uiteindelijke werkende oplossing
Nadat we alle uitdagingen hadden aangepakt die tijdens de proof of concept waren geรฏdentificeerd, hadden we aan alle oplossingsvereisten voldaan. Q4 was tevreden over de kwaliteit van de SQL gegenereerd door de LLM. Dit geldt voor eenvoudige taken waarvoor alleen een WHERE-clausule nodig was om de gegevens te filteren, en ook voor complexere taken waarvoor contextgebaseerde aggregaties met GROUP BY en wiskundige functies nodig waren. De end-to-end latentie van de totale oplossing viel binnen wat als acceptabel werd gedefinieerd voor de use case: seconden van รฉรฉn cijfer. Dit was allemaal te danken aan de keuze voor een optimale LLM in elke fase, een goede snelle engineering, het elimineren van de SQL-verificatiestap en het gebruik van een efficiรซnte LLM voor de samenvattingsstap (Titan Text Express of Claude Instant).
Het is vermeldenswaard dat het gebruik van Amazon Bedrock als een volledig beheerde service en de mogelijkheid om via dezelfde API toegang te krijgen tot een reeks LLM's experimenten en naadloos schakelen tussen LLM's mogelijk maakte door de modelnaam in de API-aanroep te wijzigen. Met dit niveau van flexibiliteit kon Q4 voor elke LLM-oproep de meest performante LLM kiezen op basis van de aard van de taak, of het nu gaat om het genereren van query's, verificatie of samenvatting.
Conclusie
Er bestaat niet รฉรฉn oplossing die geschikt is voor alle gebruiksscenario's. Bij een RAG-aanpak hangt de kwaliteit van de output sterk af van het bieden van de juiste context. Het extraheren van de juiste context is essentieel, en elke dataset is anders en heeft zijn unieke kenmerken.
In dit artikel hebben we aangetoond dat voor numerieke en gestructureerde datasets het gebruik van SQL om de context te extraheren die voor augmentatie wordt gebruikt, tot gunstiger resultaten kan leiden. We hebben ook aangetoond dat raamwerken zoals LangChain de codeerinspanning kunnen minimaliseren. Daarnaast bespraken we de noodzaak om binnen dezelfde gebruikssituatie tussen LLM's te kunnen schakelen om de meest optimale nauwkeurigheid, prestaties en kosten te bereiken. Ten slotte hebben we benadrukt hoe Amazon Bedrock, omdat het serverloos is en een verscheidenheid aan LLM's onder de motorkap heeft, de flexibiliteit biedt die nodig is om veilige, performante en kostengeoptimaliseerde applicaties te bouwen met zo min mogelijk zwaar werk.
Begin uw reis naar het bouwen van generatieve, op AI gebaseerde applicaties door een gebruiksscenario te identificeren dat van waarde is voor uw bedrijf. Het genereren van SQL kan, zoals het Q4-team heeft geleerd, een game changer zijn bij het bouwen van slimme applicaties die integreren met uw datastores, waardoor het omzetpotentieel wordt ontsloten.
Over de auteurs
Tamer Soliman is een Senior Solutions Architect bij AWS. Hij helpt Independent Software Vendor (ISV)-klanten bij het innoveren, bouwen en schalen van AWS. Hij heeft meer dan twintig jaar ervaring in de sector op het gebied van advies, training en professionele dienstverlening. Hij is een uitvinder van meerdere patenten met drie toegekende patenten en zijn ervaring omvat meerdere technologiedomeinen, waaronder telecom, netwerken, applicatie-integratie, AI/ML en cloudimplementaties. Hij is gespecialiseerd in AWS-netwerken en heeft een diepgaande passie voor machine leaning, AI en generatieve AI.
Mani Khanuja is een Tech Lead โ Generative AI Specialists, auteur van het boek โ Applied Machine Learning and High Performance Computing on AWS, en lid van de Raad van Bestuur van Women in Manufacturing Education Foundation Board. Ze leidt machine learning (ML)-projecten in verschillende domeinen, zoals computer vision, natuurlijke taalverwerking en generatieve AI. Ze helpt klanten bij het bouwen, trainen en implementeren van grote machine learning-modellen op schaal. Ze spreekt op interne en externe conferenties zoals re:Invent, Women in Manufacturing West, YouTube-webinars en GHC 23. In haar vrije tijd maakt ze graag lange runs langs het strand.
Stanislav Jesjtsjenko is een softwarearchitect bij Q4 Inc.. Hij heeft meer dan tien jaar ervaring in de sector op het gebied van softwareontwikkeling en systeemarchitectuur. Zijn diverse achtergrond, waaronder functies als technisch leider en senior full-stackontwikkelaar, vormt de drijvende kracht achter zijn bijdragen aan het bevorderen van de innovatie van het Q4-platform. Stanislav is toegewijd aan het stimuleren van technische innovatie en het vormgeven van strategische oplossingen in het veld.
- 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/how-q4-inc-used-amazon-bedrock-rag-and-sqldatabasechain-to-address-numerical-and-structured-dataset-challenges-building-their-qa-chatbot/
- : heeft
- :is
- :niet
- :waar
- $UP
- 100
- 118
- 125
- 15%
- 23
- 7
- a
- capaciteiten
- vermogen
- in staat
- abstractie
- overvloed
- aanvaardbaar
- toegang
- beschikbaar
- Account
- nauwkeurigheid
- accuraat
- Bereiken
- over
- Handelingen
- werkelijk
- aanpassen
- toegevoegd
- toe te voegen
- toevoeging
- Extra
- Daarnaast
- toevoegingen
- adres
- aangesproken
- Aanpassing
- vergevorderd
- oprukkende
- Voordeel
- Na
- tegen
- agenten
- aggregaat
- AI
- AI-diensten
- ai-gebruiksgevallen
- AI / ML
- Gericht
- richten
- uitgelijnd
- Alles
- toelaten
- toegestaan
- langs
- ook
- Hoewel
- am
- Amazone
- Amazon Web Services
- bedragen
- hoeveelheden
- an
- analyse
- analisten
- analytics
- analyseren
- het analyseren van
- en
- Nog een
- beantwoorden
- antwoorden
- antropisch
- elke
- iets
- api
- APIs
- toepasselijk
- Aanvraag
- toepassingen
- toegepast
- nadering
- architectuur
- ZIJN
- AS
- vragen
- Activa
- Assistent
- bijgestaan
- assortiment
- At
- vergroten
- aangevuld
- auteur
- Beschikbaar
- bewust
- AWS
- terug
- achtergrond
- gebaseerde
- basis-
- BE
- Beach
- werd
- omdat
- geweest
- vaardigheden
- Begin
- gedrag
- wezen
- geloofde
- heilzaam
- BEST
- 'best practices'
- Betere
- tussen
- miljarden
- Blok
- Blokken
- boord
- raad van bestuur
- boek
- Bot
- zowel
- breedte
- Breken
- breed
- bouw
- Gebouw
- bouwt
- bebouwd
- bedrijfsdeskundigen
- maar
- by
- Bellen
- kwam
- CAN
- Kan krijgen
- mogelijkheden
- bekwaamheid
- hoofdstad
- Kapitaalmarkten
- verzorging
- geval
- gevallen
- keten
- ketens
- uitdagen
- uitdagingen
- uitdagingen bouwen
- verandering
- Wisselaar
- veranderende
- kenmerken
- Chatbot
- chatbots
- keuze
- Kies
- het kiezen van
- helderheid
- schoon
- duidelijk
- dichterbij
- Cloud
- code
- codering
- Kolom
- gecombineerde
- combineren
- hoe
- opmerkingen
- commercieel
- communiceren
- Communicatie
- gemeenschap
- Bedrijven
- afstand
- vergelijkbaar
- voltooiing
- complex
- ingewikkeldheid
- nakoming
- componenten
- begrijpen
- Berekenen
- computer
- Computer visie
- computergebruik
- concept
- concludeert
- gesloten
- conclusie
- uitgevoerd
- conferenties
- Verbinden
- Wij verbinden
- versterken
- Overwegen
- beschouwd
- aangezien
- consistent
- bestaande uit
- bestaat uit
- bouwen
- consulting
- content
- verband
- contextual
- voortzetten
- doorlopend
- bijdragen
- conventioneel
- spraakzaam
- conversies
- geconverteerd
- coรถrdineren
- Kern
- te corrigeren
- Kosten
- kon
- en je merk te creรซren
- kritisch
- CRM
- cruciaal
- klant
- Klanten
- dagelijks
- gegevens
- Datameer
- data punten
- data Privacy
- Gegevensprivacy en beveiliging
- data science
- Gegevensgestuurde
- Database
- datasets
- Data
- decennium
- decennia
- beslist
- Beslissen
- toegewijd aan
- geacht
- gedefinieerd
- Vraag
- gedemonstreerd
- demonstreert
- afhankelijk
- implementeren
- implementaties
- beschrijven
- beschrijven
- gewenste
- gedetailleerd
- gegevens
- bepaalt
- Ontwikkelaar
- het ontwikkelen van
- Ontwikkeling
- anders
- directe
- direct
- Raad van bestuur
- bespreken
- besproken
- duiken
- diversen
- do
- domein
- domeinen
- Dont
- dubbel checken
- beneden
- aandrijving
- twee
- gedurende
- dynamisch
- elk
- Vroeger
- En het is heel gemakkelijk
- ecosysteem
- Onderwijs
- effectief
- doeltreffendheid
- doeltreffend
- efficiรซnt
- inspanning
- inspanningen
- beide
- geeft je de mogelijkheid
- verkiesbaarheid
- elimineren
- opkomende
- loondienst
- maakt
- einde
- eind tot eind
- afgelopen
- toegewijd
- engagement
- Engineering
- genoeg
- verzekeren
- uitgerust
- Gelijkwaardig
- ESG
- vooral
- oprichten
- evalueren
- evaluatie
- Zelfs
- EVENTS
- Alle
- voorbeeld
- voorbeelden
- bestaand
- verwachten
- verwacht
- duur
- ervaring
- experiment
- experimenten
- expert
- expertise
- Nagegaan
- uitdrukkelijk
- uitgedrukt
- verlenging
- extern
- extract
- extractie
- geconfronteerd
- vergemakkelijkt
- factoren
- fast-paced
- gunstig
- uitvoerbaar
- weinig
- veld-
- Velden
- vullen
- filter
- finale
- Tot slot
- financieel
- financiรซle data
- Voornaam*
- Flexibiliteit
- stroom
- Focus
- volgen
- volgend
- Voor
- formaat
- Naar voren
- het bevorderen van
- gevonden
- Foundation
- FRAME
- Achtergrond
- frameworks
- Gratis
- oppompen van
- vol
- Volledige stapel
- geheel
- functioneel
- functies
- verder
- spel
- game-changer
- GDPR
- GDPR naleving
- afgestemd
- Algemeen
- voortbrengen
- gegenereerde
- genereert
- het genereren van
- generatie
- generatief
- generatieve AI
- krijgen
- het krijgen van
- Geven
- gegeven
- geeft
- Vrijgevigheid
- Go
- doel
- Doelen
- goed
- verleend
- groot
- Groep
- Groeiend
- HAD
- hand
- gelukkig
- Hebben
- met
- he
- Het hoofdkantoor is gevestigd
- zwaar
- zwaar tillen
- hulp
- helpt
- haar
- hier
- Hoge
- goed presterende
- hoogwaardige
- hoger
- hoogst
- Gemarkeerd
- highlights
- zeer
- hints
- zijn
- geschiedenis
- kap
- Hoe
- Echter
- HTTPS
- menselijk
- leesbare
- i
- idee
- geรฏdentificeerd
- het identificeren van
- if
- beeld
- Impact
- beรฏnvloed
- impact
- Effecten
- uitvoeren
- uitvoering
- implementaties
- geรฏmplementeerd
- implicaties
- belangrijk
- verbeteren
- in
- Anders
- Inc
- omvatten
- Inclusief
- Laat uw omzet
- incrementele
- onafhankelijk
- individuen
- -industrie
- informatie
- Infrastructuur
- eerste
- eerste
- innoveren
- Innovatie
- invoer
- ingangen
- moment
- instellingen
- instructies
- integreren
- integratie
- voornemens zijn
- interactie
- interacties
- intern
- verweven
- in
- intuรฏtief
- investering
- investeerder
- Investeerders
- betrokken zijn
- uitgevende instellingen
- ISV
- IT
- HAAR
- jpg
- voor slechts
- Houden
- sleutel
- Weten
- kennis
- bekend
- Labs
- meer
- Landschap
- taal
- Groot
- groter
- Achternaam*
- tot slot
- Wachttijd
- later
- Legkippen
- leiden
- leidend
- Leads
- geleerd
- leren
- minst
- LED
- Lessen
- Lessons Learned
- Niveau
- facelift
- als
- sympathieรซn
- LLM
- logica
- London
- lang
- Kijk
- op zoek
- lot
- machine
- machine learning
- gemaakt
- Hoofd
- voornamelijk
- Hoofdstroom
- onderhouden
- Het handhaven
- maken
- MERKEN
- beheer
- beheerd
- management
- productie
- veel
- Markt
- Market Analysis
- Marktgegevens
- Markten
- op elkaar afgestemd
- wiskundig
- Mei..
- zinvolle
- betekende
- mechanismen
- Maak kennis met
- lid
- voldaan
- meta
- Metadata
- methode
- Methodologie
- microservices
- minimaal
- minimaliseren
- mengen
- ML
- model
- modellen
- Modern
- Modules
- meer
- meest
- meestal
- bewegend
- veel
- multi-
- meervoudig
- naam
- inheemse
- Naturel
- Natural Language Processing
- NATUUR
- noodzakelijk
- Noodzaak
- nodig
- negatief
- netwerken
- New
- New York
- volgende
- geen
- nota
- opmerkend
- nu
- aantal
- nummers
- doel van de persoon
- Voor de hand liggend
- of
- korting
- aangeboden
- Aanbod
- officieren
- kantoren
- vaak
- on
- EEN
- Slechts
- open
- open source
- optimale
- optimalisatie
- Optimaliseer
- geoptimaliseerde
- optimaliseren
- Opties
- or
- orkestreren
- orkestratie
- bestellen
- origineel
- Overige
- onze
- uitgang
- over
- totaal
- overzicht
- overweldigend
- het te bezitten.
- eigendom
- ownership
- parameters
- deel
- bijzonder
- voorbij
- passie
- octrooi
- Octrooien
- pad
- Uitvoeren
- prestatie
- uitvoerend
- kiezen
- stukken
- platform
- Plato
- Plato gegevensintelligentie
- PlatoData
- Spelen
- punt
- punten
- positief
- mogelijk
- Post
- potentieel
- energie
- bevoegdheden
- praktijken
- bij voorkeur
- presenteren
- gepresenteerd
- voorkomen
- prijs
- principes
- privacy
- Privacy en Beveiliging
- verwerking
- produceren
- geproduceerd
- Producten
- professioneel
- diepgaand
- project
- projecten
- prompts
- bewijs
- proof of concept voor
- gepast
- gepatenteerd
- bewezen
- zorgen voor
- mits
- biedt
- het verstrekken van
- publiek
- overheidsbedrijven
- in het openbaar
- doel
- zetten
- Q & A
- kwaliteit
- queries
- vraag
- snel
- citaten
- Ranking
- liever
- RE
- klaar
- echte wereld
- realiseerde
- ontvangen
- aanbevolen
- archief
- referencing
- gereguleerd
- betrekkingen
- verwantschap
- relevante
- Rapporten
- vertegenwoordiger
- vertegenwoordigen
- vertegenwoordigt
- vereisen
- nodig
- Voorwaarden
- hulpbron
- opzichten
- antwoord
- reacties
- beperken
- Resultaten
- inkomsten
- terugkeren
- herzien
- rechts
- risico's
- Rol
- rollen
- Kamer
- ronde
- reglement
- lopen
- loopt
- dezelfde
- tevreden
- tevreden met
- Bespaar
- ervaren
- Schaalbaarheid
- Scale
- Wetenschap
- krassen
- naadloos
- naadloos
- Ontdek
- Tweede
- seconden
- sectie
- beveiligen
- veiligheid
- zien
- selectie
- Verkopers
- sturen
- senior
- zin
- apart
- -Series
- Serverless
- service
- Diensten
- reeks
- Sets
- verscheidene
- vorming
- aandeelhouder
- Aandeelhouders
- ze
- moet
- vertoonde
- getoond
- Shows
- aanzienlijke
- Eenvoudig
- eenvoudiger
- vereenvoudigd
- vereenvoudigen
- vereenvoudigen
- single
- Maat
- maten
- kleinere
- slim
- slimmer
- Software
- software development
- oplossing
- Oplossingen
- sommige
- geraffineerd
- bron
- bronnen
- overspannen
- overspanningen
- spreekt
- specialisten
- specialiseert
- specifiek
- specifiek
- Stabiliteit
- stack
- Stadium
- inzet
- staan
- staat
- begin
- gestart
- Start
- Statement
- blijven
- Stap voor
- Stappen
- voorraad
- beurs
- opgeslagen
- winkels
- eenvoudig
- strategisch
- structuur
- gestructureerde
- Hierop volgend
- succes
- Met goed gevolg
- dergelijk
- voldoende
- geschikt
- suite
- samenvatten
- OVERZICHT
- ondersteuning
- steunen
- toezicht
- Stap over voor slechts
- syntaxis
- system
- tafel
- op maat gemaakt
- Nemen
- ingenomen
- neemt
- het nemen
- Taak
- taken
- team
- tech
- Technisch
- technieken
- Technologie
- telecom
- vertellen
- sjabloon
- proef
- Testen
- testen
- tekst
- neem contact
- Bedankt
- dat
- De
- De hoofdstad
- hun
- harte
- Er.
- Deze
- ze
- het denken
- dit
- drie
- Door
- overal
- niet de tijd of
- Tijdreeksen
- keer
- Titan
- naar
- vandaag
- samen
- teken
- tokens
- ook
- tools
- tools
- onderwerp
- toronto
- in de richting van
- Trainen
- getraind
- Trainingen
- transactie
- Transacties
- transformeren
- reis
- waar
- Trust
- BEURT
- twee
- type dan:
- types
- typisch
- niet in staat
- voor
- die ten grondslag liggen
- begrijpen
- begrip
- begrijpt
- begrijpelijk
- unieke
- ontgrendelen
- onnodig
- us
- .
- use case
- gebruikt
- Gebruiker
- gebruiksvriendelijke
- gebruik
- maakt gebruik van
- geldig
- bevestiging
- waarde
- variรซteit
- divers
- verkoper
- Verificatie
- geverifieerd
- controleren
- zeer
- rendabel
- Bekijk
- Virtueel
- visie
- lopen
- gezocht
- was
- Manier..
- we
- web
- webservices
- Webinars
- Website
- GOED
- gegaan
- waren
- West
- Wat
- Wiel
- wanneer
- terwijl
- welke
- en
- wil
- Met
- binnen
- zonder
- Dames
- woorden
- Mijn werk
- werkte
- workflow
- werkzaam
- waard
- zou
- schrijven
- code schrijven
- XML
- nog
- york
- You
- Your
- youtube
- zephyrnet