contoh kode lengkap RAG (Retrieval-Augmented Generation) menggunakan LangChain + OpenAI

contoh kode lengkap RAG (Retrieval-Augmented Generation) menggunakan LangChain + OpenAI, dengan sumber data dari dokumen lokal (misalnya file PDF atau teks).


Tujuan

Kita akan membuat chatbot yang bisa:

  1. Membaca dokumen lokal (misalnya artikel, laporan, PDF).

  2. Menyimpan representasi vektornya dalam vector database (FAISS).

  3. Saat ditanya, sistem akan:

    • Melakukan retrieval dari dokumen,

    • Lalu menghasilkan jawaban dengan OpenAI GPT.


🧱 Struktur Minimal

rag-example/
├── docs/
│   └── my_notes.txt
├── rag_app.py
├── requirements.txt

📦 1. Install Dependency

pip install langchain openai faiss-cpu tiktoken

Jika pakai PDF:

pip install pypdf

🧠 2. rag_app.py – LangChain + OpenAI RAG App

from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

import os
from dotenv import load_dotenv

# Load .env if needed
load_dotenv()
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"  # Ganti dengan API key Anda

# 1. Load dokumentasi
loader = TextLoader("docs/my_notes.txt", encoding='utf-8')
documents = loader.load()

# 2. Split dokumen menjadi chunk
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
chunks = splitter.split_documents(documents)

# 3. Buat vectorstore FAISS + embeddings
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)

# 4. Buat Retriever QA chain
retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0),
    retriever=retriever,
    return_source_documents=True
)

# 5. Tanya sistem
while True:
    query = input("❓ Pertanyaan Anda: ")
    if query.lower() in ['exit', 'quit']:
        break

    result = qa_chain(query)
    print("\n📘 Jawaban:\n", result["result"])

    # Optional: tampilkan sumber
    print("\n📎 Sumber:\n", [doc.metadata for doc in result['source_documents']])


📁 3. Contoh Isi File my_notes.txt

LangChain is a framework for building applications with LLMs. It allows combining LLMs with documents, tools, and user input in a modular way. 
It supports vector databases, retrieval-augmented generation, and agent-based architectures.

💡 Catatan Tambahan

  • Untuk PDF: ganti TextLoaderPyPDFLoader

  • Untuk banyak file: gunakan DirectoryLoader

  • Untuk vectorstore selain FAISS, bisa pakai Pinecone, Weaviate, Chroma, dsb.


🏁 Hasil

Saat dijalankan, program akan:

  • Memuat dokumen,

  • Membuat vectorstore,

  • Mencari potongan teks terkait pertanyaan,

  • Mengirim pertanyaan + konteks ke OpenAI,

  • Mengembalikan jawaban berdasar dokumen — bukan hanya “hafalan” model.

Comments

Popular posts from this blog

CRUD SPRING REACTIVE WEBFLUX +Mongo DB

Top 7 Digital Transformation Companies

Regression Testing dalam UAT Environment?

TOP 8 Framework Populer menggunakan bahasa .NET

Daftar Kata Kunci (Keyword) dalam Bahasa Pemrograman Python

Python Date and Time Manipulation

100 perusahaan perangkat lunak (software) populer dari Eropa dan Amerika yang memiliki kehadiran atau operasional di Indonesia.

TOP 5 Trends Programming 2024

Tahukah Kamu bagaimana algoritma social media facebook dan instagram bekerja ?

20 Data Center Terbesar di Dunia