AI-modeller og platforme

LlamaIndex: Udvid dine LLM-applikationer med brugerdefineret data let

mm
Føj Unite.AI til dine foretrukne kilder på Google

Store sprogmodeller (LLM’er) som OpenAI’s GPT-serie er trænet på en bred vifte af offentligt tilgængelige data og har vist bemærkelsesværdige evner i tekstgenerering, sammenfatning, spørgsmålssvar og planlægning. Trods deres fleksibilitet er der ofte stillet spørgsmål om, hvordan disse modeller kan integreres sammen med brugerdefineret, privat eller proprietær data.

Virksomheder og enkeltpersoner er oversvømmet med unik og brugerdefineret data, ofte placeret i forskellige applikationer som Notion, Slack og Salesforce (CRM ), eller gemt i personlige filer. For at udnytte LLM’er til denne specifikke data er der blevet foreslået og eksperimenteret med flere metoder.

Fine-tuning repræsenterer en sådan tilgang, som består i at justere modellens vægte for at inkorporere viden fra bestemte datasæt. Det er dog ikke uden udfordringer. Det kræver betydelig indsats i dataforberedning, kombineret med en svær optimeringsproces, der kræver en vis grad af maskinlæringskompetence. Desuden kan de økonomiske implikationer være betydelige, især når man har at gøre med store datasæt.

In-context learning er dukket op som en alternativ løsning, der prioriterer udarbejdelsen af input og prompts for at give LLM’et den nødvendige kontekst for at generere præcise output. Denne tilgang eliminerer behovet for omfattende model-træning og tilbyder en mere effektiv og tilgængelig måde at integrere privat data på.

Men ulemperne for denne tilgang er dens afhængighed af brugerens færdigheder og ekspertise i prompt-engineering. Desuden kan in-context learning ikke altid være lige så præcis eller pålidelig som fine-tuning, især når man har at gøre med højspecialiseret eller teknisk data. Modellens fortræning på en bred vifte af internettetstekst garanterer ikke en forståelse af specifik jargon eller kontekst, hvilket kan føre til upræcise eller irrelevante output. Dette er særligt problematisk, når den private data stammer fra en niche-domæne eller industri.

Derudover er mængden af kontekst, der kan leveres i en enkelt prompt, begrænset, og LLM’ens præstation kan forringes, når kompleksiteten af opgaven øges. Der er også udfordringerne med privatliv og datasikkerhed, da informationen, der leveres i prompten, potentielt kan være følsom eller fortrolig.

Da fællesskabet udforsker disse teknikker, er værktøjer som LlamaIndex nu begyndt at tiltrække opmærksomhed.

Llama Index

Llama Index

Det blev startet af Jerry Liu, en tidligere Uber-forsker. Mens han eksperimenterede med GPT-3 sidste efterår, lagde Liu mærke til modellens begrænsninger i forhold til håndtering af privat data, såsom personlige filer. Denne observation førte til starten af det open-source-projekt LlamaIndex.

Initiativet har tiltrukket investorer og har sikret $8,5 millioner i en seneste seed-finansieringsrunde.

LlamaIndex muliggør udvidelsen af LLM’er med brugerdefineret data, hvilket brobygger gapet mellem fortrænede modeller og brugerdefineret data-anvendelser. Gennem LlamaIndex kan brugerne udnytte deres eget data med LLM’er, hvilket låser op for viden generering og resonnering med personlige indsigt.

Brugere kan uden besvær give LLM’er deres eget data, hvilket skaber en miljø, hvor viden generering og resonnering er dybt personlige og indsigtfulde. LlamaIndex løser begrænsningerne i in-context learning ved at give en mere brugervenlig og sikker platform for datainteraktion, hvilket sikrer, at selv brugere med begrænset maskinlæringskompetence kan udnytte det fulde potentiale i LLM’er med deres private data.

Overordnede koncepter og indsigt

1. Retrieval Augmented Generation (RAG):

LlamaIndex RAG

LlamaIndex RAG

RAG er en todelt proces designet til at kombinere LLM’er med brugerdefineret data, hvilket forbedrer modellens evne til at levere mere præcise og informerede svar. Processen består af:

  • Indexeringsfase: Dette er den forberedende fase, hvor grundlaget for videnbasens oprettelse lægges.
LlamaIndex INDEXES

LlamaIndex Indexing

  • Spørgsmålsfase: Her søges videnbasen efter relevant kontekst for at hjælpe LLM’er med at besvare spørgsmål.
LlamaIndex QUERY STAGE

LlamaIndex Query Stage

