🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Tutorial

Cara Meningkatkan Kinerja Pipeline RAG Anda

Dengan meningkatnya popularitas aplikasi Retrieval Augmented Generation(RAG), ada perhatian yang semakin besar untuk meningkatkan kinerjanya. Artikel ini menyajikan semua cara yang memungkinkan untuk mengoptimalkan pipeline RAG dan memberikan ilustrasi yang sesuai untuk membantu Anda memahami dengan cepat strategi pengoptimalan RAG yang utama.

Penting untuk dicatat bahwa kami hanya akan memberikan eksplorasi tingkat tinggi dari strategi dan teknik ini, dengan fokus pada bagaimana mereka berintegrasi ke dalam sistem RAG. Namun, kami tidak akan membahas detail yang rumit atau memandu Anda melalui implementasi langkah demi langkah.

Pipeline RAG Standar

Diagram di bawah ini menunjukkan pipeline RAG vanila yang paling mudah. Pertama, potongan dokumen dimuat ke dalam penyimpanan vektor (seperti Milvus atau Zilliz cloud). Kemudian, penyimpanan vektor mengambil potongan Top-K yang paling relevan yang terkait dengan kueri. Potongan-potongan yang relevan ini kemudian disuntikkan ke dalam prompt konteks LLM, dan akhirnya, LLM mengembalikan jawaban akhir.

Berbagai Jenis Teknik Peningkatan RAG

Kita dapat mengklasifikasikan pendekatan peningkatan RAG yang berbeda berdasarkan perannya dalam tahapan pipeline RAG.

  • Peningkatan Kueri: Memodifikasi dan memanipulasi proses kueri dari input RAG untuk mengekspresikan atau memproses maksud kueri dengan lebih baik.
  • Peningkatan Pengindeksan: Mengoptimalkan pembuatan indeks chunking menggunakan teknik seperti multi-chunking, pengindeksan bertahap, atau pengindeksan multi-arah.
  • Peningkatan Retriever: Menerapkan teknik dan strategi pengoptimalan selama proses pengambilan.
  • Peningkatan Generator: Menyesuaikan dan mengoptimalkan prompt saat merakit prompt untuk LLM agar dapat memberikan respons yang lebih baik.
  • Peningkatan RAG Pipeline: Mengalihkan proses secara dinamis di dalam seluruh pipeline RAG, termasuk menggunakan agen atau alat untuk mengoptimalkan langkah-langkah utama dalam pipeline RAG.

Selanjutnya, kami akan memperkenalkan metode spesifik di bawah masing-masing kategori ini.

Peningkatan Kueri

Mari jelajahi empat metode efektif untuk meningkatkan pengalaman kueri Anda: Pertanyaan Hipotetis, Penyematan Dokumen Hipotetis, Sub-Kueri, dan Prompt Mundur.

Membuat Pertanyaan Hipotetis

Membuat pertanyaan hipotetis melibatkan penggunaan LLM untuk menghasilkan beberapa pertanyaan yang mungkin ditanyakan pengguna tentang konten di dalam setiap bagian dokumen. Sebelum kueri pengguna yang sebenarnya mencapai LLM, penyimpanan vektor mengambil pertanyaan hipotetis yang paling relevan yang terkait dengan kueri yang sebenarnya, bersama dengan potongan dokumen yang sesuai, dan meneruskannya ke LLM.

Metodologi ini melewati masalah asimetri lintas domain dalam proses pencarian vektor dengan secara langsung terlibat dalam pencarian kueri-ke-kueri, sehingga mengurangi beban pencarian vektor. Namun, metodologi ini menimbulkan biaya tambahan dan ketidakpastian dalam menghasilkan pertanyaan hipotetis.

HyDE (Penyematan Dokumen Hipotetis)

HyDE adalah singkatan dari Hypothetical Document Embeddings. Ini memanfaatkan LLM untuk membuat "Hypothetical Document" atau jawaban palsu dalam menanggapi pertanyaan pengguna tanpa informasi kontekstual. Jawaban palsu ini kemudian diubah menjadi vektor embeddings dan digunakan untuk menanyakan potongan dokumen yang paling relevan dalam basis data vektor. Selanjutnya, basis data vektor mengambil potongan dokumen Top-K yang paling relevan dan mengirimkannya ke LLM dan kueri pengguna asli untuk menghasilkan jawaban akhir.

