Dulu saya memperlakukan pipeline RAG saya seperti sebuah kotak hitam. Embedding masuk, jawaban keluar, dan di suatu tempat di antaranya, tagihan cloud saya membengkak. Seperti kebanyakan pengembang yang saya ajak bicara, saya berasumsi bahwa model vektor padat (dense vector models) adalah biang keladinya. Mereka terdengar mahal. Mengonversi seribu halaman menjadi angka float berdimensi tinggi terasa seperti proses manufaktur berat, jadi saya menanganinya dengan kewaspadaan yang setara. Saya bahkan membangun lapisan caching khusus untuk menghindari proses re-embedding data yang sudah saya proses. Saya bangga dengan optimasi tersebut. Kemudian saya membuka faktur dan menghitungnya.
Saya mengoptimalkan hal yang sepenuhnya salah.
Jebakan Embedding
Inilah angka yang mematahkan asumsi saya: melakukan embedding pada dokumen 1.000 halaman membutuhkan biaya sekitar delapan belas sen. Itu bukan salah ketik. Dengan harga yang lebih murah dari secangkir kopi di kebanyakan kota, Anda dapat melakukan vektorisasi seluruh buku. Yang lebih penting, biaya tersebut hanya terjadi satu kali, saat ingestion. Setelah proses awal selesai, vektor-vektor tersebut tersimpan di penyimpanan dan menunggu. Mereka tidak menumpuk biaya terukur setiap kali pengguna membuka aplikasi Anda. Itu adalah biaya modal (capital expense), bukan pengeluaran rutin.
Namun mitos ini terus bertahan. Sebagian dari kebingungan ini bersifat struktural. Pipeline ingestion adalah tempat para insinyur menghabiskan energi awal mereka. Anda menulis chunker, Anda bergelut dengan tokenizer, Anda memperhatikan bilah kemajuan (progress bar) merayap di terminal Anda. Upaya yang terlihat ini menciptakan ilusi proporsi. Ini terasa seperti bagian yang mahal karena merupakan bagian yang padat karya. Namun tenaga kerja dan biaya tidaklah sama, dan dalam RAG, keduanya sering kali berhubungan terbalik.
Tiga Jenis Tagihan yang Sangat Berbeda
Setelah saya memisahkan biaya berdasarkan tahapan, alih-alih menggabungkannya, gambaran besarnya menjadi jelas. Sistem RAG berjalan pada tiga model ekonomi yang berbeda, dan memahami perbedaannya sangat penting jika Anda ingin menjaga anggaran tetap aman.
Embedding adalah biaya manufaktur satu kali. Anda membayar untuk mengubah dokumen menjadi vektor, dan setelah itu selesai. Jika dokumen Anda bersifat statis, item ini hampir tidak muncul dalam tagihan bulanan Anda.
Database vektor adalah biaya sewa infrastruktur. Anda membayar untuk menjaga sistem tetap hidup sepanjang waktu. Anda membayar untuk SSD yang menyimpan jutaan chunk, untuk inti CPU yang memelihara indeks, dan untuk jaringan yang memberikan pencarian di bawah 100 milidetik. Biaya ini nyata, dan skalanya mengikuti volume data, tetapi umumnya dapat diprediksi. Ia berperilaku seperti keanggotaan gym. Apakah Anda melakukan kueri satu kali atau sepuluh ribu kali, biaya infrastruktur dasarnya tetap kurang lebih sama.
Large language model adalah pajak konsumsi. Setiap pertanyaan pengguna memicu tagihan. Setiap token yang keluar dari lapisan retrieval Anda dan masuk ke dalam prompt membutuhkan biaya. Setiap langkah penalaran, setiap instruksi pemformatan, setiap sitasi yang Anda minta untuk dihasilkan model menambah beban mikroskopis. Namun biaya mikro tersebut berlipat ganda berdasarkan jumlah sesi, dan jumlah sesi cenderung meningkat. Di sinilah latensi berakumulasi dengan pengeluaran. Kueri yang lambat bukan hanya menjengkelkan bagi pengguna; itu secara aktif membakar uang saat pengguna menunggu.
Ini bukanlah variasi dari masalah yang sama. Ini adalah tiga masalah yang terpisah. Anda tidak dapat menyelesaikan masalah pengeluaran pada saat kueri dengan membuat proses ingestion menjadi lebih murah. Itu seperti menyetel mesin mobil Anda untuk menghemat biaya parkir.
Ke Mana Sebenarnya Uang Itu Pergi
Jika Anda menjalankan aplikasi RAG produksi, buka cost explorer Anda dan filter berdasarkan tipe penggunaan. Saya berani bertaruh bahwa tugas embedding Anda adalah garis datar sekali sehari, sementara endpoint LLM Anda terlihat seperti detak jantung yang melonjak seiring dengan lalu lintas. Pola tersebut menceritakan seluruh kisahnya. Vektor Anda tidur; model Anda bangun setiap kali pengguna memiliki pertanyaan.
Kesadaran ini mengubah cara saya memprioritaskan pekerjaan teknik. Saya berhenti bertanya bagaimana cara membuat ingestion lebih murah dan mulai bertanya bagaimana cara membuat setiap pertanyaan menjadi lebih murah. Pergeseran itu terdengar jelas, tetapi sebagian besar tim masih bekerja berdasarkan firasat. Mereka membangun logika deduplikasi yang rumit untuk tahap embedding dan kemudian menyuapi jendela konteks yang membengkak dan tidak terfokus ke LLM tanpa berpikir dua kali. Mereka sedang memoles lantai sementara atap bocor.
Cara Memangkas Biaya Tanpa Merusak Pipeline Anda
Menghemat uang dalam sistem RAG memerlukan pencocokan taktik dengan model biaya. Berikut adalah apa yang benar-benar berhasil.
Lakukan Deduplikasi Sebelum Memproses
Kebanyakan basis pengetahuan organisasi bergerak lambat. Kebijakan, buku panduan, PDF penelitian, dan laporan arsip dibiarkan tidak tersentuh selama berbulan-bulan. Dalam banyak alur kerja (pipeline), sekitar delapan puluh persen dokumen sumber tetap identik di antara sesi ingest. Meskipun demikian, banyak sistem membuang seluruh korpus dan membangun ulang indeks dari awal secara terjadwal. Jangan lakukan itu. Bangunlah sebuah gerbang di pintu masuk pipeline Anda. Lakukan hashing pada file yang masuk. Bandingkan timestamp modifikasi terakhir. Jika sebuah dokumen tidak berubah, lewati sepenuhnya. Memproses ulang file statis adalah pemborosan murni. Hal ini memakan biaya komputasi, mempercepat keausan SSD secara tidak perlu, dan membengkakkan log ingest Anda dengan aktivitas palsu.
Dalam praktiknya, simpanlah manifes ringan yang memetakan jalur file ke checksum. Saat penjadwal (scheduler) aktif, biarkan ia memeriksa manifes terlebih dahulu. Hanya sebagian kecil file yang berubah yang boleh diproses oleh chunker.
Patch Dokumen, Jangan Ganti Seluruhnya
Saat sebuah dokumen berubah, tahan insting Anda untuk memperlakukannya sebagai file yang benar-benar baru. Sebuah spesifikasi teknis setebal lima puluh halaman mungkin hanya menerima revisi dua paragraf di bagian keempat. Jika pipeline Anda mengganti seluruh file, Anda akan melakukan re-chunking dan re-embedding pada empat puluh sembilan halaman yang masih bagus tanpa alasan yang jelas.
Sebaliknya, bandingkan versi baru dengan versi lama. Identifikasi delta-nya. Kemudian lakukan re-chunking dan re-embedding hanya pada bagian yang berubah. Gunakan metadata seperti nomor halaman, ID bagian, anchor header, atau rentang paragraf untuk melacak batas-batasnya. Jika strategi chunking Anda menghormati struktur dokumen, hal ini akan mudah dilakukan. Jika tidak, memperbaiki chunker Anda adalah investasi yang lebih baik daripada membeli klaster inferensi yang lebih besar. Biaya teknik untuk memelihara pipeline yang sadar akan perbedaan (diff-aware) akan terbayar sendiri dalam hitungan minggu setelah jumlah dokumen Anda meningkat.
Hadapi Biaya Berulang Secara Langsung
Karena panggilan LLM berjalan pada setiap kueri, menghemat bahkan beberapa token saja atau melakukan caching pada sejumlah respons akan memberikan hasil yang sangat besar. Mulailah dengan prompt caching. Jika satu pengguna bertanya tentang kebijakan pengembalian dana Anda dan pengguna lain menanyakan hal yang sama sepuluh menit kemudian, tidak ada alasan untuk memanggil model dua kali. Simpan pasangan kueri-respons terbaru dengan pencocokan kemiripan semantik. Ketika pertanyaan baru masuk dalam ambang batas kemiripan dengan yang sudah di-cache, kembalikan jawaban yang tersimpan secara langsung. Tidak ada token yang dihasilkan, tidak ada dolar yang terbuang.
Selanjutnya, perhatikan baik-baik kualitas retrieval Anda. Retriever yang ceroboh memaksa LLM untuk membaca tumpukan jerami hanya untuk menemukan jarum. Jika Anda menjejalkan prompt dengan dua puluh chunk yang tidak relevan karena ambang batas top-k Anda terlalu longgar, Anda membayar model untuk memindai kebisingan (noise). Perketat retrieval Anda. Kurangi top-k Anda. Kompres chunk sebelum mengirimkannya. Hapus footer dan header boilerplate selama proses ingest agar tidak pernah mencapai prompt. Setiap token yang Anda hapus dari jendela konteks adalah penghematan pecahan sen, dan pecahan tersebut akan terakumulasi di ribuan kueri harian.
Retrieval yang lebih baik juga meningkatkan latensi, yang merupakan bentuk biaya lainnya. Pengguna akan meninggalkan antarmuka yang lambat. Jawaban yang lebih cepat lebih murah untuk diproduksi sekaligus lebih baik untuk retensi.
Kesimpulan Utamanya
Berhentilah mengoptimalkan apa yang terasa mahal dan mulailah mengoptimalkan apa yang tertulis di tagihan Anda sebagai hal yang mahal. Ukur setiap tahap secara independen. Anda kemungkinan besar akan menemukan bahwa embedding adalah bagian yang murah, penyimpanan vektor adalah bagian yang stabil, dan inferensi LLM adalah bagian yang menguras biaya. Fokuskan energi Anda pada efisiensi waktu kueri, pembaruan inkremental, dan deduplikasi yang presisi. Bangunlah untuk pertanyaan pengguna yang ke-seribu, bukan untuk unggahan dokumen yang ke-lima puluh. Bottleneck jarang berada di tempat yang Anda duga.
Sumber: Where Does RAG Actually Cost You Money? I Decided to Stop Guessing
Bergabunglah dalam diskusi di komunitas pembelajaran GyaanSetu AI.
