Dipublikasikan 4 Agustus 2026
Retrieval-Augmented Generation (RAG) adalah teknik yang memungkinkan large language model (LLM) menjawab pertanyaan berdasarkan dokumen pribadi atau basis data internal. Alih-alih mengandalkan pengetahuan umum yang terbatas, RAG mengambil konteks relevan dari sumber eksternal sebelum menghasilkan respons. Artikel ini membahas panduan praktis membangun RAG chatbot lokal menggunakan Ollama dan LangChain agar data tetap berada di mesin Anda sendiri.
Sebelum mulai coding, pastikan sistem telah memenuhi prasyarat berikut:
Python 3.10 atau lebih baru
Ollama terinstal di mesin lokal
Minimal 8 GB RAM (disarankan 16 GB untuk model 7B parameter)
Instal Ollama sesuai sistem operasi melalui halaman resmi. Setelah terpasang, verifikasi dengan perintah ollama --version di terminal.
Buat virtual environment baru untuk mengisolasi proyek. Aktifkan environment tersebut, lalu pasang library yang dibutuhkan:
pip install langchain langchain-community ollama chromadb unstructuredLangChain Community berisi integrasi untuk vector store dan loader dokumen. ChromaDB berperan sebagai vector database lokal, sementara unstructured digunakan untuk mengekstrak teks dari file PDF atau Word.
Ollama memudahkan distribusi model LLM dalam format yang siap jalankan. Unduh model yang cukup ringan namun mumpuni untuk percakapan bahasa Indonesia:
ollama pull llama3.1:8bModel llama3.1 dengan 8 miliar parameter menghasilkan respons cepat pada hardware consumer-grade. Setelah proses pull selesai, uji dengan ollama run llama3.1:8b untuk memastikan tidak ada masalah kompatibilitas.
Kumpulkan file-file yang ingin dijadikan basis pengetahuan chatbot. Format yang didukung meliputi PDF, TXT, DOCX, dan Markdown. Tempatkan semua file dalam folder data/ di root proyek.
LangChain menyediakan berbagai loader dokumen. Contoh berikut menggunakan DirectoryLoader untuk membaca semua file PDF sekaligus:
from langchain_community.document_loaders import DirectoryLoader\nloader = DirectoryLoader("data/", glob="**/*.pdf")\ndocs = loader.load()Pastikan setiap dokumen memiliki teks yang bisa diekstrak. Dokumen yang berisi gambar atau scan hasil OCR mungkin memerlukan preprocessing tambahan.
Langkah krusial dalam RAG adalah mengubah dokumen menjadi embedding numerik dan menyimpannya di vector database. Proses ini memungkinkan sistem mencari bagian dokumen yang paling relevan dengan pertanyaan pengguna.
from langchain_community.embeddings import OllamaEmbeddings\nfrom langchain_community.vectorstores import Chroma\nembeddings = OllamaEmbeddings(model="llama3.1:8b")\nvectorstore = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db")Embedding dihitung secara lokal melalui Ollama, sehingga tidak ada data yang keluar ke API pihak ketiga. Proses ini bisa memakan waktu beberapa menit tergantung jumlah dan ukuran dokumen.
Setelah vector store tersedia, gabungkan komponen retrieval dengan LLM menjadi satu pipeline. LangChain menyederhanakan tugas ini melalui class RetrievalQA atau create_retrieval_chain.
from langchain.chains import RetrievalQA\nfrom langchain_community.llms import Ollama\nllm = Ollama(model="llama3.1:8b")\nqa_chain = RetrievalQA.from_chain_type(\n llm=llm,\n chain_type="stuff",\n retriever=vectorstore.as_retriever(search_kwargs={"k": 3})\n)\nresult = qa_chain.invoke({"query": "Apa kebijakan cuti di perusahaan kami?"})\nprint(result["result"])Parameter search_kwargs={"k": 3} mengambil tiga chunk dokumen paling relevan untuk dikirim ke LLM sebagai konteks. Nilai k bisa disesuaikan: lebih besar untuk dokumen kompleks, lebih kecil untuk respons yang ringkas.
Agar chatbot bisa diakses dengan mudah, tambahkan antarmuka berbasis terminal atau web sederhana menggunakan Streamlit. Instal Streamlit terlebih dahulu:
pip install streamlitBuat file app.py dengan kode berikut:
import streamlit as st\nfrom langchain.chains import RetrievalQA\nfrom langchain_community.llms import Ollama\nfrom langchain_community.vectorstores import Chroma\nfrom langchain_community.embeddings import OllamaEmbeddings\nst.title("RAG Chatbot Lokal")\nquery = st.text_input("Tanyakan sesuatu:")\nif query:\n embeddings = OllamaEmbeddings(model="llama3.1:8b")\n vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)\n llm = Ollama(model="llama3.1:8b")\n qa = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever())\n answer = qa.invoke({"query": query})\n st.write(answer["result"])Jalankan aplikasi dengan streamlit run app.py. Browser akan terbuka otomatis menampilkan halaman chat interaktif.
Agar performa RAG chatbot tetap responsif, perhatikan beberapa poin berikut:
Gunakan chunk size 500-1000 karakter dengan overlap 100 karakter agar konteks tidak terputus di tengah kalimat.
Pilih model embedding ringan seperti nomic-embed-text via Ollama untuk mengurangi beban CPU.
Simpan vector store di SSD, bukan HDD, agar retrieval berjalan lebih cepat.
Dengan mengikuti panduan ini, Anda telah berhasil membangun chatbot cerdas yang berjalan sepenuhnya di lokal tanpa ketergantungan pada layanan cloud berbayar. Arsitektur serupa bisa dikembangkan lebih lanjut dengan menambahkan memory, multi-modal input, atau deployment ke container Docker.
Sumber: LangChain RAG Tutorial, Ollama Blog
Dapatkan feedback, users, dan eksposur dari komunitas kreator, developer, dan entrepreneur digital Indonesia.
Submit Produk → Pelajari Dulu