Dalam dunia pengembangan perangkat lunak saat ini, model bahasa besar (LLM) mampu menghasilkan teks yang koheren, tetapi mereka tidak secara otomatis memiliki akses ke data pribadi seperti dokumen perusahaan, catatan, atau artikel terbaru. Di sinilah konsep Retrieval‑Augmented Generation (RAG) menjadi sangat berguna. Dalam proyek ini, saya membangun aplikasi RAG berukuran kecil yang mampu membaca dokumen teks, memecahnya menjadi bagian‑bagian yang lebih kecil, mengubah setiap bagian menjadi vektor numerik yang disebut embedding, menyimpannya di Pinecone, lalu mencari bagian yang paling relevan ketika pengguna mengajukan pertanyaan, dan akhirnya memberikan bagian tersebut ke model AI untuk menghasilkan jawaban yang berdasar sumber (grounded answer). Proses ini mengurangi jawaban yang tidak didukung oleh fakta, meskipun tidak menjamin keakuratan absolut.
Aplikasi RAG bekerja dalam dua fase utama. Fase pertama adalah **ingestion**: dokumen dimuat, dibagi menjadi potongan‑potongan (chunk), setiap chunk diubah menjadi embedding, dan disimpan di basis data vektor Pinecone. Fase kedua adalah **retrieval dan generation**: ketika pengguna mengajukan pertanyaan, pertanyaan tersebut diubah menjadi embedding, dicari kesamaannya di Pinecone, bagian‑bagian yang paling relevan ditambahkan ke prompt, lalu model bahasa menghasilkan jawaban. Pemisahan fase ini membuat aplikasi lebih mudah dipahami dan dikelola.
Embedding adalah representasi numerik dari teks yang dihasilkan oleh model khusus. Komputer tidak dapat membandingkan makna kalimat seperti manusia, sehingga embedding mengubah kalimat menjadi vektor ratusan atau ribuan angka. Kalimat dengan makna serupa akan memiliki vektor yang dekat satu sama lain, memungkinkan pencarian berdasarkan makna, bukan hanya kata kunci. LangChain menyediakan antarmuka standar untuk model embedding, sementara OpenAI text‑embedding‑3 menawarkan kontrol atas dimensi vektor yang dihasilkan.
Pinecone berfungsi sebagai basis data vektor yang optimal untuk pencarian semantik. Berbeda dengan basis data relasional yang cocok untuk query berbasis ID, Pinecone mencari bagian dokumen yang secara vektor paling dekat dengan pertanyaan pengguna. Penting untuk memastikan indeks Pinecone dan model embedding menggunakan dimensi vektor yang sama; jika tidak, penyimpanan atau perbandingan vektor akan gagal.
Struktur proyek ini terdiri dari dua file Python utama: `rag-project/rag‑gist/ingest.py` (untuk memuat dan menyimpan dokumen), `rag‑gist/main.py` (untuk menjawab pertanyaan), berkas sumber `mediumblog.txt`, berkas konfigurasi `.env`, `.gitignore`, dan `pyproject.toml`. `ingest.py` menggunakan `PyPDFLoader` (atau `TextLoader`) dari `langchain‑community`, `CharacterTextSplitter` dari `langchain‑text‑splitters`, embedding OpenAI, dan `PineconeVectorStore` dari `langchain‑pinecone`. `main.py` memuat kunci API dari `.env`, membuat rantai RAG menggunakan `create_retrieval_chain`, dan mencetak jawaban beserta sumbernya.
Instalasi dimulai dengan `uv add langchain langchain‑community langchain‑openai langchain‑pinecone langchain‑text‑splitters python‑dotenv`. Kunci API disimpan di `.env` (misalnya, `OPENAI_API_KEY` dan `PINECONE_API_KEY`). Berkas ini ditambahkan ke `.gitignore` untuk mencegah kebocoran kredensial. Contoh aman dapat berupa `.env.example` dengan placeholder.
Langkah selanjutnya adalah membuat indeks Pinecone (melalui konsol Pinecone atau CLI) dan menjalankan `ingest.py`. Skrip ini akan memuat `mediumblog.txt`, membagi dokumen, membuat embedding, dan menyimpannya di indeks yang dipilih. Setelah proses ingestion selesai, pengembang dapat menjalankan `main.py`, memasukkan pertanyaan, dan melihat jawaban yang disertai bagian dokumen yang mendasarinya.
Pengalaman ini mengajarkan pentingnya pemisahan antara ingestion dan retrieval untuk memudahkan debugging dan skalabilitas. Penggunaan LangSmith untuk melacak rantai RAG sangat membantu dalam mengidentifikasi di mana kesalahan terjadi. Bagi pengembang di Indonesia, proyek seperti ini membuka peluang untuk membangun aplikasi AI yang dapat memanfaatkan dokumen lokal, mendukung konten dalam bahasa Indonesia, dan meningkatkan efisiensi bisnis melalui pencarian yang cerdas.