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