Artificiell intelligens
LlamaIndex: FörbÀttra dina LLM-applikationer med anpassad data enkelt

Stora språkmodeller (LLM) som OpenAI:s GPT-serie har tränats på en mångfaldig uppsättning offentligt tillgängliga data, vilket visar imponerande förmågor i textgenerering, sammanfattning, frågesvar och planering. Trots deras mångsidighet finns en vanlig fråga om hur man smidigt integrerar dessa modeller med anpassad, privat eller proprietär data.
Företag och individer är överbelastade med unik och anpassad data, ofta lagrad i olika applikationer som Notion, Slack och Salesforce, eller lagrad i personliga filer. För att utnyttja LLM för denna specifika data har flera metoder föreslagits och experimenterats med.
Fine-tuning representerar en sådan metod, som består i att justera modellens vikter för att inkorporera kunskap från specifika datamängder. Detta process är dock inte utan utmaningar. Det kräver betydande ansträngning i dataförberedelse, kombinerat med en svår optimeringsprocess, som kräver en viss nivå av maskinlärarakompetens. Dessutom kan de ekonomiska konsekvenserna vara betydande, särskilt när man hanterar stora datamängder.
In-context learning har dykt upp som ett alternativ, som prioriterar utformningen av indata och frågor för att ge LLM den nödvändiga kontexten för att generera precisa utdata. Denna metod mildrar behovet av omfattande modellomträning, vilket erbjuder en mer effektiv och tillgänglig metod för att integrera privat data.
Men nackdelen med detta är dess beroende av användarens färdighet och expertis i prompt engineering. Dessutom kan in-context learning inte alltid vara lika exakt eller tillförlitlig som fine-tuning, särskilt när man hanterar högt specialiserad eller teknisk data. Modellens förträning på en bred uppsättning internettext garanterar inte förståelse för specifik jargong eller kontext, vilket kan leda till felaktiga eller irrelevanta utdata. Detta är särskilt problematiskt när den privata datan kommer från en nischdomän eller bransch.
Dessutom är den mängd kontext som kan tillhandahållas i en enda fråga begränsad, och LLM:s prestation kan försämras när uppgiftens komplexitet ökar. Det finns också utmaningen med sekretess och datasäkerhet, eftersom informationen som tillhandahålls i frågan kan vara känslig eller konfidentiell.
Medan communityn utforskar dessa tekniker, har verktyg som LlamaIndex börjat dra uppmärksamhet.
Det startades av Jerry Liu, en före detta Uber-forskare. Medan han experimenterade med GPT-3 i höstas, noterade Liu modellens begränsningar när det gäller att hantera privat data, såsom personliga filer. Denna observation ledde till starten av det öppna projektet LlamaIndex.
Initiativet har lockat investerare och säkrat $8,5 miljoner i en nylig seedfinansieringsrunda.
LlamaIndex möjliggör förstärkning av LLM med anpassad data, vilket brottas gapet mellan förtränade modeller och anpassad dataanvändning. Genom LlamaIndex kan användare utnyttja sin egen data med LLM, vilket låser upp kunskapsgenerering och resonemang med personliga insikter.
Användare kan smidigt tillhandahålla LLM med sin egen data, vilket skapar en miljö där kunskapsgenerering och resonemang är djupt personliga och insiktsfulla. LlamaIndex adresserar begränsningarna i in-context learning genom att tillhandahålla en mer användarvänlig och säker plattform för datainteraktion, vilket säkerställer att även de med begränsad maskinlärarakompetens kan utnyttja full potentialen hos LLM med sin privata data.
Högnivåkoncept och insikter
1. Retrieval Augmented Generation (RAG):
RAG är en tvåfaldig process som syftar till att koppla LLM med anpassad data, vilket förbättrar modellens förmåga att leverera mer precisa och informerade svar. Processen består av:
- Indexeringsstadiet: Detta är den förberedande fasen där grunden för kunskapsbasen läggs.
- Frågestadiet: Här söks kunskapsbasen för relevant kontext för att hjälpa LLM att svara på frågor.
Indexeringsresan med LlamaIndex:
- Dataanslutningar: Tänk på dataanslutningar som ditt datas pass till LlamaIndex. De hjälper till att importera data från varierande källor och format, och omvandlar dem till en enkel “dokument”-representation. Dataanslutningar kan hittas i LlamaHub, ett öppen källrepository fyllt med dataladdare. Dessa laddare är utformade för enkel integration, vilket möjliggör en “plug-and-play”-upplevelse med alla LlamaIndex-applikationer.
- Dokument / noder: Ett dokument är som en generisk resväska som kan innehålla olika datatyper – antingen en PDF, API-utdata eller databasposter. Å andra sidan är en nod en bit eller “chunk” från ett dokument, berikad med metadata och relationer till andra noder, vilket säkerställer en robust grund för exakt dataåtervinning senare.
- Dataindex: Efter datainmatning hjälper LlamaIndex till att indexera denna data i en återvinningsbar form. Bakom kulisserna dissekerar det råa dokumenten i mellanliggande representationer, beräknar vektoremboliseringar och drar slutsatser om metadata. Bland indexen är “VectorStoreIndex” ofta det gängse valet.
Typer av index i LlamaIndex: Nyckeln till organiserad data
LlamaIndex erbjuder olika typer av index, var och en för olika behov och användningsfall. I kärnan av dessa index ligger “noder” som diskuterats ovan. Låt oss försöka förstå LlamaIndex-index med deras mekanismer och tillämpningar.
1. Lista-index:
- Mekanism: Ett lista-index ordnar noder sekventiellt som en lista. Efter att ha chunkat indata i noder, ordnas de i en linjär form, redo att sökas antingen sekventiellt eller via nyckelord eller emboliseringar.
- Fördel: Denna index-typ lyser när behovet är för sekventiell sökning. LlamaIndex säkerställer att all indata används, även om den överstiger LLM:s tokenbegränsning, genom att smart söka text från varje nod och finslipa svar när den navigerar nerför listan.
2. Vector Store Index:
- Mekanism: Här omvandlas noder till vektoremboliseringar, lagrade antingen lokalt eller i en specialiserad vektordatabas som Milvus. När den söks, hämtar den de topp_k mest liknande noderna, kanalisering dem till svarsgenereringen.
- Fördel: Om din arbetsflöde beror på textjämförelse för semantisk likhet via vektorsökning, kan detta index användas.
3. Träd-index:
- Mekanism: I ett träd-index utvecklas indata till en trädstruktur, byggd underifrån av löv-noder (de ursprungliga datachunkarna). Föräldranoder uppstår som sammanfattningar av löv-noder, skapade med GPT. Under en sökning kan träd-indexet antingen traversera från rotnoden till löv-noder eller konstruera svar direkt från valda löv-noder.
- Fördel: Med ett träd-index blir sökning av långa textchunk mer effektiv, och att extrahera information från olika textsegment förenklas.
4. Nyckelords-index:
- Mekanism: En karta av nyckelord till noder utgör kärnan i ett nyckelords-index. När den söks, plockas nyckelord från frågan, och endast de kartade noderna lyfts fram.
- Fördel: När du har tydliga användarfrågor kan ett nyckelords-index användas. Till exempel blir det mer effektivt att söka igenom hälso-dokument när man bara fokuserar på dokument som är relevanta för COVID-19.
Installation av LlamaIndex
Installation av LlamaIndex är en enkel process. Du kan välja att installera det antingen direkt från Pip eller från källan. (Se till att ha python installerat i ditt system eller använd Google Colab)
1. Installation från Pip:
- Kör följande kommando:
pip install llama-index
- Notera: Under installationen kan LlamaIndex ladda ner och lagra lokala filer för vissa paket som NLTK och HuggingFace. För att ange en katalog för dessa filer, använd miljövariabeln “LLAMA_INDEX_CACHE_DIR”.
2. Installation från källa:
- Först, klona LlamaIndex-repositoriet från GitHub:
git clone https://github.com/jerryjliu/llama_index.git
- När det är klont, navigera till projekt-katalogen.
- Du behöver Poetry för att hantera paketberoenden.
- Skapa en virtuell miljö med Poetry:
poetry shell - Slutligen, installera kärnpaketkraven med:
poetry install
Konfiguration av din miljö för LlamaIndex
1. OpenAI-konfiguration:
- Som standard använder LlamaIndex OpenAI:s
gpt-3.5-turboför textgenerering ochtext-embedding-ada-002för återvinning och emboliseringar. - För att använda denna konfiguration behöver du en
OPENAI_API_KEY. Få en genom att registrera dig på OpenAI:s webbplats och skapa en ny API-nyckel. - Du har flexibiliteten att anpassa den underliggande stora språkmodellen (LLM) enligt dina projekts behov. Beroende på din LLM-leverantör kan du behöva ytterligare miljönycklar och token.
2. Lokal miljökonfiguration:
- Om du föredrar att inte använda OpenAI, växlar LlamaIndex automatiskt till lokala modeller –
LlamaCPPochllama2-chat-13Bför textgenerering, ochBAAI/bge-small-enför återvinning och emboliseringar. - För att använda
LlamaCPP, följ den tillhandahållna installationsguiden. Se till att installerallama-cpp-python-paketet, idealiskt kompilera för att stödja din GPU. Denna konfiguration kommer att använda cirka 11,5 GB minne över CPU och GPU. - För lokala emboliseringar, kör
pip install sentence-transformers. Denna lokala konfiguration kommer att använda cirka 500 MB minne.
Med dessa konfigurationer kan du anpassa din miljö för att antingen utnyttja kraften hos OpenAI eller köra modeller lokalt, i linje med dina projekts krav och resurser.
En enkel användningsfall: Sökning av webbsidor med LlamaIndex och OpenAI
Här är ett enkelt Python-skript för att demonstrera hur du kan söka en webbsida för specifika insikter:
!pip install llama-index html2text
<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>
<p># Ange din OpenAI-nyckel nedan:
os.environ["OPENAI_API_KEY"] = ""</p>
<p># URL du vill ladda in i din vektordatabas här:
url = "http://www.paulgraham.com/fr.html"</p>
<p># Ladda URL:en in i dokument (flera dokument möjliga)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>
<p># Skapa vektordatabas från dokument
index = VectorStoreIndex.from_documents(documents)</p>
<p># Skapa en frågemotor så att vi kan ställa frågor:
query_engine = index.as_query_engine()</p>
<p># Ställ så många frågor du vill mot den laddade datan:
response = query_engine.query("Vad är de tre bästa råden från Paul för att samla in pengar?")
print(response)
De tre bästa råden från Paul för att samla in pengar är: 1. Börja med ett lågt nummer när du först samlar in pengar. Detta möjliggör flexibilitet och ökar chanserna att samla in mer pengar på lång sikt. 2. Sträva efter att vara lönsam om möjligt. Att ha en plan för att nå lönsamhet utan att förlita sig på ytterligare finansiering gör startupen mer attraktiv för investerare. 3. Fokusera inte på värdering. Medan värdering är viktigt, är det inte den viktigaste faktorn vid finansiering. Fokusera på att få nödvändiga medel och hitta bra investerare istället.
LlamaIndex vs Langchain: Välj baserat på ditt mål
Ditt val mellan LlamaIndex och Langchain kommer att bero på ditt projekts mål. Om du vill utveckla ett intelligent sökverktyg är LlamaIndex ett starkt val, som utmärker sig som en smart lagringsmekanism för dataåtervinning. Å andra sidan, om du vill skapa ett system som ChatGPT med plugin-funktioner, är Langchain ditt val. Det inte bara möjliggör flera instanser av ChatGPT och LlamaIndex, utan utökar också funktionen genom att tillåta konstruktionen av multi-uppgiftsagenter. Till exempel kan du med Langchain skapa agenter som kan köra Python-kod samtidigt som de genomför en Google-sökning. Sammanfattningsvis, medan LlamaIndex excellerar i datahantering, orkestrerar Langchain flera verktyg för att leverera en holistisk lösning.

LlamaIndex Logo Artwork created using Midjourney


















