Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u rag (retrieval-augmented generation) kunt ophalen en wat ontwikkelaars nodig hebben om een rag-oplossing te bouwen die gereed is voor productie.
Voor meer informatie over twee manieren om een app voor 'chatten over uw gegevens' te bouwen, een van de belangrijkste generatieve AI-gebruiksvoorbeelden voor bedrijven, raadpleegt u LLM's uitbreiden met RAG of afstemmen.
In het volgende diagram ziet u de belangrijkste stappen van RAG:
Dit proces wordt naïef RAG genoemd. Het helpt u inzicht te hebben in de basisonderdelen en rollen in een RAG-chatsysteem.
Rag-systemen in de echte wereld hebben meer voorverwerking en naverwerking nodig om artikelen, query's en antwoorden te verwerken. In het volgende diagram ziet u een realistischere installatie, de zogenaamde geavanceerde RAG:
Dit artikel biedt u een eenvoudig framework om inzicht te krijgen in de belangrijkste fasen in een echt RAG-chatsysteem:
- Opnamefase
- Inference-pijplijnfase
- Evaluatiefase
Opname
Opname betekent dat u de documenten van uw organisatie opslaat, zodat u snel antwoorden voor gebruikers kunt vinden. De belangrijkste uitdaging is om de onderdelen van documenten te vinden en te gebruiken die het beste bij elke vraag passen. De meeste systemen gebruiken vectorinsluitingen en cosinus-overeenkomsten zoeken om vragen aan inhoud te koppelen. U krijgt betere resultaten wanneer u het inhoudstype (zoals patronen en opmaak) begrijpt en uw gegevens goed ordent in de vectordatabase.
Wanneer u opname instelt, richt u zich op deze stappen:
- Voorverwerking en extractie van inhoud
- Segmenteringsstrategie
- Segmenteringsorganisatie
- Strategie bijwerken
Voorverwerking en extractie van inhoud
De eerste stap in de opnamefase is het vooraf verwerken en extraheren van de inhoud uit uw documenten. Deze stap is van cruciaal belang omdat deze ervoor zorgt dat de tekst schoon, gestructureerd en gereed is voor indexering en ophalen.
Schone en nauwkeurige inhoud zorgt ervoor dat een RAG-chatsysteem beter werkt. Bekijk eerst de vorm en stijl van de documenten die u wilt indexeren. Volgen ze een vast patroon, zoals documentatie? Zo niet, welke vragen kunnen deze documenten beantwoorden?
Stel ten minste uw opnamepijplijn in op:
- Tekstopmaak standaardiseren
- Speciale tekens verwerken
- Niet-gerelateerde of oude inhoud verwijderen
- Verschillende versies van inhoud bijhouden
- Inhoud verwerken met tabbladen, afbeeldingen of tabellen
- Metagegevens extraheren
Sommige van deze informatie, zoals metagegevens, kunnen u helpen tijdens het ophalen en evalueren als u deze bij het document in de vectordatabase houdt. U kunt het ook combineren met het tekstsegment om de vectoring van het segment te verbeteren.
Segmenteringsstrategie
Als ontwikkelaar bepaalt u hoe u grote documenten opsplitst in kleinere segmenten. Met segmenteren kunt u de meest relevante inhoud naar de LLM verzenden, zodat deze vragen van gebruikers beter kan beantwoorden. Denk ook na over hoe u de segmenten gebruikt nadat u ze hebt gekregen. Probeer algemene branchemethoden uit en test uw segmenteringsstrategie in uw organisatie.
Denk bij het segmenteren na over:
- Optimalisatie van segmentgrootte: kies de beste segmentgrootte en hoe u deze kunt splitsen, per sectie, alinea of zin.
- Overlappende en schuifvenstersegmenten: bepaal of segmenten gescheiden moeten zijn of elkaar moeten overlappen. U kunt ook een schuifvensterbenadering gebruiken.
- Small2Big: Als u splitst op zin, ordent u de inhoud zodat u in de buurt zinnen of de volledige alinea kunt vinden. Door deze extra context aan de LLM te geven, kan het beter worden beantwoord. Zie de volgende sectie voor meer informatie.
Segmenteringsorganisatie
In een RAG-systeem, hoe u uw gegevens in de vectordatabase ordent, maakt het gemakkelijker en sneller om de juiste informatie te vinden. Hier volgen enkele manieren om uw indexen en zoekopdrachten in te stellen:
- Hiërarchische indexen: Gebruik lagen van indexen. Een overzichtsindex op het hoogste niveau vindt snel een kleine set waarschijnlijke segmenten. Een index op het tweede niveau verwijst naar de exacte gegevens. Met deze instelling worden zoekopdrachten sneller uitgevoerd door de opties te verfijnen voordat u in detail kijkt.
- Gespecialiseerde indexen: Kies indexen die bij uw gegevens passen. Gebruik bijvoorbeeld op grafieken gebaseerde indexen als uw segmenten verbinding maken met elkaar, zoals in bronvermeldingsnetwerken of kennisgrafieken. Gebruik relationele databases als uw gegevens zich in tabellen bevinden en filter met SQL-query's.
- Hybride indexen: verschillende indexeringsmethoden combineren. Gebruik bijvoorbeeld eerst een samenvattingsindex en vervolgens een op grafieken gebaseerde index om verbindingen tussen segmenten te verkennen.
Optimalisatie van uitlijning
Maak opgehaalde segmenten relevanter en nauwkeuriger door ze te koppelen aan de typen vragen die ze beantwoorden. Een manier is om een voorbeeldvraag te maken voor elk segment dat laat zien welke vraag het beste beantwoordt. Deze aanpak helpt op verschillende manieren:
- Verbeterde afstemming: Tijdens het ophalen vergelijkt het systeem de vraag van de gebruiker met deze voorbeeldvragen om het beste segment te vinden. Deze techniek verbetert de relevantie van de resultaten.
- Trainingsgegevens voor machine learning-modellen: deze vraag-segmentparen helpen bij het trainen van de machine learning-modellen in het RAG-systeem. De modellen leren welke segmenten beantwoorden welke typen vragen.
- Directe queryafhandeling: Als de vraag van een gebruiker overeenkomt met een voorbeeldvraag, kan het systeem snel het juiste segment vinden en gebruiken, waardoor het antwoord sneller wordt uitgevoerd.
De voorbeeldvraag van elk segment fungeert als een label dat het ophaalalgoritme begeleidt. De zoekopdracht wordt meer gericht en bewust van context. Deze methode werkt goed wanneer segmenten betrekking hebben op veel verschillende onderwerpen of soorten informatie.
Strategieën bijwerken
Als uw organisatie documenten vaak bijwerken, moet u uw database actueel houden, zodat de retriever altijd de meest recente informatie kan vinden. Het retriever-onderdeel is het onderdeel van het systeem dat de vectordatabase doorzoekt en resultaten retourneert. Hier volgen enkele manieren om uw vectordatabase up-to-date te houden:
incrementele updates:
- Regelmatige intervallen: stel updates in om te worden uitgevoerd volgens een schema (zoals dagelijks of wekelijks) op basis van hoe vaak documenten veranderen. Met deze actie blijft de database actueel.
- Updates op basis van triggers: automatische updates instellen wanneer iemand een document toevoegt of wijzigt. Het systeem indexeert alleen de betrokken onderdelen opnieuw.
gedeeltelijke updates:
- Selectief opnieuw indexeren: alleen de onderdelen van de database bijwerken die zijn gewijzigd, niet het geheel. Met deze techniek bespaart u tijd en resources, met name voor grote gegevenssets.
- Delta-codering: Sla alleen de wijzigingen tussen oude en nieuwe documenten op, waardoor de hoeveelheid gegevens die moet worden verwerkt, wordt verminderd.
versiebeheer:
- Momentopnamen: Sla versies van uw documentenset op verschillende tijdstippen op. Met deze actie kunt u zo nodig teruggaan of eerdere versies herstellen.
- Documentversiebeheer: gebruik een versiebeheersysteem om wijzigingen bij te houden en een geschiedenis van uw documenten bij te houden.
realtime-updates:
- Stroomverwerking: Gebruik streamverwerking om de vectordatabase in realtime bij te werken wanneer documenten veranderen.
- Livequery's: gebruik livequery's om up-to-datumantwoorden op te halen, waarbij livegegevens soms worden vermengd met resultaten in de cache voor snelheid.
Optimalisatietechnieken:
- Batchverwerking: groepeer wijzigingen en pas ze samen toe om resources te besparen en overhead te verminderen.
-
Hybride benaderingen: verschillende strategieën combineren:
- Gebruik incrementele updates voor kleine wijzigingen.
- Gebruik volledige herindexering voor belangrijke updates.
- Belangrijke wijzigingen in uw gegevens bijhouden en documenteren.
Kies de updatestrategie of mix die aan uw behoeften voldoet. Denk na over:
- Grootte van documentinhoud
- Updatefrequentie
- Reële tijd gegevensbehoeften
- Beschikbare middelen
Bekijk deze factoren voor uw toepassing. Elke methode heeft compromissen in complexiteit, kosten en hoe snel updates worden weergegeven.
Deductiepijplijn
Uw artikelen zijn nu gesegmenteerd, gevectoriseerd en opgeslagen in een vectordatabase. Richt u vervolgens op het verkrijgen van de beste antwoorden van uw systeem.
Als u nauwkeurige en snelle resultaten wilt krijgen, moet u nadenken over deze belangrijke vragen:
- Is de vraag van de gebruiker duidelijk en krijgt deze waarschijnlijk het juiste antwoord?
- Onderbreekt de vraag bedrijfsregels?
- Kunt u de vraag herschrijven om het systeem te helpen betere overeenkomsten te vinden?
- Komen de resultaten van de database overeen met de vraag?
- Moet u de resultaten wijzigen voordat u ze naar de LLM verzendt om ervoor te zorgen dat het antwoord relevant is?
- Beantwoordt het antwoord van de LLM de vraag van de gebruiker volledig?
- Voldoet het antwoord aan de regels van uw organisatie?
De hele deductiepijplijn werkt in realtime. Er is geen enkele juiste manier om uw voorverwerkings- en naverwerkingsstappen in te stellen. U gebruikt een combinatie van code- en LLM-aanroepen. Een van de grootste afwegingen is het verdelen van nauwkeurigheid en naleving van kosten en snelheid.
Laten we eens kijken naar strategieën voor elke fase van de deductiepijplijn.
Stappen voor het vooraf verwerken van query's
Het voorverwerken van query's wordt direct gestart nadat de gebruiker een vraag heeft verzonden:
Deze stappen helpen ervoor te zorgen dat de vraag van de gebruiker past bij uw systeem en klaar is om de beste artikelsegmenten te vinden met behulp van cosinus-overeenkomsten of 'dichtstbijzijnde buren'-zoekopdracht.
Beleidscontrole: gebruik logica om ongewenste inhoud te herkennen en te verwijderen of te markeren, zoals persoonlijke gegevens, slechte taal of pogingen om veiligheidsregels te verbreken (ook wel jailbreaking genoemd).
Query's herschrijven: wijzig de vraag indien nodig: vouw acroniemen uit, verwijder slang of herformuleer deze om u te richten op grotere ideeën (stapsgewijze instructies).
Een speciale versie van stapsgewijze instructies is Hypothetical Document Embeddings (HyDE). HyDE heeft het LLM antwoord op de vraag, maakt een insluiting van dat antwoord en doorzoekt vervolgens de vectordatabase ermee.
Subquery's
Met subquery's wordt een lange of complexe vraag opgesplitst in kleinere, eenvoudigere vragen. Het systeem beantwoordt elke kleine vraag en combineert vervolgens de antwoorden.
Als iemand bijvoorbeeld vraagt: 'Wie heeft er belangrijkere bijdragen geleverd aan moderne natuurkunde, Albert Einstein of Niels Bohr?' kunt u deze splitsen in:
- Subquery 1: "Wat heeft Albert Einstein bijgedragen aan moderne natuurkunde?"
- Subquery 2: "Wat heeft Niels Bohr bijgedragen aan moderne natuurkunde?"
De antwoorden zijn onder andere:
- Voor Einstein: de relativiteitstheorie, het foto-elektrische effect en E=mc^2.
- Voor Bohr: het waterstofatomenmodel, werk aan kwantummechanica en het principe van complementariteit.
Vervolgens kunt u vervolgvragen stellen:
- Subquery 3: "Hoe zijn de theorieën van Newton veranderd in moderne natuurkunde?"
- Subquery 4: "Hoe zijn de theorieën van Bohr de moderne natuurkunde veranderd?"
Deze follow-ups kijken naar het effect van elke wetenschapper, zoals:
- Hoe Het werk van Einstein heeft geleid tot nieuwe ideeën in cosmologie en kwantumtheorie
- Hoe Bohr's werk ons hielp om atomen en kwantummechanica te begrijpen
Het systeem combineert de antwoorden om een volledig antwoord te geven op de oorspronkelijke vraag. Deze methode maakt complexe vragen gemakkelijker te beantwoorden door ze op te breken in duidelijke, kleinere onderdelen.
Queryrouter
Soms bevindt uw inhoud zich in verschillende databases of zoeksystemen. In deze gevallen gebruikt u een queryrouter. Een queryrouter kiest de beste database of index om elke vraag te beantwoorden.
Een queryrouter werkt nadat de gebruiker een vraag heeft gesteld, maar voordat het systeem naar antwoorden zoekt.
Hier ziet u hoe een queryrouter werkt:
- Queryanalyse: De LLM of een ander hulpprogramma kijkt naar de vraag om erachter te komen welk soort antwoord er nodig is.
- Indexselectie: De router kiest een of meer indexen die passen bij de vraag. Sommige indexen zijn beter voor feiten, andere voor meningen of speciale onderwerpen.
- Queryverzending: de router verzendt de vraag naar de gekozen index of indexen.
- Resultatenaggregatie: het systeem verzamelt en combineert de antwoorden van de indexen.
- Antwoordgeneratie: Het systeem maakt een duidelijk antwoord met behulp van de informatie die het heeft gevonden.
Gebruik verschillende indexen of zoekmachines voor:
- Specialisatie van gegevenstypen: sommige indexen richten zich op nieuws, andere op academische documenten of op speciale databases zoals medische of juridische informatie.
- Optimalisatie van querytypen: sommige indexen zijn snel voor eenvoudige feiten (zoals datums), terwijl andere complexe of deskundige vragen verwerken.
- Algoritmeverschillen: verschillende zoekmachines gebruiken verschillende methoden, zoals vectorzoekopdrachten, trefwoordzoekopdrachten of geavanceerde semantische zoekopdrachten.
In een medisch adviessysteem hebt u bijvoorbeeld het volgende:
- Een onderzoeksdocumentindex voor technische details
- Een casestudy-index voor praktijkvoorbeelden
- Een algemene statusindex voor basisvragen
Als iemand vraagt over de effecten van een nieuw medicijn, stuurt de router de vraag naar de onderzoeksdocumentindex. Als de vraag betrekking heeft op veelvoorkomende symptomen, wordt de algemene gezondheidsindex gebruikt voor een eenvoudig antwoord.
Verwerkingsstappen na het ophalen
Na het ophalen vindt de verwerking plaats nadat het systeem inhoudssegmenten in de vectordatabase heeft gevonden:
Controleer vervolgens of deze segmenten nuttig zijn voor de LLM-prompt voordat u ze naar de LLM verzendt.
Houd rekening met deze zaken:
- Extra informatie kan de belangrijkste details verbergen.
- Irrelevante informatie kan het antwoord erger maken.
Let op de naald in een hooistackprobleem : LLMs besteden vaak meer aandacht aan het begin en einde van een prompt dan het midden.
Onthoud ook het maximale contextvenster van LLM en het aantal tokens dat nodig is voor lange prompts, met name op schaal.
Als u deze problemen wilt afhandelen, gebruikt u een pijplijn na het ophalen van de verwerkingspijplijn met stappen als:
- Filterresultaten: alleen segmenten behouden die overeenkomen met de query. Negeer de rest bij het bouwen van de LLM-prompt.
- Opnieuw rangschikken: plaats de meest relevante segmenten aan het begin en einde van de prompt.
- Promptcompressie: gebruik een klein, goedkoop model om segmenten samen te vatten en te combineren in één prompt voordat u het naar de LLM verzendt.
Verwerkingsstappen na voltooiing
Verwerking na voltooiing vindt plaats na de vraag van de gebruiker en alle inhoudssegmenten gaan naar de LLM:
Nadat de LLM een antwoord heeft ontvangen, controleert u de nauwkeurigheid ervan. Een verwerkingspijplijn na voltooiing kan het volgende omvatten:
- Feitencontrole: Zoek naar instructies in het antwoord dat feiten beweert te zijn en controleer of ze waar zijn. Als een feitencontrole mislukt, kunt u de LLM opnieuw vragen of een foutbericht weergeven.
- Beleidscontrole: zorg ervoor dat het antwoord geen schadelijke inhoud bevat voor de gebruiker of uw organisatie.
Beoordeling
Het evalueren van een systeem zoals dit is complexer dan het uitvoeren van reguliere eenheids- of integratietests. Denk na over deze vragen:
- Zijn gebruikers tevreden met de antwoorden?
- Zijn de antwoorden nauwkeurig?
- Hoe verzamelt u feedback van gebruikers?
- Zijn er regels voor welke gegevens u kunt verzamelen?
- Ziet u elke stap die het systeem heeft genomen wanneer de antwoorden onjuist zijn?
- Bewaart u gedetailleerde logboeken voor hoofdoorzaakanalyse?
- Hoe werkt u het systeem bij zonder dat het erger wordt?
Feedback van gebruikers vastleggen en erop reageren
Werk samen met het privacyteam van uw organisatie om feedback te ontwerpen voor het vastleggen van hulpprogramma's, systeemgegevens en logboekregistratie voor forensische gegevens en hoofdoorzaakanalyse van een querysessie.
De volgende stap is het bouwen van een evaluatiepijplijn. Een evaluatiepijplijn maakt het eenvoudiger en sneller om feedback te bekijken en erachter te komen waarom de AI bepaalde antwoorden heeft gegeven. Controleer elke reactie om te zien hoe de AI deze heeft geproduceerd, als de juiste inhoudssegmenten zijn gebruikt en hoe de documenten zijn gesplitst.
Zoek ook naar extra voorverwerkings- of naverwerkingsstappen die de resultaten kunnen verbeteren. Deze nauwe beoordeling vindt vaak hiaten in inhoud, met name wanneer er geen goede documentatie bestaat voor de vraag van een gebruiker.
U hebt een evaluatiepijplijn nodig om deze taken op schaal af te handelen. Een goede pijplijn maakt gebruik van aangepaste hulpprogramma's om de antwoordkwaliteit te meten. Het helpt u te zien waarom de AI een specifiek antwoord heeft gegeven, welke documenten het heeft gebruikt en hoe goed de deductiepijplijn werkte.
Gouden gegevensset
Een manier om te controleren hoe goed een RAG-chatsysteem werkt, is door een gouden gegevensset te gebruiken. Een gouden gegevensset is een set vragen met goedgekeurde antwoorden, nuttige metagegevens (zoals onderwerp en vraagtype), koppelingen naar brondocumenten en verschillende manieren waarop gebruikers hetzelfde kunnen stellen.
Een gouden gegevensset toont het 'beste scenario'. Ontwikkelaars gebruiken het om te zien hoe goed het systeem werkt en om tests uit te voeren wanneer ze nieuwe functies of updates toevoegen.
Schade beoordelen
Schademodellering helpt u mogelijke risico's op een product te herkennen en manieren te plannen om ze te verminderen.
Een hulpprogramma voor evaluatie van schadelijke effecten moet de volgende belangrijke functies bevatten:
- Identificatie van belanghebbenden: helpt u om iedereen die wordt beïnvloed door de technologie te vermelden en te groeperen, inclusief directe gebruikers, personen die indirect worden beïnvloed, toekomstige generaties en zelfs de omgeving.
- Categorieën en beschrijvingen van schade: vermeldt mogelijke schade, zoals privacyverlies, emotioneel nood of economische schade. Begeleidt u door voorbeelden en helpt u bij het bedenken van zowel verwachte als onverwachte problemen.
- Ernst- en waarschijnlijkheidsbeoordelingen: hiermee kunt u beoordelen hoe ernstig en waarschijnlijk elke schade is, zodat u kunt bepalen wat u eerst moet oplossen. U kunt gegevens gebruiken om uw keuzes te ondersteunen.
- Risicobeperkingsstrategieën: suggesties voor manieren om risico's te verminderen, zoals het wijzigen van het systeemontwerp, het toevoegen van beveiligingen of het gebruik van andere technologie.
- Feedbackmechanismen: Hiermee kunt u feedback van belanghebbenden verzamelen, zodat u het proces kunt blijven verbeteren naarmate u meer leert.
- Documentatie en rapportage: hiermee kunt u eenvoudig rapporten maken die laten zien wat u hebt gevonden en wat u hebt gedaan om risico's te verminderen.
Deze functies helpen u bij het vinden en oplossen van risico's, en ze helpen u ook bij het bouwen van meer ethische en verantwoorde AI door vanaf het begin na te denken over alle mogelijke gevolgen.
Zie de volgende artikelen voor meer informatie:
De beveiliging testen en controleren
Red-teaming is essentieel. Het betekent dat u als een aanvaller zwakke plekken in het systeem kunt vinden. Deze stap is vooral belangrijk om jailbreaking te stoppen. Zie Red Teaming plannen voor grote taalmodellen (LLM's) en hun toepassingen voor tips over het plannen en beheren van rode teams voor verantwoorde AI.
Ontwikkelaars moeten rag-systeembeveiligingen testen in verschillende scenario's om ervoor te zorgen dat ze werken. Deze stap maakt het systeem sterker en helpt ook reacties af te stemmen om ethische normen en regels te volgen.
Laatste overwegingen voor toepassingsontwerp
Hier volgen enkele belangrijke dingen die u in dit artikel moet onthouden, zodat u uw app kunt ontwerpen:
- Generatieve AI onvoorspelbaarheid
- Wijzigingen in gebruikersprompts en hun effect op tijd en kosten
- Parallelle LLM-aanvragen voor snellere prestaties
Als u een generatieve AI-app wilt bouwen, bekijkt u Aan de slag met chatten met behulp van uw eigen gegevensvoorbeeld voor Python. De zelfstudie is ook beschikbaar voor .NET-, Javaen JavaScript-.