{"id":399,"date":"2026-07-09T10:34:36","date_gmt":"2026-07-09T03:34:36","guid":{"rendered":"https:\/\/komunitech.com\/blog\/?p=399"},"modified":"2026-07-11T15:56:56","modified_gmt":"2026-07-11T08:56:56","slug":"cara-bikin-rag-agent-dengan-langchain-panduan-step-by-step","status":"publish","type":"post","link":"https:\/\/komunitech.com\/blog\/tutorial\/cara-bikin-rag-agent-dengan-langchain-panduan-step-by-step\/","title":{"rendered":"Cara Bikin RAG Agent dengan LangChain: Panduan Step-by-Step"},"content":{"rendered":"<p><strong>tl;dr:<\/strong> RAG (Retrieval-Augmented Generation) bikin LLM bisa jawab pertanyaan berbasis dokumen kamu, bukan cuma modal ingatan trainingnya. Pakai LangChain, tinggal load dokumen \u2192 split jadi chunks \u2192 embed ke vector store \u2192 retrieve \u2192 gabung sama LLM chain. Panduan ini step-by-step dari instalasi sampai upgrade ke RAG Agent yang bisa multi-tool.<\/p>\n<h2>Pendahuluan<\/h2>\n<p>LLM seperti GPT-4o dan Gemini memang pintar. Tapi mereka punya kelemahan fatal: <strong>data training terpotong di tanggal tertentu<\/strong> dan <strong>sering hallucinate<\/strong> kalau ditanya hal spesifik tentang dokumen internal perusahaan.<\/p>\n<p>Solusinya? <strong>RAG (Retrieval-Augmented Generation).<\/strong><\/p>\n<p>RAG adalah arsitektur yang menggabungkan dua kekuatan:<\/p>\n<p>1. <strong>Retrieval<\/strong> \u2014 Mencari data relevan dari database, dokumen, atau API eksternal<\/p>\n<p>2. <strong>Generation<\/strong> \u2014 Menggunakan LLM untuk merangkum jawaban berdasarkan data yang ditemukan<\/p>\n<p>Hasilnya? Agent yang bisa menjawab pertanyaan berdasarkan dokumen kamu \u2014 bukan cuma modal ingatan LLM.<\/p>\n<p>Di panduan ini, kamu akan belajar <a href=\"\/blog\/ai-agent\/cara-kerja-ai-agent-dari-prompt-ke-aksi-otonom\/\">cara bikin RAG agent<\/a> <a href=\"https:\/\/komunitech.com\/blog\/ai-agent\/cara-belajar-bikin-ai-agent-dari-nol-sampai-deploy-pakai-openclaw-2026\/\">dari nol<\/a> menggunakan LangChain. Langsung praktik, kode bisa dicopy-paste.<\/p>\n<h2>Apa Itu RAG dan Kenapa Penting?<\/h2>\n<h3>Problem yang Dipecahkan RAG<\/h3>\n<table>\n<tr>\n<td>\n<p><strong>Problem<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Tanpa RAG<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Dengan RAG<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Data terbaru<\/p>\n<\/td>\n<td>\n<p>LLM hanya tahu data sampai cutoff date<\/p>\n<\/td>\n<td>\n<p>Agent bisa akses dokumen terbaru kapan saja<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Data privat<\/p>\n<\/td>\n<td>\n<p>LLM tidak tahu data internal perusahaan<\/p>\n<\/td>\n<td>\n<p>Dokumen internal bisa dijadikan sumber<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Hallucination<\/p>\n<\/td>\n<td>\n<p>Sering jawab ngasal kalau tidak tahu<\/p>\n<\/td>\n<td>\n<p>Jawaban berdasarkan konteks yang diberikan<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Biaya<\/p>\n<\/td>\n<td>\n<p>Fine-tuning mahal dan perlu ulang<\/p>\n<\/td>\n<td>\n<p>Zero training \u2014 cukup upload dokumen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Update pengetahuan<\/p>\n<\/td>\n<td>\n<p>Harus retrain model<\/p>\n<\/td>\n<td>\n<p>Tinggal ganti dokumen sumber<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<h3>Arsitektur RAG Standard<\/h3>\n<pre>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                    \u2502  Dokumen    \u2502\n                    \u2502  PDF\/Web\/DB \u2502\n                    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                           \u25bc\n                    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                    \u2502  Text Split \u2502\n                    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                           \u25bc\n                    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                    \u2502  Embedding  \u2502\n                    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                           \u25bc\n                    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                    \u2502 Vector Store\u2502\n                    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                           \u2502\n    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    \u2502            Query     \u2502                      \u2502\n    \u2502              \u2502       \u2502                      \u2502\n    \u2502              \u25bc       \u25bc                      \u2502\n    \u2502       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                      \u2502\n    \u2502       \u2502  Retriever   \u2502                      \u2502\n    \u2502       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                      \u2502\n    \u2502              \u2502 Retrieved Documents           \u2502\n    \u2502              \u25bc                               \u2502\n    \u2502       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                      \u2502\n    \u2502       \u2502  LLM + Prompt\u2502                      \u2502\n    \u2502       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                      \u2502\n    \u2502              \u25bc                               \u2502\n    \u2502       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                      \u2502\n    \u2502       \u2502   Jawaban    \u2502                      \u2502\n    \u2502       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                      \u2502\n    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/pre>\n<h2>Step 1: Instalasi Dependensi<\/h2>\n<p>Pertama, install semua package yang dibutuhkan:<\/p>\n<pre><code class=\"language-python\">pip install -U langchain langchain-openai langchain-chroma\npip install pypdf         # Untuk baca PDF\npip install beautifulsoup4 requests  # Untuk web scraping<\/code><\/pre>\n<h2>Step 2: Load Dokumen<\/h2>\n<p>LangChain punya <strong>Document Loaders<\/strong> untuk berbagai format. Berikut beberapa yang paling berguna:<\/p>\n<h3>Load PDF<\/h3>\n<pre><code class=\"language-python\">from langchain_community.document_loaders import PyPDFLoader\n\nloader = PyPDFLoader(\"laporan-keuangan-2025.pdf\")\ndocuments = loader.load()\nprint(f\"Total halaman: {len(documents)}\")\n<h1>documents[0].page_content -&gt; teks halaman 1<\/h1>\n<h1>documents[0].metadata    -&gt; {'source': '...', 'page': 1}<\/code><\/pre>\n<h3>Load Web Page<\/h3>\n<pre><code class=\"language-python\">from langchain_community.document_loaders import WebBaseLoader<\/h1>\n\nloader = WebBaseLoader(\"https:\/\/www.contoh.com\/kebijakan-privasi\")\ndocuments = loader.load()<\/code><\/pre>\n<h3>Load CSV \/ Excel<\/h3>\n<pre><code class=\"language-python\">from langchain_community.document_loaders import CSVLoader\n\nloader = CSVLoader(\"data-pelanggan.csv\")\ndocuments = loader.load()<\/code><\/pre>\n<h2>Step 3: Split Dokumen Jadi Chunks<\/h2>\n<p>LLM punya context window terbatas. Dokumen panjang harus dipecah jadi potongan kecil (chunks) supaya bisa diproses.<\/p>\n<pre><code class=\"language-python\">from langchain.text_splitter import RecursiveCharacterTextSplitter\n\ntext_splitter = RecursiveCharacterTextSplitter(\n    chunk_size=500,        # Ukuran per chunk (karakter)\n    chunk_overlap=50,      # Overlap antar chunk biar konteks nyambung\n    length_function=len,\n    separators=[\"nn\", \"n\", \".\", \" \", \"\"]\n)\n\nchunks = text_splitter.split_documents(documents)\nprint(f\"Dari {len(documents)} dokumen jadi {len(chunks)} chunks\")<\/code><\/pre>\n<p><strong>Kenapa pakai RecursiveCharacterTextSplitter?<\/strong> Karena splitter ini coba memisah di batas paragraf dulu, baru kalau terlalu panjang pindah ke batas kalimat, dan seterusnya. Hasilnya lebih rapi daripada split per karakter.<\/p>\n<h2>Step 4: Buat Vector Embeddings &amp; Simpan<\/h2>\n<p>Vector embeddings adalah representasi numerik dari teks. Dokumen yang mirip secara semantik akan punya vector yang berdekatan.<\/p>\n<pre><code class=\"language-python\">from langchain_openai import OpenAIEmbeddings\nfrom langchain_chroma import Chroma\n\n<h1>Pilih model embedding<\/h1>\nembeddings = OpenAIEmbeddings(model=\"text-embedding-3-small\")\n\n<h1>Buat vector store dan simpan embeddings<\/h1>\nvector_store = Chroma.from_documents(\n    documents=chunks,\n    embedding=embeddings,\n    collection_name=\"rag_demo\",\n    persist_directory=\".\/chroma_db\"  # Simpan ke disk\n)\n\nprint(f\"\u2705 {len(chunks)} chunks berhasil di-index!\")<\/code><\/pre>\n<p><strong>Tips:<\/strong> Untuk production, jangan pakai Chroma untuk data besar (&gt;1M dokumen). Pilih Pinecone, Qdrant, atau Weaviate yang lebih scalable.<\/p>\n<h2>Step 5: Buat Retriever<\/h2>\n<p>Retriever adalah jembatan antara query user dan vector store. Dia yang mencari dokumen paling relevan.<\/p>\n<pre><code class=\"language-python\"># Basic retriever \u2014 ambil 3 dokumen teratas\nretriever = vector_store.as_retriever(search_kwargs={\"k\": 3})\n\n<h1>Advanced: retriever dengan similarity score threshold<\/h1>\nretriever = vector_store.as_retriever(\n    search_type=\"similarity_score_threshold\",\n    search_kwargs={\"score_threshold\": 0.7, \"k\": 5}\n)\n\n<h1>Advanced: MMR (Maximum Marginal Relevance) \u2014 variasi hasil<\/h1>\nretriever = vector_store.as_retriever(\n    search_type=\"mmr\",\n    search_kwargs={\"k\": 3, \"fetch_k\": 10, \"lambda_mult\": 0.5}\n)<\/code><\/pre>\n<h2>Step 6: Buat RAG Chain<\/h2>\n<p>Ini bagian inti: menggabungkan retrieval dengan LLM generation.<\/p>\n<pre><code class=\"language-python\">from langchain_openai import ChatOpenAI\nfrom langchain.prompts import ChatPromptTemplate\nfrom langchain.schema import StrOutputParser\nfrom langchain_core.runnables import RunnablePassthrough\n\n<h1>Inisialisasi model<\/h1>\nmodel = ChatOpenAI(model=\"gpt-4o-mini\", temperature=0)\n\n<h1>Template prompt RAG<\/h1>\ntemplate = \"\"\"Kamu adalah asisten bisnis yang menjawab berdasarkan konteks.\nGunakan informasi berikut untuk menjawab pertanyaan user.\nJika tidak tahu, katakan tidak tahu \u2014 jangan mengarang.\n\nKonteks:\n{context}\n\nPertanyaan: {question}\n\nJawab dalam <a href=\"https:\/\/komunitech.com\/blog\/tutorial\/tutorial-langchain-bahasa-indonesia-untuk-pemula-2026\/\">bahasa Indonesia<\/a> dengan jelas:\"\"\"\n\nprompt = ChatPromptTemplate.from_template(template)\n\n<h1>Helper: gabungkan dokumen jadi teks<\/h1>\ndef format_docs(docs):\n    return \"nn\".join(doc.page_content for doc in docs)\n\n<h1>RAG Chain menggunakan LCEL<\/h1>\nrag_chain = (\n    {\"context\": retriever | format_docs, \"question\": RunnablePassthrough()}\n    | prompt\n    | model\n    | StrOutputParser()\n)\n\n<h1>Jalankan!<\/h1>\nresult = rag_chain.invoke(\"Berapa total pendapatan perusahaan di 2025?\")\nprint(result)<\/code><\/pre>\n<h2>Step 7: Upgrade ke RAG Agent<\/h2>\n<p>Chain di atas statis \u2014 dia cuma retrieve sekali lalu generate. Biar lebih powerful, upgrade jadi <strong>RAG Agent<\/strong> yang bisa memutuskan kapan perlu retrieve dan bisa panggil multiple tools.<\/p>\n<pre><code class=\"language-python\">from langchain.agents import create_agent, Tool\n\n<h1>Tools untuk agent<\/h1>\ndef search_documents(query: str) -&gt; str:\n    \"\"\"Cari informasi dari database dokumen internal\"\"\"\n    docs = retriever.get_relevant_documents(query)\n    return format_docs(docs)\n\ndef get_current_date(query: str) -&gt; str:\n    \"\"\"Dapatkan tanggal hari ini\"\"\"\n    from datetime import datetime\n    return f\"Hari ini: {datetime.now().strftime('%d %B %Y')}\"\n\ntools = [\n    Tool(name=\"CariDokumen\", func=search_documents, description=\"Cari di database dokumen internal\"),\n    Tool(name=\"TanggalSekarang\", func=get_current_date, description=\"Cek tanggal hari ini\"),\n]\n\n<h1>Buat RAG Agent<\/h1>\nagent = create_agent(\n    model=\"openai:gpt-4o\",\n    tools=tools,\n    system_prompt=\"\"\"Kamu adalah asisten bisnis dengan akses ke database dokumen.\nGunakan tool CariDokumen untuk mencari informasi dari dokumen internal.\nGunakan tool TanggalSekarang untuk informasi tanggal.\n\nSelalu gunakan CariDokumen dulu sebelum menjawab pertanyaan spesifik tentang data perusahaan.\"\"\"\n)\n\n<h1>Test<\/h1>\nresult = agent.run(\"Berapa laba bersih perusahaan di Q4 2025?\")\nprint(result)<\/code><\/pre>\n<h3>Advanced RAG Techniques<\/h3>\n<p>Setelah menguasai basic RAG, kamu bisa tingkatkan dengan teknik berikut:<\/p>\n<h3>1. Parent Document Retriever<\/h3>\n<p>Ambil chunk kecil untuk relevansi, tapi kembalikan dokumen induk yang lebih panjang untuk konteks:<\/p>\n<pre><code class=\"language-python\">from langchain.retrievers import ParentDocumentRetriever\nfrom langchain.storage import InMemoryStore\n\nparent_splitter = RecursiveCharacterTextSplitter(chunk_size=2000)\nchild_splitter = RecursiveCharacterTextSplitter(chunk_size=400)\n\nstore = InMemoryStore()\nparent_retriever = ParentDocumentRetriever(\n    vectorstore=vector_store,\n    docstore=store,\n    child_splitter=child_splitter,\n    parent_splitter=parent_splitter,\n)<\/code><\/pre>\n<h3>2. Hybrid Search (BM25 + Vector)<\/h3>\n<p>Gabungkan keyword search (BM25) dengan semantic search (vector) untuk hasil lebih akurat:<\/p>\n<pre><code class=\"language-python\">from langchain.retrievers import EnsembleRetriever\nfrom langchain.retrievers import BM25Retriever\n\nbm25_retriever = BM25Retriever.from_documents(chunks)\nbm25_retriever.k = 3\n\nensemble_retriever = EnsembleRetriever(\n    retrievers=[bm25_retriever, retriever],\n    weights=[0.3, 0.7]  # Bobot BM25 30%, Vector 70%\n)<\/code><\/pre>\n<h2>RAG vs Fine-Tuning<\/h2>\n<table>\n<tr>\n<td>\n<p><strong>Aspek<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>RAG<\/strong><\/p>\n<\/td>\n<td>\n<p><strong>Fine-Tuning<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Kebutuhan data<\/p>\n<\/td>\n<td>\n<p>Dokumen referensi<\/p>\n<\/td>\n<td>\n<p>Dataset Q&amp;A terlabel<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Biaya<\/p>\n<\/td>\n<td>\n<p>Rendah (API LLM + storage)<\/p>\n<\/td>\n<td>\n<p>Tinggi (GPU + dataset)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Update pengetahuan<\/p>\n<\/td>\n<td>\n<p>Ganti dokumen, langsung efek<\/p>\n<\/td>\n<td>\n<p>Retrain model, butuh waktu<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Akurasi fakta<\/p>\n<\/td>\n<td>\n<p>Tinggi (karena pakai konteks)<\/p>\n<\/td>\n<td>\n<p>Sedang (bisa hallucinate)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Personalisasi<\/p>\n<\/td>\n<td>\n<p>Terbatas<\/p>\n<\/td>\n<td>\n<p>Tinggi<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Waktu implementasi<\/p>\n<\/td>\n<td>\n<p>1-2 hari<\/p>\n<\/td>\n<td>\n<p>2-4 minggu<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><strong>Kapan pakai RAG:<\/strong> Untuk knowledge base, customer support FAQ, legal doc review, research assistant \u2014 apapun yang butuh akurasi fakta tinggi.<\/p>\n<p><strong>Kapan pakai Fine-Tuning:<\/strong> Untuk personalisasi gaya bicara, domain-specific terminology, atau output format yang rigid.<\/p>\n<h2>RAG Agent x KomuniTech<\/h2>\n<p>Membangun RAG agent production-ready bukan cuma soal kode. Ada banyak hal yang sering luput dari tutorial online:<\/p>\n<ul>\n<li><strong>Chunking strategy<\/strong> apa yang cocok untuk dokumen Bahasa Indonesia?<\/li>\n<li><strong>Embedding model<\/strong> mana yang performanya terbaik untuk domain bisnis lokal?<\/li>\n<li><strong>Bagaimana handle dokumen dengan tabel dan gambar?<\/strong><\/li>\n<li><strong>Monitoring<\/strong> \u2014 gimana detect kalau RAG agent mulai ngawur?<\/li>\n<li><strong>Security<\/strong> \u2014 gimana pastikan agent cuma akses dokumen yang diizinkan?<\/li>\n<\/ul>\n<p>Di KomuniTech, semua ini dibahas tuntas.<\/p>\n<blockquote>\n<p>KomuniTech adalah platform belajar Karyawan AI untuk bisnis. Bukan kursus rekaman \u2014 kamu didampingi tim sampai <a href=\"\/blog\/ai-agent\/apa-itu-ai-agent-panduan-lengkap-untuk-pemula-2026\/\">AI Agent<\/a>-mu benar-benar jalan, didukung komunitas praktisi aktif dan garansi hasil.<\/p>\n<\/blockquote>\n<p>Robbie Jeo, CEO KomuniTech, menegaskan,<\/p>\n<blockquote>\n<p>RAG adalah teknologi yang langsung bisa diaplikasikan di bisnis hari ini. Kami di KomuniTech fokus memastikan peserta tidak cuma paham teorinya, tapi bisa bikin RAG agent yang benar-benar bekerja untuk perusahaan mereka.<\/p>\n<\/blockquote>\n<h2>FAQ<\/h2>\n<h3>Q: Berapa biaya operasional RAG agent?<\/h3>\n<p>A: Biaya utamanya dari API LLM (sekitar $0.01-0.05 per 1000 pertanyaan untuk GPT-4o-mini) dan storage vector (gratis untuk Chroma lokal, ~$10-50\/bulan untuk Pinecone\/Qdrant untuk skala kecil).<\/p>\n<h3>Q: Apakah RAG bisa handle dokumen berformat PDF dengan tabel?<\/h3>\n<p>A: Bisa, tapi perlu preprocessing tambahan. LangChain punya <code>PyMuPDFLoader<\/code> dan <code>DocX2TxtLoader<\/code>. Untuk tabel kompleks, pertimbangkan unstructured.io atau layout detection model.<\/p>\n<h3>Q: Model embedding apa yang terbaik untuk Bahasa Indonesia?<\/h3>\n<p>A: OpenAI text-embedding-3-small atau 3-large adalah pilihan aman. Untuk open-source, coba BGE-M3 atau multilingual-e5-large yang mendukung Bahasa Indonesia.<\/p>\n<h3>Q: Gimana cara update dokumen di RAG tanpa rebuild semua?<\/h3>\n<p>A: Pakai vector store yang support incremental update. Chroma dan Qdrant bisa add\/delete dokumen individual tanpa rebuild seluruh index.<\/p>\n<h3>Q: Apa kelemahan RAG?<\/h3>\n<p>A: RAG sangat bergantung pada kualitas retrieval. Kalau retriever gagal menemukan dokumen relevan, LLM akan jawab berdasarkan pengetahuannya sendiri (rawan hallucination). Butuh eval dan tuning retriever secara berkala.<\/p>\n<h2>Disclaimer<\/h2>\n<p>Informasi dalam artikel ini berdasarkan praktik terbaik RAG menggunakan LangChain per Juni 2026. Harga API dan performa model dapat berubah. Lakukan pengujian sendiri sebelum implementasi production.<\/p>\n<h2>dYOR (Do Your Own Research)<\/h2>\n<p>Sebelum deploy RAG agent:<\/p>\n<ul>\n<li>Evaluasi kualitas retrieval dengan metrics seperti Hit Rate dan MRR (Mean Reciprocal Rank)<\/li>\n<li>Bandingkan embedding model: OpenAI vs BGE vs Cohere<\/li>\n<li>Uji berbagai chunk size: 256, 512, 1024 tokens<\/li>\n<li>Buat test set pertanyaan spesifik domain untuk eval<\/li>\n<\/ul>\n<h2>Saatnya Bangun AI Agent-mu!<\/h2>\n<p>RAG adalah teknologi yang <strong>paling cepat memberikan nilai bisnis<\/strong> dari seluruh ekosistem AI Agent. Tidak perlu nunggu fine-tuning berbulan-bulan \u2014 cukup upload dokumen, dan agent kamu langsung bisa menjawab pertanyaan berdasarkan data perusahaan.<\/p>\n<p>KomuniTech siap mendampingi kamu dari konsep sampai deployment.<\/p>\n<blockquote>\n<p>Robbie Jeo, CEO KomuniTech, menegaskan, *&#8221;Kami tidak hanya mengajarkan teori \u2014 kami memastikan setiap peserta bisa membangun dan menjalankan AI Agent nyata untuk bisnis mereka.<\/p>\n<\/blockquote>\n<h2>\ud83d\udc49 Gabung KomuniTech sekarang dan bikin RAG agent pertamamu!<\/h2>\n<h2>Referensi<\/h2>\n<ul>\n<li><a href=\"https:\/\/python.langchain.com\/docs\/tutorials\/rag\/\" target=\"_blank\" rel=\"noopener nofollow\">LangChain \u2014 RAG Tutorial (Official)<\/a> \u2014 panduan resmi LangChain buat build RAG<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2005.11401\" target=\"_blank\" rel=\"noopener nofollow\">Lewis et al. (2020) \u2014 Retrieval-Augmented Generation for Knowledge-Intensive NLP<\/a> \u2014 paper original yang mendefinisikan RAG<\/li>\n<li><a href=\"https:\/\/docs.trychroma.com\/\" target=\"_blank\" rel=\"noopener nofollow\">Chroma \u2014 Documentation<\/a> \u2014 docs resmi vector store yang dipakai di contoh<\/li>\n<li><a href=\"https:\/\/platform.openai.com\/docs\/guides\/embeddings\" target=\"_blank\" rel=\"noopener nofollow\">OpenAI \u2014 Embeddings Guide<\/a> \u2014 panduan resmi model embedding text-embedding-3<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>tl;dr: RAG (Retrieval-Augmented Generation) bikin LLM bisa jawab pertanyaan berbasis dokumen kamu, bukan cuma modal ingatan trainingnya. Pakai LangChain, tinggal load dokumen \u2192 split jadi chunks \u2192 embed ke vector store \u2192 retrieve \u2192 gabung sama LLM chain. Panduan ini step-by-step dari instalasi sampai upgrade ke RAG Agent yang bisa multi-tool. Pendahuluan LLM seperti GPT-4o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":400,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75],"tags":[],"class_list":["post-399","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial"],"_links":{"self":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":2,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/399\/revisions"}],"predecessor-version":[{"id":444,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/posts\/399\/revisions\/444"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media\/400"}],"wp:attachment":[{"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/media?parent=399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/categories?post=399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/komunitech.com\/blog\/wp-json\/wp\/v2\/tags?post=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}