Tutorial Membangun RAG Pipeline Lokal dengan Ollama dan LangChain
AP
Adrian Prat

Dipublikasikan 17 Juni 2026

Tutorial Membangun RAG Pipeline Lokal dengan Ollama dan LangChain

Retrieval Augmented Generation (RAG) telah menjadi standar industri untuk membangun aplikasi AI yang bisa menjawab pertanyaan berdasarkan dokumen privat. Alih-alih mengirimkan seluruh dokumen ke LLM setiap kali ada pertanyaan, RAG bekerja dengan mengindeks dokumen terlebih dahulu, lalu mengambil bagian yang relevan untuk dijadikan konteks. Hasilnya: jawaban yang akurat, biaya API yang rendah, dan data tetap privat.

Tutorial ini akan membimbing kamu membangun pipeline RAG sepenuhnya di komputer lokal menggunakan Ollama untuk menjalankan LLM dan LangChain sebagai orchestration framework. Tidak diperlukan koneksi ke API berbayar seperti OpenAI. Semua proses berjalan offline di mesin kamu sendiri.

Prasyarat dan Instalasi Ollama

Ollama adalah tool untuk menjalankan LLM open source secara lokal dengan setup yang sangat mudah. Ollama tersedia untuk macOS, Linux, dan Windows. Download installer dari ollama.com atau install via command line untuk Linux:

curl -fsSL https://ollama.com/install.sh | sh

Setelah terinstall, verifikasi dengan menjalankan:

ollama --version

Pull model yang akan kita gunakan. Pada tutorial ini, kita pakai Llama 3 yang memiliki keseimbangan baik antara speed dan quality:

ollama pull llama3

Selain Ollama, kita membutuhkan Python 3.9 atau lebih tinggi. Buat virtual environment dan install dependency:

python3 -m venv venv
source venv/bin/activate
pip install langchain langchain-community langchain-ollama chromadb

ChromaDB akan berfungsi sebagai vector database lokal untuk menyimpan embedding dokumen.

Langkah 1: Menyiapkan Dokumen untuk Diindeks

Buat folder project dan siapkan dokumen sample. Untuk tutorial ini, kita akan menggunakan beberapa file teks yang berisi informasi tentang produk fiktif. Buat folder data dan file teks di dalamnya:

mkdir rag-local-demo
cd rag-local-demo
mkdir data

cat > data/produk-a.txt << EOF
Prok A adalah solusi CRM berbasis AI yang dirancang untuk UMKM Indonesia.
Fitur utama meliputi: otomasi follow-up, analisis sentimen, dan integrasi WhatsApp.
Harga mulai dari Rp 299.000 per bulan untuk 2 user.
EOF

cat > data/produk-b.txt << EOF
Prok B menawarkan layanan payment gateway dengan fee transaksi 2.5 persen.
Mendukung virtual account, e-wallet, dan kartu kredit.
API dokumentasi lengkap tersedia di developer portal.
EOF

Pastikan dokumen menggunakan format yang bisa dibaca sebagai plain text. PDF juga didukung oleh LangChain, namun memerlukan library tambahan seperti PyPDF2.

Langkah 2: Membuat Document Loader dan Splitter

Langkah selanjutnya adalah membaca dokumen dan memecahnya menjadi chunk yang lebih kecil. Chunking penting karena LLM memiliki batas konteks yang terbatas. LangChain menyediakan TextLoader dan RecursiveCharacterTextSplitter untuk tujuan ini.

Buat file index.py:

from langchain_community.document_loaders import DirectoryLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = DirectoryLoader(
    "data",
    glob="**/*.txt",
    loader_cls=TextLoader
)
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
chunks = text_splitter.split_documents(documents)

print(f"Loaded {len(documents)} documents")
print(f"Split into {len(chunks)} chunks")

Jalankan script untuk memastikan dokumen terbaca:

python3 index.py

Outputnya akan menunjukkan jumlah dokumen dan chunk yang dihasilkan. Jika dokumen besar, jumlah chunk bisa mencapai ratusan atau ribuan.

Langkah 3: Membuat Embedding dan Vector Store

Embedding adalah representasi numerik dari teks yang memungkinkan pencarian berbasis similarity. Kita akan menggunakan OllamaEmbeddings dengan model nomic-embed-text, yang ringan dan cepat untuk dijalankan secara lokal.

Tambahkan kode berikut ke index.py:

from langchain_ollama import OllamaEmbeddings
from langchain_community.vectorstores import Chroma

embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db"
)

print("Vector store created and persisted.")

Jalankan lagi:

python3 index.py

Proses ini akan memakan waktu beberapa menit tergantung ukuran dokumen dan kecepatan CPU. Hasilnya adalah folder chroma_db yang berisi indeks vector siap digunakan untuk retrieval.

Langkah 4: Membangun RAG Chain

Setelah dokumen terindeks, bangun chain untuk menjawab pertanyaan. Chain ini terdiri dari tiga komponen: retriever untuk mencari dokumen relevan, prompt template untuk memformat konteks, dan LLM untuk menghasilkan jawaban.

Buat file query.py:

from langchain_ollama import ChatOllama
from langchain.chains import RetrievalQA
from langchain_community.vectorstores import Chroma
from langchain_ollama import OllamaEmbeddings

embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma(
    persist_directory="./chroma_db",
    embedding_function=embeddings
)

llm = ChatOllama(model="llama3", temperature=0.1)

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)

question = "Berapa harga Prok A dan fitur utamanya?"
result = qa_chain.invoke({"query": question})

print("Answer:", result["result"])
print("
Sources:")
for doc in result["source_documents"]:
    print(f"- {doc.metadata['source']}")

Jalankan query:

python3 query.py

LLM akan mencari 3 chunk paling relevan dari vector store, menggabungkannya sebagai konteks, dan menghasilkan jawaban berdasarkan informasi dalam dokumen. Karena semua berjalan secara lokal, tidak ada biaya API yang dikenakan.

Langkah 5: Menambahkan Conversational Memory

Pipeline dasar di atas tidak memiliki memory. Setiap pertanyaan dianggap independen. Untuk membuat chatbot yang bisa mengikuti percakapan, tambahkan conversational memory menggunakan LangChain.

Buat file chat.py:

from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain_ollama import ChatOllama
from langchain_community.vectorstores import Chroma
from langchain_ollama import OllamaEmbeddings

embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma(
    persist_directory="./chroma_db",
    embedding_function=embeddings
)

llm = ChatOllama(model="llama3", temperature=0.1)
memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True
)

qa_chain = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    memory=memory
)

print("Chatbot RAG siap. Ketik 'exit' untuk keluar.")
while True:
    question = input("
Anda: ")
    if question.lower() == "exit":
        break
    result = qa_chain.invoke({"question": question})
    print(f"Bot: {result['answer']}")

Jalankan:

python3 chat.py

Coba ajukan pertanyaan berurutan:

Anda: Berapa harga Prok A?
Bot: Harga Prok A mulai dari Rp 299.000 per bulan untuk 2 user.
Anda: Fitur utama apa saja?
Bot: Fitur utama Prok A meliputi otomasi follow-up, analisis sentimen, dan integrasi WhatsApp.

Memory memungkinkan bot memahami bahwa "itu" pada pertanyaan kedua merujuk pada Prok A dari percakapan sebelumnya.

Optimasi dan Deployment

Beberapa tips untuk mengoptimasi pipeline RAG lokal:

  • Gunakan model embedding yang lebih kekinian seperti mxbai-embed-large untuk kualitas retrieval yang lebih baik

  • Eksperimen dengan chunk_size dan chunk_overlap untuk menemukan sweet spot dokumen kamu

  • Tambahkan reranking dengan cross-encoder untuk meningkatkan precision retrieval

  • Gunakan GPU jika tersedia untuk mempercepat proses embedding dan inference

Untuk deployment, containerize aplikasi dengan Docker. Ollama bisa dijalankan sebagai service terpisah, sementara aplikasi RAG berjalan di container lain. Dokumentasi Ollama REST API tersedia di GitHub ollama/ollama.

Kesimpulan

RAG pipeline lokal dengan Ollama dan LangChain membuktikan bahwa teknologi AI canggih tidak harus bergantung pada cloud berbayar. Dengan hardware standar, kamu bisa membangun chatbot berbasis dokumen yang sepenuhnya privat, tanpa biaya recurring, dan tanpa risiko data leak ke vendor pihak ketiga.

Setup ini sangat cocok untuk internal knowledge base, helpdesk otomatis, atau asisten riset pribadi. Langkah selanjutnya: eksplorasi model multilingual untuk dokumen Bahasa Indonesia, dan integrasi dengan framework web seperti Streamlit atau FastAPI untuk membuat interface yang ramah user.