LlamaIndex-rejsen:

  • Dataforbindelser: Tænk på dataforbindelser som din datas pas til LlamaIndex. De hjælper med at importere data fra forskellige kilder og formater, og omdanner dem til en enkel “Dokument”-repræsentation. Dataforbindelser kan findes i LlamaHub, et open-source-repositorium fyldt med data-loadere. Disse loadere er designet til en let integration og giver en plug-and-play-oplevelse med enhver LlamaIndex-applikation.
Llama hub

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

  • Dokumenter/Noder: Et Dokument er som en generisk kuffert, der kan indeholde forskellige datatyper – enten det er en PDF, API-udgang, eller database-indtastninger. På den anden side er en Node en stump eller “chunk” fra et Dokument, beriget med metadata og relationer til andre noder, hvilket sikrer en solid grund for præcis datahentning senere.
  • Dataindeks: Efter dataindtagelse hjælper LlamaIndex med at indeksere denne data i en hentelig format. Bag scenen dissekerer det rådokumenter til mellemrepræsentationer, beregner vektor-indlejninger og afleder metadata. Blandt indeksene er ‘VectorStoreIndex’ ofte det foretrukne valg.

Typiske indeks i LlamaIndex: Nøgle til organiseret data

LlamaIndex tilbyder forskellige typer af indeks, hver til forskellige behov og anvendelser. I hjertet af disse indeks ligger “noder” som diskuteret ovenfor. Lad os prøve at forstå LlamaIndex-indeks med deres mekanismer og anvendelser.

1. Listeindeks:

  • Mekanisme: En Listeindeks ordner noder sekventielt som en liste. Efter at have opdelt inputdataene i noder, ordnes de i en lineær facon, klar til at blive spurgt enten sekventielt eller via nøgleord eller indlejninger.
  • Fordele: Denne indekstype skinner, når der er behov for sekventielt spørgsmål. LlamaIndex sikrer, at hele inputdataen bliver udnyttet, selvom den overstiger LLM’ens token-grænse, ved at spørge tekst fra hver node og finjustere svarene, mens den navigerer ned ad listen.

2. Vector Store Index:

  • Mekanisme: Her omdannes noder til vektor-indlejninger, gemt enten lokalt eller i en specialiseret vektor-database som Milvus. Når der stilles et spørgsmål, henter det de top_k mest lignende noder og kanaliserer dem til svarsyntesen.
  • Fordele: Hvis din arbejdsproces afhænger af tekstsammenligning for semantisk lighed via vektor-søgning, kan denne indeks anvendes.

3. Træindeks:

  • Mekanisme: I en Træindeks udvikler inputdataene sig til en træstruktur, bygget oppefra fra bladnoder (de oprindelige data-chunks). Forældrenoder opstår som sammenfattende af bladnoder, skabt ved hjælp af GPT. Under et spørgsmål kan træindekset bevæge sig fra rodnoden til bladnoder eller konstruere svar direkte fra valgte bladnoder.
  • Fordele: Med en Træindeks bliver spørgsmål om lange tekst-chunks mere effektivt, og udtrækning af information fra forskellige tekstsegmenter forenkles.

4. Nøgleindeks:

  • Mekanisme: En Nøgleindeks består af en kort over nøgleord til noder. Når der stilles et spørgsmål, plukkes nøgleordene fra spørgsmålet, og kun de tilknyttede noder bringes i fokus.
  • Fordele: Når du har klare bruger-spørgsmål, kan en Nøgleindeks anvendes. For eksempel bliver gennemsøgning af sundhedsdokumenter mere effektiv, når man kun fokuserer på dokumenter, der er relevante for COVID-19.

Installation af LlamaIndex

Installation af LlamaIndex er en ret direkte proces. Du kan vælge at installere det enten direkte fra Pip eller fra kildekoden. (Sikr, at du har Python installeret på din computer eller brug Google Colab)

1. Installation fra Pip:

  • Udfør følgende kommando:
    pip install llama-index
  • Bemærk: Under installationen kan LlamaIndex downloade og gemme lokale filer for bestemte pakker som NLTK og HuggingFace. For at specificere en mappe til disse filer kan du bruge miljøvariablen “LLAMA_INDEX_CACHE_DIR”.

2. Installation fra kildekoden:

  • Først klon LlamaIndex-repositoriet fra GitHub:
    git clone https://github.com/jerryjliu/llama_index.git
  • Når det er klonet, navigér til projekt-mappen.
  • Du har brug for Poetry til at styre pakkeafhængigheder.
  • Nu skal du oprette en virtuel miljø ved hjælp af Poetry:
    poetry shell
  • Til sidst installerer du kerne-pakke-krav med:
    poetry install

Opsætning af din miljø til LlamaIndex

