AI-modeller og platforme
LlamaIndex: Udvid dine LLM-applikationer med brugerdefineret data let
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.
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):
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.
- Spørgsmålsfase: Her søges videnbasen efter relevant kontekst for at hjælpe LLM’er med at besvare spørgsmål.
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.
- 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-turbotil tekstgenerering ogtext-embedding-ada-002til 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 –
LlamaCPPogllama2-chat-13Btil tekstgenerering, ogBAAI/bge-small-entil hentning og indlejninger. - For at bruge
LlamaCPPskal du følge den tilgængelige installationsvejledning. Sørg for at installerellama-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.
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


















