Tutorial Lengkap LlamaIndex: Membangun Aplikasi RAG dengan LLM
LlamaIndex adalah framework data yang powerful untuk membangun aplikasi berbasis LLM. Library ini menyediakan tools untuk mengimpor, menytruktur, dan mengakses data privat atau domain-spesifik, menjadikannya sempurna untuk membangun sistem Retrieval-Augmented Generation (RAG).
Mengapa LlamaIndex?
Keunggulan LlamaIndex:- Mudah impor data: Koneksi ke 100+ sumber data
- Indexing fleksibel: Multiple tipe index untuk berbagai kebutuhan
- Query engines: Natural language querying atas data Anda
- Kemampuan agent: Bangun LLM agents otonom
- Production ready: Scalable dan observable
- Question answering atas dokumen
- Chatbot dengan knowledge base
- Ringkasan dokumen
- Semantic search
- Agent analisis data
Instalasi
pip install llama-index
Dengan OpenAI
pip install llama-index-llms-openai llama-index-embeddings-openai
Dengan model lokal
pip install llama-index-llms-ollama llama-index-embeddings-huggingface
Verify
python -c "import llamaindex; print(llamaindex.version)"
Quick Start
1. Basic RAG Pipeline
from llamaindex.core import VectorStoreIndex, SimpleDirectoryReader
from llama
index.llms.openai import OpenAI
import os
os.environ["OPENAIAPIKEY"] = "your-api-key"
Load dokumen
documents = SimpleDirectoryReader("./data").loaddata()
Buat index
index = VectorStoreIndex.fromdocuments(documents)
Query
queryengine = index.asqueryengine()
response = queryengine.query("Apa topik utama dari dokumen ini?")
print(response)
2. Dengan Custom LLM
from llamaindex.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama
index.llms.openai import OpenAI
from llamaindex.embeddings.openai import OpenAIEmbedding
Konfigurasi settings
Settings.llm = OpenAI(model="gpt-4", temperature=0.1)
Settings.embedmodel = OpenAIEmbedding(model="text-embedding-3-small")
Load dan index
documents = SimpleDirectoryReader("./data").loaddata()
index = VectorStoreIndex.fromdocuments(documents)
Query dengan streaming
queryengine = index.asqueryengine(streaming=True)
response = queryengine.query("Ringkas poin-poin utama")
for token in response.responsegen:
print(token, end="", flush=True)
3. Dengan Model Lokal (Ollama)
from llamaindex.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llamaindex.llms.ollama import Ollama
from llamaindex.embeddings.huggingface import HuggingFaceEmbedding
Gunakan model lokal
Settings.llm = Ollama(model="llama2", requesttimeout=300.0)
Settings.embedmodel = HuggingFaceEmbedding(modelname="BAAI/bge-small-en-v1.5")
Bangun RAG
documents = SimpleDirectoryReader("./data").loaddata()
index = VectorStoreIndex.fromdocuments(documents)
queryengine = index.asqueryengine()
response = queryengine.query("Apa yang dibahas dokumen ini?")
print(response)
Loading Data
1. File Readers
from llamaindex.core import SimpleDirectoryReader
Load dari direktori
documents = SimpleDirectoryReader(
inputdir="./data",
recursive=True,
requiredexts=[".pdf", ".txt", ".md"]
).loaddata()
Load file spesifik
documents = SimpleDirectoryReader(
inputfiles=["doc1.pdf", "doc2.txt"]
).loaddata()
Dengan metadata
documents = SimpleDirectoryReader(
"./data",
filemetadata=lambda filename: {"source": filename}
).loaddata()
2. Web Readers
from llamaindex.readers.web import SimpleWebPageReader, BeautifulSoupWebReader
Simple web reader
reader = SimpleWebPageReader()
documents = reader.loaddata(["https://example.com/page1", "https://example.com/page2"])
BeautifulSoup reader
reader = BeautifulSoupWebReader()
documents = reader.loaddata(