Panduan Konsep Memahami RAG dalam Pembangunan Aplikasi LLM Menggunakan llama index

Kukuh T Wicaksono
4 min readMay 18, 2024

--

Retrieval Augmented Generation (RAG)

LLM (Language Model) dilatih dengan data dalam jumlah besar, tetapi mereka tidak dilatih dengan data Anda. Retrieval-Augmented Generation (RAG) menyelesaikan masalah ini dengan menambahkan data Anda ke data yang sudah diakses oleh LLM. Anda akan sering melihat referensi ke RAG dalam dokumentasi ini.

Dalam RAG, data Anda dimuat dan dipersiapkan untuk kueri atau “diindeks”. Kueri pengguna bekerja pada indeks ini, yang menyaring data Anda menjadi konteks yang paling relevan. `K` konteks ini dan kueri Anda kemudian dikirim ke LLM bersama dengan prompt, dan LLM memberikan respons.

Meskipun yang Anda bangun adalah chatbot atau agen, Anda tetap perlu mengetahui teknik RAG untuk memasukkan data ke dalam aplikasi Anda.

Tahapan dalam RAG

Ada lima tahap kunci dalam RAG yang akan menjadi bagian dari aplikasi yang Anda bangun:

1. Loading (Memuat Data): Ini merujuk pada pengambilan data dari tempat asalnya — apakah itu file teks, PDF, situs web lain, database, atau API — ke dalam alur kerja Anda. LlamaHub menyediakan ratusan konektor untuk dipilih.

2. Indexing (Mengindeks): Ini berarti membuat struktur data yang memungkinkan kueri data. Untuk LLM, ini hampir selalu berarti membuat embeddings vektor, representasi numerik dari makna data Anda, serta berbagai strategi metadata lainnya untuk memudahkan menemukan data yang relevan secara kontekstual.

3. Storing (Menyimpan): Setelah data Anda diindeks, Anda hampir selalu ingin menyimpan indeks tersebut, serta metadata lainnya, untuk menghindari keharusan mengindeks ulang.

4. Querying (Melakukan Kueri): Untuk setiap strategi pengindeksan, ada banyak cara Anda dapat menggunakan struktur data LLM dan LlamaIndex untuk kueri, termasuk sub-kueri, kueri multi-langkah, dan strategi hibrida.

5. Evaluation (Evaluasi): Langkah kritis dalam setiap alur kerja adalah memeriksa seberapa efektif alur kerja tersebut dibandingkan dengan strategi lain, atau ketika Anda melakukan perubahan. Evaluasi memberikan ukuran objektif tentang seberapa akurat, setia, dan cepat respons Anda terhadap kueri.

Konsep Penting dalam Setiap Tahap

Ada beberapa istilah yang akan Anda temui yang merujuk pada langkah-langkah dalam setiap tahap ini:

Tahap Memuat Data

- Nodes dan Dokumen: Dokumen adalah wadah untuk sumber data apa pun — misalnya, PDF, output API, atau data yang diambil dari database. Node adalah unit data terkecil dalam LlamaIndex dan mewakili “chunk” dari Dokumen sumber. Node memiliki metadata yang menghubungkannya dengan dokumen tempat mereka berada dan dengan node lainnya.

- Connectors: Konektor data (sering disebut Pembaca) menggabungkan data dari berbagai sumber data dan format data menjadi Dokumen dan Node.

Tahap Mengindeks

- Indexes: Setelah data Anda diambil, LlamaIndex akan membantu Anda mengindeks data tersebut ke dalam struktur yang mudah diambil. Ini biasanya melibatkan pembuatan embeddings vektor yang disimpan dalam database khusus yang disebut vector store. Indeks juga dapat menyimpan berbagai metadata tentang data Anda.

- Embeddings: LLM menghasilkan representasi numerik data yang disebut embeddings. Saat menyaring data Anda untuk relevansi, LlamaIndex akan mengubah kueri menjadi embeddings, dan vector store Anda akan menemukan data yang secara numerik mirip dengan embedding dari kueri Anda.

Tahap Melakukan Kueri

- Retrievers: Retriever menentukan cara mengambil konteks yang relevan dari indeks secara efisien ketika diberi kueri. Strategi pengambilan Anda sangat penting untuk relevansi data yang diambil dan efisiensi pengambilan.

- Routers: Router menentukan retriever mana yang akan digunakan untuk mengambil konteks yang relevan dari basis pengetahuan. Lebih spesifik lagi, kelas RouterRetriever bertanggung jawab memilih satu atau beberapa retriever kandidat untuk menjalankan kueri. Mereka menggunakan selector untuk memilih opsi terbaik berdasarkan metadata setiap kandidat dan kueri.

- Node Postprocessors: Node postprocessor mengambil satu set node yang diambil dan menerapkan transformasi, penyaringan, atau logika re-ranking kepada mereka.

- Response Synthesizers: Response synthesizer menghasilkan respons dari LLM, menggunakan kueri pengguna dan satu set chunks teks yang diambil.

Menggabungkan Semua

Ada berbagai macam kasus penggunaan untuk aplikasi LLM yang didukung data, tetapi secara kasar dapat dikelompokkan menjadi tiga kategori:

1. Query Engines: Query engine adalah alur kerja end-to-end yang memungkinkan Anda mengajukan pertanyaan tentang data Anda. Ini menerima kueri bahasa alami dan mengembalikan respons, bersama dengan konteks referensi yang diambil dan diteruskan ke LLM.

2. Chat Engines: Chat engine adalah alur kerja end-to-end untuk melakukan percakapan dengan data Anda (pertukaran bolak-balik beberapa kali daripada hanya satu pertanyaan dan jawaban).

3. Agents: Agent adalah pengambil keputusan otomatis yang didukung oleh LLM yang berinteraksi dengan dunia melalui serangkaian alat. Agen dapat mengambil sejumlah langkah untuk menyelesaikan tugas tertentu, secara dinamis memutuskan tindakan terbaik daripada mengikuti langkah-langkah yang telah ditentukan. Ini memberikannya fleksibilitas tambahan untuk menangani tugas yang lebih kompleks.

Dengan memahami dan menerapkan konsep-konsep ini, Anda akan dapat membangun aplikasi LLM yang lebih efektif dan relevan dengan kebutuhan pengguna Anda.

--

--

No responses yet