Hvordan bruke LlamaIndex: En praktisk guide fra null til produksjon
Hvis du noen gang har prøvd å bygge en retrieval-augmented generation (RAG) app og tenkt, «Hvorfor er det så kronglete å koble sammen embeddings, vektorlagre og prompter?», er du ikke alene. LlamaIndex eksisterer for å gjøre den pipeline rask, fornuftig og produksjonsklar. I denne praktiske, løsningsorienterte guiden vil vi gå gjennom hvordan du bruker LlamaIndex fra start til slutt – datainntak, indeksering, spørring, evaluering og distribusjon – slik at du kan levere noe pålitelig uten å gå deg vill i limkode.
Vi vil bruke en spørsmålsdrevet struktur med progressive trinn, kjørbare kodebiter og tips fra den virkelige verden. Enten du prototyper en chatbot for interne dokumenter eller distribuerer en kunnskapsassistent for kunder, vil det å lære hvordan du bruker LlamaIndex effektivt spare deg for dager.
: LlamaIndex er et rammeverk som hjelper deg med å koble dataene dine til store språkmodeller med indeksering, henting og orkestreringsverktøy – ideelt for RAG, agenter og strukturerte utdata.
Hva er LlamaIndex og hvorfor bruke det?
- LlamaIndex er et datarammeverk for LLM-apper. Det gir byggesteiner for:
- Inntak: Last inn filer, nettsider, databaser og APIer.
- Chunking & Indeksering: Gjør råinnhold om til spørrbare strukturer (vektor-, nøkkelord-, grafindekser).
- Henting: Hent kontekst med fleksible strategier (BM25, hybrid, reranking).
- Spørremotorer & Agenter: Sett sammen henting, verktøy og prompter til en sammenhengende QA-opplevelse.
- Evaluering & Overvåking: Vurder kvaliteten på hentingen og relevansen av svarene.
- Når du bør bruke LlamaIndex:
- Du ønsker en robust RAG-stack uten å finne opp chunking, embeddings og henting på nytt.
- Du trenger å kombinere flere datakilder (PDF-er + Notion + SQL).
- Du vil eksperimentere med hybrid henting, reranking eller strukturerte utdata.
- Kjerne mental modell når du lærer hvordan du bruker LlamaIndex:
- Data → Noder → Indeks → Henter → Spørremotor → App
Hurtigstart: Den minimale RAG-løkken
Dette er den raskeste veien til en fungerende prototype. Vi vil laste inn dokumenter, bygge en vektorindeks og stille spørsmål.
# 1) Installer
# pip install llama-index llama-index-embeddings-openai llama-index-llms-openai
import os
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
# 2) Konfigurer din modell + embeddings
os.environ["OPENAI_API_KEY"] = "YOUR_KEY" # eller bruk en hvilken som helst støttet LLM/embedding-leverandør
llm = OpenAI(model="gpt-4o-mini")
embed_model = OpenAIEmbedding(model="text-embedding-3-small")
# 3) Last inn dokumenter (f.eks. ./data/*.pdf, .md, .txt)
docs = SimpleDirectoryReader("./data").load_data
# 4) Bygg en indeks
index = VectorStoreIndex.from_documents(docs, embed_model=embed_model)
# 5) Opprett en spørremotor og still et spørsmål
query_engine = index.as_query_engine(llm=llm)
response = query_engine.query("What are the key security practices mentioned in the docs?")
print(response)
Det er essensen. Herfra legger ekte apper til bedre chunking, reranking, strukturerte prompter og observerbarhet.
Inntak: Ta med dine egne data (BYOD) på riktig måte
Når du bestemmer deg for hvordan du skal bruke LlamaIndex for ekte data, velg innlastere som samsvarer med kildene dine og bevarer strukturen.
- Filer:
SimpleDirectoryReader, PDF/HTML/Markdown-lesere
- Web:
BeautifulSoupWebReader, sitemap-lesere
- SaaS: Notion, Confluence, Slack, Google Drive (via koblinger)
- Databaser: SQL og vektor-DB-er (Pinecone, Weaviate, Chroma, Elasticsearch)
- Tips: Normaliser metadata (tittel, forfatter, URL, created_at). Gode metadata gir bedre reranking og filtrering senere.
from llama_index.core import SimpleDirectoryReader
from llama_index.readers.web import SimpleWebPageReader
file_docs = SimpleDirectoryReader("./policies").load_data
web_docs = SimpleWebPageReader(html_to_text=True).load_data
all_docs = file_docs + web_docs
Chunking og nodeparsere: Søppel inn, søppel ut
Å få chunking riktig er et av de viktigste trinnene når du lærer hvordan du bruker LlamaIndex effektivt.
- Hvorfor chunking er viktig: For stort → token-oppblåsing og irrelevant henting. For lite → kontekstfragmentering.
- Standardinnstillinger: Rimelig for mange tilfeller, men juster for din innholdstype.
- Tekniske dokumenter: 512–1024 token-chunks med 10–20 % overlapp.
- FAQ: Mindre chunks (256–512) for å holde Q/A-par intakte.
- Juridisk/policy: Større chunks (1024–1536) for å bevare definisjoner + klausuler.
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core import Document
parser = SentenceSplitter(chunk_size=800, chunk_overlap=100)
nodes = []
for d in all_docs:
nodes.extend(parser.get_nodes_from_documents([Document(text=d.text, metadata=d.metadata)]))
Indeksstrategier: Vektor, nøkkelord eller hybrid?
Å velge riktig indeks er avgjørende. Den gode nyheten: LlamaIndex lar deg kombinere dem.
- Vektorindeks: Flott for semantisk søk. Best for «forklar X» eller uklare spørsmål.
- Nøkkelord (BM25): Sterk for eksakte termer, ID-er, feilkoder, logger.
- Hybrid: Kombiner begge; ranger de beste kandidatene på nytt med en LLM eller cross-encoder.
from llama_index.core import VectorStoreIndex, SummaryIndex
from llama_index.core.retrievers import BM25Retriever
from llama_index.core.query_engine import RetrieverQueryEngine
# Vektorindeks fra forhåndsparsede noder
v_index = VectorStoreIndex(nodes)
# BM25 nøkkelordhenter
bm25_retriever = BM25Retriever.from_defaults(nodes=nodes, similarity_top_k=6)
# Hybrid: slå sammen kandidater, og ranger deretter på nytt
from llama_index.core.retrievers import RouterRetriever
from llama_index.retrievers.merge import MergerRetriever
v_retriever = v_index.as_retriever(similarity_top_k=6)
hybrid = MergerRetriever(retrievers=[v_retriever, bm25_retriever], top_k=8)
query_engine = RetrieverQueryEngine.from_args(retriever=hybrid)
Reranking og filtre: Øk presisjonen uten å betale for mye
Reranking forbedrer svarkvaliteten ved å omorganisere hentede chunks i henhold til relevans.
- Når du skal reranke: Hvis brukere rapporterer sitater utenfor tema eller lange, polstrede kontekster.
- Cross-encoders (bi-encoder embedding search → cross-encoder rerank)
- LLM-basert reranking (dyrere, noen ganger smartere på nyansert tekst)
- Metadatafiltre (f.eks.
source == 'handbook', created_at > 2024-01-01)
from llama_index.postprocessor.flag_embedding_reranker import FlagEmbeddingReranker
from llama_index.core.query_engine import RetrieverQueryEngine
reranker = FlagEmbeddingReranker(top_n=5, model="BAAI/bge-reranker-base")
query_engine = v_index.as_query_engine(
similarity_top_k=12,
node_postprocessors=[reranker]
)
Prompting og spørremotorer: Fra søk til svar
En spørremotor er der henting møter generering. For å mestre hvordan du bruker LlamaIndex i produksjon, design prompter og responssyntese nøye.
- Enkel «stuff» (sammenkjetting) for små kontekster
- Tre eller map-reduce for lengre kontekster
- Sitering modus for å vise kilder
from llama_index.core.response_synthesizers import get_response_synthesizer
from llama_index.core import ServiceContext
synth = get_response_synthesizer(response_mode="tree_summarize")
query_engine = v_index.as_query_engine(response_synthesizer=synth)
ans = query_engine.query("Summarize the onboarding steps and cite sources.")
print(ans)
- Egendefinerte prompter: Skreddersy tone, strukturerte utdata eller sikkerhetsmekanismer.
from llama_index.core.prompts import PromptTemplate
qa_tmpl = PromptTemplate(
"""
Du er en kortfattet, bevis-først assistent. Bruk bare den oppgitte konteksten.
Hvis du er usikker, si at du ikke vet. Returner JSON med nøklene: answer, sources.
Question: {query_str}
Context: {context_str}
"""
)
query_engine = v_index.as_query_engine(text_qa_template=qa_tmpl)
Agenter og verktøy: Når henting ikke er nok
Noen ganger krever svar handlinger: kjøre SQL, kalle APIer eller surfe. LlamaIndex-agenter koordinerer verktøy og resonnement med din hentingspipeline.
- Bruksområder: KPI-dashboards (SQL-verktøy), support-boter (API for oppslag av billetter), forskningsagenter (web + RAG).
from llama_index.core.agent import ReActAgent
from llama_index.tools.sql import SQLQueryEngineTool
from sqlalchemy import create_engine
engine = create_engine("sqlite:///analytics.db")
sql_tool = SQLQueryEngineTool.from_engine(engine)
agent = ReActAgent.from_tools([sql_tool], llm=llm, verbose=True)
agent.chat("What was monthly churn in Q2 2025? If needed, query the DB.")
Evaluering: Ikke lever blindt
Å lære hvordan du bruker LlamaIndex ansvarlig betyr å validere både henting og svar før lansering.
- Offline eval: Vurder hentings-recall/presisjon på et merket sett.
- Online eval: Logg brukerprompter, mål tilfredshet, deflection rates og hallusinasjoner.
- Innebygde: LlamaIndex tilbyr evalueringshjelpere for troskap og svarrelevans.
from llama_index.core.evaluation import FaithfulnessEvaluator, RelevancyEvaluator
faith = FaithfulnessEvaluator(llm=llm)
rel = RelevancyEvaluator(llm=llm)
pred = query_engine.query("List SOC 2 control families in our policy.")
print("faithful?", faith.evaluate_response(pred))
print("relevant?", rel.evaluate_response(pred))
- Praktisk bar: For interne assistenter, mål >80 % «nyttig» vurdering på de beste spørringene før bred lansering.
Persistens og vektorlagre: Gjør det skalerbart
Indekser bygget i minnet vil ikke holde for ekte arbeidsbelastninger. Lagre til en vektor-DB og aktiver inkrementelle oppdateringer.
- Populære backender: Pinecone, Weaviate, Chroma, Elasticsearch/OpenSearch, Qdrant.
- Tips: Bruk navnerom per leietaker eller avdeling; hold metadata rik.
# Eksempel: Chroma
# pip install chromadb llama-index-vector-stores-chroma
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext
import chromadb
chroma_client = chromadb.PersistentClient(path="./chroma_store")
collection = chroma_client.get_or_create_collection("company_knowledge")
vector_store = ChromaVectorStore(chroma_collection=collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(all_docs, storage_context=storage_context)
Sikkerhet og styring: Den delen alle glemmer
- PII-håndtering: Rediger eller hash sensitive felt under inntak.
- Tilgangskontroller: Filtrer etter brukerroller med metadatakonstrainter.
- Innholdsfriskhet: Planlegg re-inntak; merk versjoner.
- Sikkerhet: Legg til nektelsespolicyer og kilde-bare begrensninger i prompter.
# Eksempel: metadata-basert filtrering ved spørretidspunkt
retriever = index.as_retriever(similarity_top_k=8)
retriever.metadata_filters = {"department": ["legal", "security"], "published": [True]}
Fra prototype til produksjon: Distribusjonsmønstre
- Servermønster: Eksponer et
/query endepunkt; hold indeksen varm i minnet.
- Serverless fallgruve: Kalde starter + store modeller kan skade latensen; vurder administrert inferens.
- Caching: Cache embeddings og hyppige spørringsresultater; aktiver delvise oppdateringer.
- Observerbarhet: Logg hentede noder, token-bruk, svarlengde og tilbakemeldinger fra brukere.
# Minimal FastAPI wrapper
# pip install fastapi uvicorn
from fastapi import FastAPI
app = FastAPI
qe = index.as_query_engine(llm=llm)
@app.post("/query")
async def query(payload: dict):
q = payload.get("q", "")
resp = qe.query(q)
return {"answer": str(resp), "sources": [s.node.metadata for s in resp.source_nodes]}
Virkelige tegninger: Velg din vei
- Indeks: Hybrid (BM25 + Vektor) med reranking
- Sikkerhetsmekanismer: Kilde-bare modus; «Jeg vet ikke» fallback
- KPI: Oppløsningsrate for policy spørsmål
- Indeks: Produktdokumenter + release notes + billetter
- Agenter: API-verktøy for å sjekke ordre/billettstatus
- KPI: Første-kontakt oppløsning, deflection, CSAT
- Indeks: Web + PDF-er + notater; sterk deduplisering
- Rerank: Cross-encoder; syntese: map-reduce
- KPI: Tid til innsikt; siteringsnøyaktighet
- Verktøy: SQL-motor + RAG på metriske definisjoner
- Styring: Policyer på radnivå; spørringsrevisjon
- KPI: Korrekthet vs. ground truth
Kostnad og latens: Hold det raskt (og billig)
- Embeddings: Batch der det er mulig; bruk mindre modeller for recall, rerank selektivt.
- Kontekststørrelse: Sikt på 1–2k tokens av de mest relevante chunks.
- Caching: Cache topp-K henting for hot queries; memoize LLM-anrop med hashede prompter.
- Parallellisme: Fan-out henting → fan-in rerank for å redusere tail latency.
Vanlige fallgruver når du lærer hvordan du bruker LlamaIndex
- Over-chunking, som fører til grunne, støyende henting
- Ingen metadatafiltre, som fører til at irrelevante kilder slipper inn
- Stole på en enkelt indekstype for alt innhold
- Hoppe over evaluering; sende uten en kvalitetsbar
- La indekser bli gamle; ingen planlagt oppdatering
Forresten: Få fart på arbeidsflyten din i redigeringsprogrammet
Når du itererer på prompter, chunkere og hentingsinnstillinger, er det verdt å merke seg at en AI-kode- og forskningssidefelt som Sider.ai kan akselerere løkken. Du kan holde kodebiter, prompter og evalueringsnotater for hånden, generere diffs av promptendringer og raskt teste variasjoner uten å forlate nettleseren din. Dette er spesielt nyttig når du finjusterer hvordan du bruker LlamaIndex på tvers av forskjellige hentingsstrategier. Trinn-for-trinn sjekkliste: Fra null til produksjon
- Ta inn kilder og normaliser metadata
- Juster chunkstørrelser etter innholdstype
- Bygg vektor + BM25 indekser; aktiver hybrid henting
- Legg til reranking og metadatafiltre
- Tilpass prompter; aktiver siteringer og nektelsespolicy
- Evaluer troskap og relevans på et testsett
- Lagre til et vektorlager; aktiver inkrementelle oppdateringer
- Legg til observerbarhet, caching og RBAC-filtre
- Pakk inn i et API og sett SLA-er; dokumenter feilmoduser
Viktige takeaways
- Hvis du vil ha en robust RAG-app, vil det å lære hvordan du bruker LlamaIndex spare deg for uker med lim-engineering.
- Start enkelt, og legg deretter til hybrid henting, reranking og strukturerte prompter.
- Evaluer før du skalerer; lagre indekser og overvåk kvalitet i produksjon.
- Design for styring fra dag én – sikkerhet er ikke en ettertanke.
Neste steg
- Prototyp hurtigstarten på et lite dokumentsett.
- Eksperimenter med hybrid henting og en reranker.
- Legg til evaluering og siteringer; spor kvalitetsmetrikker.
- Flytt til et persistent vektorlager og distribuer et API.
FAQ
Q1: What is LlamaIndex used for in RAG applications?
LlamaIndex helps you connect your data to LLMs with ingestion, indexing, and retrieval components. It streamlines building RAG systems by handling chunking, vector/keyword indexes, and query orchestration.
Q2: How do I choose the right index type in LlamaIndex?
Use a vector index for semantic queries, BM25 for exact matches like IDs or codes, and a hybrid approach for best overall recall and precision. Many teams combine both and add reranking for top‑K results.
Spørsmål 3: Hvordan kan jeg forbedre nøyaktigheten når jeg bruker LlamaIndex?
Juster chunk-størrelser, inkluder rik metadata, aktiver hybrid henting og legg til en reranker. Implementer også evaluering for troskap og relevans, og bruk siteringsmodus for å vise kilder.
Spørsmål 4: Kan LlamaIndex fungere med min eksisterende vektor database?
Ja. LlamaIndex integreres med populære vektorlagre som Pinecone, Weaviate, Chroma, Qdrant og Elasticsearch. Behold indekser for skalerbarhet og inkrementelle oppdateringer.
Spørsmål 5: Hvordan distribuerer jeg en LlamaIndex-applikasjon til produksjon?
Pakk spørringsmotoren din inn i et API (f.eks. FastAPI), lagre data i et vektorlager, legg til caching og observerbarhet, og evaluer kvalitet kontinuerlig. Håndhev metadata-filtre og tilgangskontroll for sikkerhet.