Verbind je met ons

Artificial Intelligence

LlamaIndex: breid uw LLM-applicaties eenvoudig uit met aangepaste gegevens

mm
LamaIndex

Grote taalmodellen (LLM's) zoals de GPT-serie van OpenAI zijn getraind met een breed scala aan openbaar toegankelijke data en hebben opmerkelijke mogelijkheden aangetoond op het gebied van tekstgeneratie, samenvatting, vraagbeantwoording en planning. Ondanks hun veelzijdigheid draait een veelgestelde vraag om de naadloze integratie van deze modellen met aangepaste, private of bedrijfseigen data.

Bedrijven en individuen worden overspoeld met unieke en op maat gemaakte gegevens, vaak ondergebracht in verschillende applicaties zoals Notion, Slack en Salesforce, of opgeslagen in persoonlijke bestanden. Om LLM's voor deze specifieke gegevens te benutten, zijn verschillende methodologieën voorgesteld en geëxperimenteerd.

Scherpstellen vertegenwoordigt zo'n aanpak en bestaat uit het aanpassen van de wegingen van het model om kennis uit specifieke datasets te integreren. Dit proces kent echter ook uitdagingen. Het vereist aanzienlijke inspanningen in de datavoorbereiding, gecombineerd met een lastige optimalisatieprocedure, waarvoor een zekere mate van expertise in machine learning vereist is. Bovendien kunnen de financiële gevolgen aanzienlijk zijn, vooral bij het werken met grote datasets.

In-context leren is als alternatief naar voren gekomen, waarbij prioriteit wordt gegeven aan het vervaardigen van input en prompts om de LLM de noodzakelijke context te bieden voor het genereren van nauwkeurige output. Deze aanpak vermindert de behoefte aan uitgebreide modelherscholing en biedt een efficiëntere en toegankelijkere manier om privégegevens te integreren.

Maar het nadeel hiervan is dat het afhankelijk is van de vaardigheden en expertise van de gebruiker snelle techniekBovendien is in-context leren mogelijk niet altijd zo nauwkeurig of betrouwbaar als finetuning, vooral niet bij zeer gespecialiseerde of technische data. De voortraining van het model met een breed scala aan internetteksten garandeert geen begrip van specifiek jargon of context, wat kan leiden tot onnauwkeurige of irrelevante uitkomsten. Dit is met name problematisch wanneer de privégegevens afkomstig zijn uit een nichedomein of -sector.

Bovendien is de hoeveelheid context die in één enkele prompt kan worden geboden beperkt, en kunnen de prestaties van de LLM afnemen naarmate de complexiteit van de taak toeneemt. Er is ook de uitdaging van privacy en gegevensbeveiliging, aangezien de informatie in de prompt mogelijk gevoelig of vertrouwelijk kan zijn.

Terwijl de gemeenschap deze technieken onderzoekt, worden tools zoals LamaIndex krijgen nu de aandacht.

Lama-index

Lama-index

Het is gestart door Jerry Liu, een voormalig onderzoeker bij Uber. Tijdens zijn experimenten met GPT-3 afgelopen najaar merkte Liu de beperkingen van het model op met betrekking tot de verwerking van privégegevens, zoals persoonlijke bestanden. Deze constatering leidde tot de start van het open-sourceproject LlamaIndex.

Het initiatief heeft investeerders aangetrokken en daarmee zekerheid geboden $ 8.5 miljoen in een recente startfinancieringsronde.

LlamaIndex faciliteert de uitbreiding van LLM's met aangepaste gegevens, waardoor de kloof wordt overbrugd tussen vooraf getrainde modellen en gebruiksscenario's voor aangepaste gegevens. Via LlamaIndex kunnen gebruikers hun eigen gegevens gebruiken met LLM's, waardoor het genereren van kennis en redeneren met gepersonaliseerde inzichten wordt ontsloten.

Gebruikers kunnen LLM's naadloos voorzien van hun eigen gegevens, waardoor een omgeving wordt bevorderd waarin het genereren van kennis en redeneren diep gepersonaliseerd en inzichtelijk zijn. LlamaIndex pakt de beperkingen van in-context leren aan door een gebruiksvriendelijker en veiliger platform voor data-interactie te bieden, waardoor zelfs mensen met beperkte expertise op het gebied van machine learning het volledige potentieel van LLM's kunnen benutten met hun privégegevens.

Concepten op hoog niveau en enkele inzichten

1. Ophalen van Augmented Generation (RAG):

LamaIndex RAG

LamaIndex RAG

RAG is een tweeledig proces dat is ontworpen om LLM's te koppelen aan aangepaste data, waardoor het model nauwkeuriger en beter geïnformeerde antwoorden kan leveren. Het proces omvat:

  • Indexeringsfase: Dit is de voorbereidende fase waarin de basis wordt gelegd voor het creëren van een kennisbank.
LlamaIndex INDEXEN

LlamaIndex-indexering

  • Vraagfase: Hier wordt de kennisbank doorzocht op relevante context om LLM's te helpen bij het beantwoorden van vragen.
LlamaIndex QUERY-FASE

LlamaIndex-queryfase

Indexeringsreis met LlamaIndex:

  • Gegevensconnectoren: Beschouw dataconnectoren als het paspoort van uw data naar LlamaIndex. Ze helpen bij het importeren van data uit verschillende bronnen en formaten en vatten deze samen in een eenvoudige 'Document'-weergave. Dataconnectoren zijn te vinden in LlamaHub, een open-source repository vol met dataloaders. Deze loaders zijn ontworpen voor eenvoudige integratie, waardoor een plug-and-play-ervaring met elke LlamaIndex-applicatie mogelijk is.
Lama hub

LlamaIndex-hub (https://llamahub.ai/)

  • Documenten / Knooppunten: Een document is als een algemene koffer die verschillende gegevenstypen kan bevatten, of het nu een pdf, API-uitvoer of database-items zijn. Aan de andere kant is een knooppunt een fragment of ‘stukje’ uit een document, verrijkt met metagegevens en relaties met andere knooppunten, waardoor een robuuste basis wordt gelegd voor het later nauwkeurig ophalen van gegevens.
  • Gegevensindexen:Na data-invoer helpt LlamaIndex bij het indexeren van deze data in een opvraagbaar formaat. Achter de schermen ontleedt het ruwe documenten in tussenliggende representaties, berekent vector-embeddings en leidt metadata af. Van de indexen is 'VectorStoreIndex' vaak de beste keuze.

Soorten indexen in LlamaIndex: sleutel tot georganiseerde gegevens

LlamaIndex biedt verschillende typen indexen, elk voor verschillende behoeften en toepassingen. De kern van deze indexen wordt gevormd door "knooppunten", zoals hierboven besproken. Laten we proberen de werking en toepassingen van LlamaIndex-indices te begrijpen.

1. Lijst Index:

  • Mechanisme: Een lijstindex lijnt knooppunten opeenvolgend uit, zoals een lijst. Nadat de invoergegevens in knooppunten zijn opgedeeld, worden ze lineair gerangschikt, klaar om opeenvolgend of via trefwoorden of inbedding te worden opgevraagd.
  • Voordeel: Dit indextype komt goed tot zijn recht wanneer er behoefte is aan sequentiële zoekopdrachten. LlamaIndex zorgt ervoor dat uw volledige invoergegevens worden benut, zelfs als deze de tokenlimiet van de LLM overschrijden, door op slimme wijze tekst van elk knooppunt op te vragen en de antwoorden te verfijnen terwijl deze door de lijst navigeert.

2. Vectorwinkelindex:

  • Mechanisme: Hier transformeren knooppunten in vectorinbedding, lokaal opgeslagen of in een gespecialiseerde vectordatabase zoals Milvus. Wanneer er een query op wordt uitgevoerd, haalt het de top_k meest vergelijkbare knooppunten op en stuurt deze naar de antwoordsynthesizer.
  • Voordeel: Als uw workflow afhankelijk is van tekstvergelijking voor semantische gelijkenis via vectorzoeken, kan deze index worden gebruikt.

3. Boomindex:

  • Mechanisme: In een Tree Index evolueren de invoergegevens naar een boomstructuur, bottom-up opgebouwd uit leaf-knooppunten (de originele gegevensbrokken). Bovenliggende knooppunten verschijnen als samenvattingen van bladknooppunten, gemaakt met behulp van GPT. Tijdens een query kan de boomindex van het hoofdknooppunt naar bladknooppunten gaan of rechtstreeks antwoorden construeren vanuit geselecteerde bladknooppunten.
  • Voordeel: Met een boomindex wordt het opvragen van lange tekstfragmenten efficiënter en wordt het extraheren van informatie uit verschillende tekstsegmenten vereenvoudigd.

4. Trefwoordindex:

  • Mechanisme: Een toewijzing van trefwoorden aan knooppunten vormt de kern van een trefwoordindex. Wanneer er zoekopdrachten worden uitgevoerd, worden trefwoorden uit de zoekopdracht geplukt en worden alleen de toegewezen knooppunten in de schijnwerpers gezet.
  • Voordeel: Wanneer u duidelijke gebruikersvragen heeft, kan een trefwoordindex worden gebruikt. Het doorzoeken van zorgdocumenten wordt bijvoorbeeld efficiënter als u zich alleen concentreert op documenten die relevant zijn voor COVID-19.

LamaIndex installeren

Het installeren van LlamaIndex is een eenvoudig proces. Je kunt ervoor kiezen om het rechtstreeks vanuit Pip of vanaf de bron te installeren. (Zorg ervoor dat Python op uw systeem is geïnstalleerd, anders kunt u Google Colab gebruiken)

1. Installatie van Pip:

  • Voer de volgende opdracht uit:
    pip install llama-index
  • Note: Tijdens de installatie kan LlamaIndex lokale bestanden downloaden en opslaan voor bepaalde pakketten zoals NLTK en HuggingFace. Om een ​​directory voor deze bestanden op te geven, gebruikt u de omgevingsvariabele “LLAMA_INDEX_CACHE_DIR”.

2. Installatie vanaf bron:

  • Kloon eerst de LlamaIndex-repository van GitHub:
    git clone https://github.com/jerryjliu/llama_index.git
  • Eenmaal gekloond, navigeert u naar de projectmap.
  • U hebt poëzie nodig voor het beheren van pakketafhankelijkheden.
  • Creëer nu een virtuele omgeving met behulp van poëzie:
    poetry shell
  • Installeer ten slotte de kernpakketvereisten met:
    poetry install

Uw omgeving instellen voor LlamaIndex

1. OpenAI-installatie:

  • Standaard maakt LlamaIndex gebruik van OpenAI's gpt-3.5-turbo voor het genereren van tekst en text-embedding-ada-002 voor ophalen en inbedden.
  • Om deze opstelling te gebruiken, hebt u een OPENAI_API_KEYJe kunt er een krijgen door je te registreren op de website van OpenAI en een nieuw API-token aan te maken.
  • U heeft de flexibiliteit om het onderliggende Large Language Model (LLM) aan te passen aan uw projectbehoeften. Afhankelijk van uw LLM-provider heeft u mogelijk extra omgevingssleutels en tokens nodig.

2. Lokale omgeving instellen:

  • Als je OpenAI liever niet gebruikt, schakelt LlamaIndex automatisch over naar lokale modellen – LlamaCPP en llama2-chat-13B voor het genereren van tekst, en BAAI/bge-small-en voor ophalen en inbedden.
  • Te gebruiken LlamaCPPVolg de meegeleverde installatiehandleiding. Zorg ervoor dat u de llama-cpp-python pakket, ideaal samengesteld om uw GPU te ondersteunen. Deze opstelling gebruikt ongeveer 11.5 GB geheugen voor de CPU en GPU.
  • Voor lokale insluitingen voert u uit pip install sentence-transformers. Deze lokale installatie gebruikt ongeveer 500 MB geheugen.

Met deze instellingen kunt u uw omgeving aanpassen om de kracht van OpenAI te benutten of modellen lokaal uit te voeren, afgestemd op uw projectvereisten en -bronnen.

Een eenvoudige usecase: webpagina's opvragen met LlamaIndex en OpenAI

Hier is een eenvoudig Python-script dat laat zien hoe u een webpagina kunt bevragen voor specifieke inzichten:

!pip install llama-index html2text

import os
from llama_index import VectorStoreIndex, SimpleWebPageReader

# Enter your OpenAI key below:
os.environ["OPENAI_API_KEY"] = ""

# URL you want to load into your vector store here:
url = "http://www.paulgraham.com/fr.html"

# Load the URL into documents (multiple documents possible)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])

# Create vector store from documents
index = VectorStoreIndex.from_documents(documents)

# Create query engine so we can ask it questions:
query_engine = index.as_query_engine()

# Ask as many questions as you want against the loaded data:
response = query_engine.query("What are the 3 best advise by Paul to raise money?")
print(response)
The three best pieces of advice by Paul to raise money are:
1. Start with a low number when initially raising money. This allows for flexibility and increases the chances of raising more funds in the long run.
2. Aim to be profitable if possible. Having a plan to reach profitability without relying on additional funding makes the startup more attractive to investors.
3. Don't optimize for valuation. While valuation is important, it is not the most crucial factor in fundraising. Focus on getting the necessary funds and finding good investors instead.
Google Colab Lama Index-notitieboekje

Google Colab Lama Index-notitieboekje

Met dit script heb je een krachtig hulpmiddel gemaakt om specifieke informatie uit een webpagina te halen door simpelweg een vraag te stellen. Dit is slechts een voorproefje van wat er met LlamaIndex en OpenAI kan worden bereikt bij het opvragen van webgegevens.

LlamaIndex versus Langchain: kiezen op basis van uw doel

Uw keuze tussen LlamaIndex en Langketen hangt af van het doel van uw project. Als u een intelligente zoektool wilt ontwikkelen, is LlamaIndex een solide keuze. Het is een uitstekend opslagmechanisme voor het ophalen van gegevens. Aan de andere kant, als u een systeem zoals ChatGPT met plugin-mogelijkheden wilt creëren, is Langchain uw go-to. Het faciliteert niet alleen meerdere instanties van ChatGPT en LlamaIndex, maar breidt ook de functionaliteit uit door de constructie van multi-task agents mogelijk te maken. Met Langchain kunt u bijvoorbeeld agents creëren die Python-code kunnen uitvoeren en tegelijkertijd een Google-zoekopdracht kunnen uitvoeren. Kortom, terwijl LlamaIndex uitblinkt in dataverwerking, orkestreert Langchain meerdere tools om een ​​holistische oplossing te bieden.

LlamaIndex-logo Artwork gemaakt met Midjourney

LlamaIndex-logo Artwork gemaakt met halverwege de reis

De afgelopen vijf jaar heb ik me verdiept in de fascinerende wereld van Machine Learning en Deep Learning. Door mijn passie en expertise heb ik bijgedragen aan meer dan 50 verschillende software engineering projecten, met een bijzondere focus op AI/ML. Mijn voortdurende nieuwsgierigheid heeft me ook aangetrokken tot Natural Language Processing, een gebied dat ik graag verder wil verkennen.