Metode ini mirip dengan teknik pertanyaan hipotetis dalam mengatasi asimetri lintas domain dalam pencarian vektor. Namun, metode ini juga memiliki kekurangan, seperti biaya komputasi tambahan dan ketidakpastian dalam menghasilkan jawaban palsu.

Untuk informasi lebih lanjut, lihat makalah HyDE.

Membuat Sub-Kueri

Ketika kueri pengguna terlalu rumit, kita dapat menggunakan LLM untuk memecahnya menjadi sub-kueri yang lebih sederhana sebelum meneruskannya ke basis data vektor dan LLM. Mari kita lihat sebuah contoh.

Bayangkan seorang pengguna bertanya: "Apa saja perbedaan fitur antara Milvus dan Zilliz Cloud?" Pertanyaan ini cukup rumit dan mungkin tidak memiliki jawaban langsung dalam basis pengetahuan kita. Untuk mengatasi masalah ini, kita bisa membaginya menjadi dua sub-kueri yang lebih sederhana:

  • Sub-kueri 1: "Apa saja fitur-fitur yang dimiliki Milvus?"
  • Sub-kueri 2: "Apa saja fitur-fitur Zilliz Cloud?"

Setelah kami memiliki sub-kueri ini, kami mengirim semuanya ke basis data vektor setelah mengubahnya menjadi sematan vektor. Basis data vektor kemudian menemukan potongan dokumen Top-K yang paling relevan dengan setiap sub-kueri. Terakhir, LLM menggunakan informasi ini untuk menghasilkan jawaban yang lebih baik.

Dengan memecah kueri pengguna menjadi sub-kueri, kami mempermudah sistem kami untuk menemukan informasi yang relevan dan memberikan jawaban yang akurat, bahkan untuk pertanyaan yang rumit sekalipun.

Membuat Petunjuk Mundur

Cara lain untuk menyederhanakan kueri pengguna yang rumit adalah dengan membuat petunjuk mundur. Teknik ini melibatkan pengabstraksian pertanyaan pengguna yang rumit menjadi "pertanyaan mundur"** menggunakan LLM. Kemudian, basis data vektor menggunakan pertanyaan-pertanyaan mundur ini untuk mengambil potongan dokumen yang paling relevan. Terakhir, LLM menghasilkan jawaban yang lebih akurat berdasarkan potongan dokumen yang diambil.

Mari kita ilustrasikan teknik ini dengan sebuah contoh. Pertimbangkan pertanyaan berikut ini, yang cukup kompleks dan tidak mudah untuk dijawab secara langsung:

Permintaan Pengguna Asli: "Saya memiliki kumpulan data dengan 10 miliar catatan dan ingin menyimpannya di Milvus untuk kueri. Apakah itu mungkin?"

Untuk menyederhanakan pertanyaan pengguna ini, kita dapat menggunakan LLM untuk menghasilkan pertanyaan mundur yang lebih mudah:

Pertanyaan Mundur: "Berapa batas ukuran dataset yang dapat ditangani oleh Milvus?"

Metode ini dapat membantu kita mendapatkan jawaban yang lebih baik dan lebih akurat untuk pertanyaan yang kompleks. Metode ini memecah pertanyaan asli ke dalam bentuk yang lebih sederhana, sehingga memudahkan sistem kami untuk menemukan informasi yang relevan dan memberikan jawaban yang akurat.

Peningkatan Pengindeksan

Meningkatkan pengindeksan adalah strategi lain untuk meningkatkan kinerja aplikasi RAG Anda. Mari kita jelajahi tiga teknik peningkatan pengindeksan.

Menggabungkan Potongan Dokumen Secara Otomatis

