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

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

TOP 8 Framework Populer menggunakan bahasa .NET

Python Date and Time Manipulation

TOP 5 Trends Programming 2024

Daftar Kata Kunci (Keyword) dalam Bahasa Pemrograman Python

20 Data Center Terbesar di Dunia

Tahukah Kamu bagaimana algoritma social media facebook dan instagram bekerja ?

Advanced Data Visualization Techniques in Python: Focus on Advanced Matplotlib Techniques