1. OpenAI-opsætning:

  • Som standard bruger LlamaIndex OpenAI’s gpt-3.5-turbo til tekstgenerering og text-embedding-ada-002 til hentning og indlejninger.
  • For at bruge denne opsætning har du brug for en OPENAI_API_KEY. Få en ved at tilmelde dig på OpenAI’s hjemmeside og oprette en ny API-nøgle.
  • Du har mulighed for at tilpasse den underliggende Large Language Model (LLM) efter dine projekts behov. Afhængigt af din LLM-leverandør kan du have brug for yderligere miljønøgler og token.

2. Lokal miljø-opsætning:

  • Hvis du foretrækker ikke at bruge OpenAI, skifter LlamaIndex automatisk til lokale modeller – LlamaCPP og llama2-chat-13B til tekstgenerering, og BAAI/bge-small-en til hentning og indlejninger.
  • For at bruge LlamaCPP skal du følge den tilgængelige installationsvejledning. Sørg for at installere llama-cpp-python-pakken, idealt kompilert til at understøtte din GPU. Denne opsætning vil bruge omkring 11,5 GB hukommelse på både CPU og GPU.
  • For lokale indlejninger skal du udføre pip install sentence-transformers. Denne lokale opsætning vil bruge omkring 500 MB hukommelse.

Med disse opsætninger kan du tilpasse din miljø til enten at udnytte OpenAI’s kraft eller køre modeller lokalt, afhængigt af dine projekts krav og ressourcer.

En simpel anvendelse: Spørgning af websteder med LlamaIndex og OpenAI

Her er et simpelt Python-script for at demonstrere, hvordan du kan spørge et websted om bestemte indsigt:

!pip install llama-index html2text


<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>

<p># Indtast din OpenAI-nøgle nedenfor:
os.environ["OPENAI_API_KEY"] = ""</p>

<p># URL, du vil indlæse i din vektor-lager her:
url = "http://www.paulgraham.com/fr.html"</p>

<p># Indlæs URL'en i dokumenter (flere dokumenter er mulige)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>

<p># Opret vektor-lager fra dokumenter
index = VectorStoreIndex.from_documents(documents)</p>

<p># Opret spørgsmåls-motor, så du kan stille spørgsmål:
query_engine = index.as_query_engine()</p>

<p># Stil så mange spørgsmål, som du ønsker, mod det indlæste data:
response = query_engine.query("Hvad er de tre bedste råd fra Paul til at rejse penge?")
print(response)
De tre bedste råd fra Paul til at rejse penge er:
1. Start med et lavt tal, når du først rejser penge. Dette giver fleksibilitet og øger chancerne for at rejse mere i længden.
2. Sigtemod at være profitabel, hvis muligt. At have en plan for at nå profitabilitet uden at afhænge af yderligere finansiering gør startup'en mere attraktiv for investorer.
3. Fokuser ikke på vurdering. Selvom vurdering er vigtig, er det ikke det mest kritiske aspekt ved finansiering. Fokuser på at få de nødvendige midler og finde gode investorer i stedet.
Google Colab Llama Index Notebook

Google Colab Llama Index Notebook

Med dette script har du skabt et kraftfuldt værktøj til at udtrække specifikke oplysninger fra et websted ved blot at stille et spørgsmål. Dette er kun et glimt af, hvad der kan opnås med LlamaIndex og OpenAI, når man spørger om webdata.

LlamaIndex vs Langchain: Vælg baseret på dit mål

Dit valg mellem LlamaIndex og Langchain afhænger af dit projekts formål. Hvis du ønsker at udvikle et intelligent søgeværktøj, er LlamaIndex et solidt valg, der excellerer som en intelligent lagringsmekanisme for datahentning. På den anden side, hvis du ønsker at skabe et system som ChatGPT med plugin-funktioner, er Langchain dit valg. Det faciliteter ikke kun multiple instanser af ChatGPT og LlamaIndex, men udvider også funktionaliteten ved at tillade opbygning af multi-task-agenter. For eksempel kan du med Langchain skabe agenter, der kan udføre Python-kode, mens de udfører en Google-søgning samtidig. I kort, mens LlamaIndex excellerer i datahåndtering, orkestrerer Langchain multiple værktøjer for at levere en holistisk løsning.

LlamaIndex Logo Artwork created using Midjourney

LlamaIndex Logo Artwork created using Midjourney

Jeg har brugt de sidste fem år på at dykke ned i den fascinerende verden af Machine Learning og Deep Learning. Min passion og ekspertise har ført mig til at bidrage til over 50 forskellige software-ingeniørprojekter, med en særlig fokus på AI/ML. Min fortsatte nysgerrighed har også ført mig mod Natural Language Processing, et felt jeg er ivrig efter at udforske yderligere.