Saat membuat indeks, kita dapat menggunakan dua tingkat perincian: potongan anak dan potongan induknya. Awalnya, kita mencari potongan anak pada tingkat detail yang lebih halus. Kemudian, kami menerapkan strategi penggabungan: jika sejumlah tertentu, n, potongan anak dari k potongan anak pertama termasuk dalam potongan induk yang sama, kami memberikan potongan induk ini ke LLM sebagai informasi kontekstual.

Metodologi ini telah diimplementasikan di LlamaIndex.

Membangun Indeks Hirarkis

Ketika membuat indeks untuk dokumen, kita dapat membuat indeks dua tingkat: satu untuk ringkasan dokumen dan satu lagi untuk potongan dokumen. Proses pencarian vektor terdiri dari dua tahap: pertama, kami menyaring dokumen yang relevan berdasarkan ringkasan, dan selanjutnya, kami mengambil potongan dokumen yang sesuai secara eksklusif di dalam dokumen-dokumen yang relevan ini.

Pendekatan ini terbukti bermanfaat dalam situasi yang melibatkan volume data yang besar atau contoh di mana data bersifat hirarkis, seperti pengambilan konten dalam koleksi perpustakaan.

Temu Kembali Hibrida dan Pemeringkatan Ulang

Teknik Hybrid Retrieval and Reranking mengintegrasikan satu atau lebih metode pencarian tambahan dengan pencarian kemiripan vektor. Kemudian, pemeringkat memberi peringkat ulang hasil yang diambil berdasarkan relevansinya dengan kueri pengguna.

Algoritme pencarian tambahan yang umum termasuk metode berbasis frekuensi leksikal seperti BM25 atau model besar yang menggunakan sematan jarang seperti Splade. Algoritme pemeringkatan ulang termasuk RRF atau model yang lebih canggih seperti Cross-Encoder, yang menyerupai arsitektur seperti BERT.

Pendekatan ini memanfaatkan beragam metode pencarian ulang untuk meningkatkan kualitas pencarian ulang dan mengatasi potensi kesenjangan dalam penarikan vektor.

Peningkatan Retriever

Penyempurnaan komponen retriever dalam sistem RAG juga dapat meningkatkan aplikasi RAG. Mari kita jelajahi beberapa metode yang efektif untuk meningkatkan retriever.

Pengambilan Jendela Kalimat

Dalam sistem RAG dasar, potongan dokumen yang diberikan kepada LLM adalah jendela yang lebih besar yang mencakup potongan sematan yang diambil. Hal ini memastikan bahwa informasi yang diberikan kepada LLM mencakup detail kontekstual yang lebih luas, sehingga meminimalkan kehilangan informasi. Teknik Pengambilan Jendela Kalimat memisahkan potongan dokumen yang digunakan untuk pengambilan sematan dari potongan yang diberikan ke LLM.

Namun, memperbesar ukuran jendela dapat menyebabkan informasi tambahan yang mengganggu. Kita dapat menyesuaikan ukuran perluasan jendela berdasarkan kebutuhan bisnis tertentu.

Pemfilteran Meta-data

Untuk memastikan jawaban yang lebih tepat, kita dapat menyaring dokumen yang diambil dengan menyaring metadata seperti waktu dan kategori sebelum meneruskannya ke LLM. Misalnya, jika laporan keuangan yang mencakup beberapa tahun diambil, pemfilteran berdasarkan tahun yang diinginkan akan menyaring informasi untuk memenuhi persyaratan tertentu. Metode ini terbukti efektif dalam situasi dengan data yang luas dan metadata yang terperinci, seperti pengambilan konten dalam koleksi perpustakaan.

Peningkatan Generator

Mari kita jelajahi lebih banyak teknik pengoptimalan RAG dengan meningkatkan generator dalam sistem RAG.

Mengompresi prompt LLM

Informasi noise dalam potongan dokumen yang diambil dapat secara signifikan memengaruhi keakuratan jawaban akhir RAG. Jendela prompt yang terbatas dalam LLM juga menghadirkan rintangan untuk mendapatkan jawaban yang lebih akurat. Untuk mengatasi tantangan ini, kita dapat memampatkan detail yang tidak relevan, menekankan paragraf kunci, dan mengurangi panjang konteks keseluruhan potongan dokumen yang diambil.

