TL;DR
- Installeer LlamaIndex in 2 minuten met
pip install llama-index(Python) ofnpm install llamaindex(TypeScript) Volledige gids. - Laad documenten uit 200+ bronnen (PDF's, SQL, Notion) en parseer ze naar gestructureerde nodes Data-inladers.
- Bouw productieklaar RAG-pipelines met hybride zoekfunctionaliteit (vector + trefwoord) en herrangschikking RAG-gids.
- Implementeer met observability (Arize, LangSmith) en schaal met LlamaCloud Aanmelden.
- Valkuilen: Grote indexen vereisen 16GB+ RAM; multimodale RAG vereist betaalde API's Multimodale kosten.
1. Installatie en Snelstart
Python (LlamaIndex.Py)
# Installeer het kernpakket (minimale afhankelijkheden)
pip install llama-index-core
# Installeer de volledige suite (inclusief multimodaal, agents, etc.)
pip install llama-index
# Verifieer de installatie
python -c "from llama_index.core import VectorStoreIndex; print('LlamaIndex v0.10.28 gereed')"
# Verwachte uitvoer: LlamaIndex v0.10.28 gereed
Versie geverifieerd via GitHub Releases.
Valkuilen:
- Als u
ImportError: No module named 'llama_index'ziet, zorg er dan voor dat u Python 3.9+ en een virtuele omgeving gebruikt. - Voor GPU-versnelling installeert u eerst PyTorch:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118.
TypeScript (LlamaIndex.TS)
npm install llamaindex
# of
yarn add llamaindex
# Verifieer de installatie
node -e "const { VectorStoreIndex } = require('llamaindex'); console.log('LlamaIndex.TS v0.3.12 gereed')"
# Verwachte uitvoer: LlamaIndex.TS v0.3.12 gereed
TypeScript-ondersteuning gedocumenteerd in TS-gids.
2. Documenten laden en parseren
Laad een PDF en parseer naar nodes
from llama_index.core import SimpleDirectoryReader
# Laad documenten uit een directory (ondersteunt PDF, DOCX, CSV, etc.)
documents = SimpleDirectoryReader("data/").load_data()
print(f"{len(documents)} documenten geladen")
# Verwachte uitvoer: 3 documenten geladen
# Parseer naar nodes (chunks met metadata)
from llama_index.core.node_parser import SentenceSplitter
parser = SentenceSplitter(chunk_size=512, chunk_overlap=20)
nodes = parser.get_nodes_from_documents(documents)
print(f"{len(nodes)} nodes aangemaakt")
# Verwachte uitvoer: 42 nodes aangemaakt
Documentatie voor data-inladers beschikbaar in Data-inladers.
Belangrijke kenmerken:
- 200+ dataconnectors: Laad gegevens uit Notion, Slack, SQL en meer Data-inladers.
- LlamaParse: Betaalde API voor het parseren van complexe PDF's (tabellen, meerkoloms lay-outs). Gratis proefversie beschikbaar LlamaParse.
from llama_parse import LlamaParse parser = LlamaParse(api_key="llx-...", result_type="markdown") documents = parser.load_data("data/rapport.pdf")
Valkuilen:
- Grote PDF's (>100 pagina's) kunnen time-out veroorzaken met
SimpleDirectoryReader. GebruikLlamaParsevoor betere resultaten LlamaParse. - Voor SQL-databases gebruikt u
SQLTableRetrieverQueryEngineom automatisch query's te genereren vanuit natuurlijke taal.
3. Indexsoorten
Vectorindex (standaard voor RAG)
from llama_index.core import VectorStoreIndex
# Maak een vectorindex aan (gebruikt standaard OpenAI-embeddings)
index = VectorStoreIndex.from_documents(documents)
# Bewaar op schijf
index.storage_context.persist("storage/")
Verwachte uitvoer:
INFO:llama_index.core.storage.storage_context:VectorStoreIndex opgeslagen in storage/
Trefwoordindex (lexicale zoekopdracht)
from llama_index.core import KeywordTableIndex
keyword_index = KeywordTableIndex.from_documents(documents)
Boomindex (hiërarchische samenvatting)
from llama_index.core import TreeIndex
tree_index = TreeIndex.from_documents(documents)
# Voer een query uit met een child-branch-traversal
query_engine = tree_index.as_query_engine(child_branch_factor=2)
response = query_engine.query("Vat de belangrijkste punten samen")
print(response)
Wanneer welke gebruiken:
| Indexsoort | Gebruiksscenario | Voordelen | Nadelen |
|---|---|---|---|
| Vector | Semantisch zoeken, RAG. | Hoge nauwkeurigheid, ondersteunt hybride zoeken. | Langzamer bij grote datasets. |
| Trefwoord | Lexicaal zoeken (bijv. exacte overeenkomsten). | Snel, geen embeddings nodig. | Geen semantisch begrip. |
| Boom | Hiërarchische gegevens (bijv. juridische documenten). | Behoudt structuur. | Complexe query's. |
Valkuilen:
- Vectorindexen vereisen een embeddingmodel (standaard: OpenAI's
text-embedding-3-small). Voor lokale embeddings gebruikt uHuggingFaceEmbedding:from llama_index.embeddings.huggingface import HuggingFaceEmbedding embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5") index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)
4. Query-engine opzetten
Basis query-engine
query_engine = index.as_query_engine()
response = query_engine.query("Wat zijn de risico's van AI in 2026?")
print(response)
Verwachte uitvoer:
De risico's van AI in 2026 zijn onder andere:
1. Banenverlies in creatieve sectoren.
2. Toename van desinformatie via deepfakes.
3. Regelgevingshiaten bij multimodale modellen.
Bron: data/rapport.pdf (pagina 42)
Hybride zoeken (vector + trefwoord)
from llama_index.core import QueryBundle
from llama_index.core.retrievers import BaseRetriever
class HybridRetriever(BaseRetriever):
def __init__(self, vector_index, keyword_index):
self.vector_retriever = vector_index.as_retriever()
self.keyword_retriever = keyword_index.as_retriever()
def _retrieve(self, query_bundle: QueryBundle):
vector_nodes = self.vector_retriever.retrieve(query_bundle)
keyword_nodes = self.keyword_retriever.retrieve(query_bundle)
return vector_nodes + keyword_nodes
retriever = HybridRetriever(index, keyword_index)
query_engine = index.as_query_engine(retriever=retriever)
Geavanceerde zoektechnieken gedocumenteerd in RAG-gids.
Valkuilen:
- Hybride zoeken voegt ~200-500ms latentie toe. Gebruik
similarity_top_k=2om resultaten te beperken. - Voor productie voegt u een herrangschikker toe (bijv.
CohereRerank):from llama_index.postprocessor.cohere_rerank import CohereRerank reranker = CohereRerank(api_key="...", top_n=3) query_engine = index.as_query_engine(node_postprocessors=[reranker])
5. Aangepaste retrievers
Bouw een tijdgebaseerde retriever
from llama_index.core import get_response_synthesizer
from llama_index.core.retrievers import BaseRetriever
from llama_index.core.schema import NodeWithScore
from typing import List
class TimeBasedRetriever(BaseRetriever):
def __init__(self, index, time_field="date"):
self.index = index
self.time_field = time_field
def _retrieve(self, query_bundle: QueryBundle) -> List[NodeWithScore]:
# Filter nodes op tijd (bijv. "documenten uit 2025-2026")
nodes = self.index.docstore.get_nodes()
filtered_nodes = [
node for node in nodes
if node.metadata.get(self.time_field, "").startswith("2025")
]
return [NodeWithScore(node=node, score=1.0) for node in filtered_nodes]
retriever = TimeBasedRetriever(index)
query_engine = index.as_query_engine(retriever=retriever)
Gebruiksscenario's:
- ASSESS (AI-beveiligingspostuurkader): Haal logboeken op uit een specifiek tijdvenster om blootstelling te evalueren.
- COMPLY: Filter documenten op nalevingstags (bijv. "AVG", "HIPAA").
6. Evaluatie en metrics
Voer een RAG-evaluatie uit
from llama_index.core.evaluation import (
generate_question_context_pairs,
EmbeddingQAFinetuneDataset,
)
from llama_index.evaluation import RetrieverEvaluator
# Genereer synthetische vraag-antwoordparen
qa_dataset = generate_question_context_pairs(documents, num_questions_per_chunk=2)
# Evalueer retriever
retriever = index.as_retriever(similarity_top_k=2)
evaluator = RetrieverEvaluator.from_metric_names(
["mrr", "hit_rate"], retriever=retriever
)
eval_results = await evaluator.aevaluate_dataset(qa_dataset)
print(eval_results)
Verwachte uitvoer:
{'mrr': 0.85, 'hit_rate': 0.92}
Belangrijke metrics:
| Metric | Beschrijving | Streefwaarde |
|---|---|---|
| MRR | Mean Reciprocal Rank. | >0.8 |
| Hit Rate | Percentage van query's met relevante resultaten. | >0.9 |
| Faithfulness | Percentage van antwoorden gebaseerd op context. | >0.95 |
Valkuilen:
- Het genereren van synthetische vraag-antwoordparen vereist een LLM (standaard: OpenAI). Voor lokale evaluatie gebruikt u
LlamaCPP:from llama_index.llms.llama_cpp import LlamaCPP llm = LlamaCPP(model_path="models/llama-2-7b.Q4_K_M.gguf") qa_dataset = generate_question_context_pairs(documents, llm=llm)
7. Productie-implementatietips
Implementeer met FastAPI
from fastapi import FastAPI
from llama_index.core import VectorStoreIndex
from pydantic import BaseModel
app = FastAPI()
index = VectorStoreIndex.from_documents(documents)
class QueryRequest(BaseModel):
query: str
@app.post("/query")
async def query_index(request: QueryRequest):
query_engine = index.as_query_engine()
response = query_engine.query(request.query)
return {"response": str(response)}
# Start met: uvicorn app:app --reload
Verwachte uitvoer (API):
{
"response": "De risico's van AI in 2026 omvatten banenverlies en desinformatie."
}
Observability met Arize
from llama_index.core.callbacks import CallbackManager
from llama_index.callbacks.arize_ai import ArizeCallbackHandler
arize_callback = ArizeCallbackHandler(
api_key="...",
space_key="...",
)
callback_manager = CallbackManager([arize_callback])
index = VectorStoreIndex.from_documents(
documents, callback_manager=callback_manager
)
Observability-functies gedocumenteerd in Observability.
Schaal met LlamaCloud
from llama_index.indices.managed.llama_cloud import LlamaCloudIndex
index = LlamaCloudIndex.from_documents(
documents,
name="my-production-index",
project_name="my-project",
api_key="llx-...",
)
LlamaCloud-documentatie beschikbaar op Aanmelden.
Valkuilen:
- LlamaCloud-indexen zijn eventually consistent (updates kunnen ~1 minuut duren).
- Voor multimodale RAG gebruikt u
LlamaCloudMultiModalIndexMultimodaal.
Alternatieven in een oogopslag
| Tool | Beste voor | Belangrijkste beperking |
|---|---|---|
| LlamaIndex | Enterprise RAG, multimodale applicaties. | TS-versie minder volwassen TS Roadmap |
