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:
- 
Membaca dokumen lokal (misalnya artikel, laporan, PDF).
 - 
Menyimpan representasi vektornya dalam vector database (FAISS).
 - 
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 TextLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.vectorstores import FAISSfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.chat_models import ChatOpenAIfrom langchain.chains import RetrievalQA
import osfrom dotenv import load_dotenv
# Load .env if neededload_dotenv()os.environ["OPENAI_API_KEY"] = "your-openai-api-key"  # Ganti dengan API key Anda
# 1. Load dokumentasiloader = TextLoader("docs/my_notes.txt", encoding='utf-8')documents = loader.load()
# 2. Split dokumen menjadi chunksplitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)chunks = splitter.split_documents(documents)
# 3. Buat vectorstore FAISS + embeddingsembeddings = OpenAIEmbeddings()vectorstore = FAISS.from_documents(chunks, embeddings)
# 4. Buat Retriever QA chainretriever = 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 sistemwhile 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
TextLoader→PyPDFLoader - 
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
Post a Comment