Pendekatan ini mirip dengan metode pengambilan dan pemeringkatan hibrida yang telah dibahas sebelumnya, di mana pemeringkat digunakan untuk menyaring potongan dokumen yang tidak relevan.

Menyesuaikan urutan potongan dalam prompt

Dalam makalah "Lost in the middle," para peneliti mengamati bahwa LLM sering mengabaikan informasi di tengah-tengah dokumen yang diberikan selama proses penalaran. Sebaliknya, mereka cenderung lebih mengandalkan informasi yang disajikan di awal dan akhir dokumen.

Berdasarkan pengamatan ini, kita dapat menyesuaikan urutan potongan yang diambil untuk meningkatkan kualitas jawaban: ketika mengambil beberapa potongan pengetahuan, potongan dengan kepercayaan yang relatif rendah ditempatkan di tengah, dan potongan dengan kepercayaan yang relatif tinggi diposisikan di kedua ujungnya.

Peningkatan Pipa RAG

Kami juga dapat meningkatkan performa aplikasi RAG Anda dengan meningkatkan seluruh pipeline RAG.

Refleksi diri

Pendekatan ini menggabungkan konsep refleksi diri dalam agen AI. Lalu, bagaimana cara kerja teknik ini?

Beberapa potongan dokumen Top-K yang diambil pada awalnya bersifat ambigu dan mungkin tidak menjawab pertanyaan pengguna secara langsung. Dalam kasus seperti itu, kita dapat melakukan refleksi putaran kedua untuk memverifikasi apakah potongan dokumen tersebut benar-benar dapat menjawab pertanyaan pengguna.

Kita dapat melakukan refleksi dengan menggunakan metode refleksi yang efisien seperti model Natural Language Inference (NLI) atau alat tambahan seperti pencarian di internet untuk verifikasi.

Konsep refleksi diri ini telah dieksplorasi dalam beberapa makalah atau proyek, termasuk Self-RAG, Corrective RAG, LangGraph, dll.

Perutean Kueri dengan Agen

Terkadang, kita tidak perlu menggunakan sistem RAG untuk menjawab pertanyaan sederhana karena dapat mengakibatkan lebih banyak kesalahpahaman dan kesimpulan dari informasi yang menyesatkan. Dalam kasus seperti itu, kita dapat menggunakan agen sebagai perute pada tahap kueri. Agen ini menilai apakah kueri perlu melalui jalur RAG. Jika ya, pipa RAG berikutnya dimulai; jika tidak, LLM secara langsung menangani kueri tersebut.

Agen ini dapat mengambil berbagai bentuk, termasuk LLM, model klasifikasi kecil, atau bahkan seperangkat aturan.

Dengan merutekan kueri berdasarkan maksud pengguna, Anda dapat mengalihkan sebagian dari kueri, yang mengarah ke peningkatan signifikan dalam waktu respons dan pengurangan nyata dalam kebisingan yang tidak perlu.

Kita dapat memperluas teknik perutean kueri ke proses lain dalam sistem RAG, seperti menentukan kapan harus menggunakan alat bantu seperti penelusuran web, melakukan sub-kueri, atau mencari gambar. Pendekatan ini memastikan bahwa setiap langkah dalam sistem RAG dioptimalkan berdasarkan persyaratan spesifik dari kueri, sehingga menghasilkan pencarian informasi yang lebih efisien dan akurat.

Ringkasan

Meskipun pipeline RAG vanila mungkin terlihat sederhana, namun untuk mencapai kinerja bisnis yang optimal sering kali membutuhkan teknik pengoptimalan yang lebih canggih.

Artikel ini merangkum berbagai pendekatan populer untuk meningkatkan kinerja aplikasi RAG Anda. Kami juga memberikan ilustrasi yang jelas untuk membantu Anda memahami konsep dan teknik ini dengan cepat dan mempercepat implementasi dan pengoptimalannya.

Anda bisa mendapatkan implementasi sederhana dari pendekatan utama yang tercantum dalam artikel ini di tautan GitHub ini.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?