Dalam seri Fundamentals AI, kita telah membahas mengapa model bahasa besar (LLM) kadang-kadang "berhalusinasi". Salah satu penyebab utamanya adalah bahwa LLM hanya bisa merespons berdasarkan data yang telah dilihat selama pelatihan dan konteks yang tersedia saat itu. Artikel sebelumnya memperkenalkan konsep *grounding*—memberikan informasi andal kepada model saat runtime, bukan mengharapkannya mengetahui segala sesuatu. Namun, pertanyaan penting tetap ada: dari mana informasi tersebut berasal? Aplikasi AI modern tidak memasukkan seluruh basis data atau ratusan halaman PDF ke dalam prompt. Sebaliknya, mereka terlebih dahulu mengidentifikasi potongan informasi paling relevan dan hanya mengirimkannya ke model. Dalam artikel ini, kita akan mempelajari mekanisme di balik proses tersebut.
Bayangkan aplikasi Travel Planner bertenaga AI yang telah kita bangun. Sampai saat ini, aplikasi ini menjawab pertanyaan umum tentang perjalanan menggunakan pengetahuan yang dipelajari selama pelatihan. Kini, kita ingin membuatnya jauh lebih cerdas dengan mengunggah beberapa dokumen: panduan perjalanan Lonely Planet Jepang, PDF jadwal kereta, daftar restoran lokal rekomendasi, informasi hotel, dan kebijakan perjalanan internal perusahaan. Bersama-sama, dokumen-dokumen ini berisi ratusan halaman. Pengguna bertanya, "Saya menginap dekat Stasiun Tokyo. Restoran ramen mana dari panduan perjalanan kami yang berada dalam jarak berjalan kaki dan dikenal karena opsi vegetariannya?" Jawabannya ada di suatu tempat dalam ratusan halaman tersebut. Tantangan utamanya bukan lagi menghasilkan teks, tetapi menemukan informasi yang tepat terlebih dahulu.
Permasalahan muncul karena LLM tidak dapat membaca seluruh basis pengetahuan Anda setiap kali. Kesalahpahaman umum adalah bahwa aplikasi AI mengirim semua dokumennya ke model. Misalkan panduan perjalanan berisi 450 halaman, ribuan daftar restoran, deskripsi hotel, detail transportasi, dan rekomendasi tempat wisata. Mengirimkan semua itu ke LLM setiap kali pengguna bertanya "Mau makan malam di mana?" akan menimbulkan beberapa masalah. Pertama, banyak dokumen yang terlalu besar untuk muat dalam konteks model. Kedua, bahkan jika muat, membuat model membaca ratusan halaman tidak relevan hanya untuk menjawab pertanyaan sederhana sangat mahal, lambat, dan tidak efisien. Solusinya adalah mengirim hanya informasi yang benar-benar diperlukan. Pertanyaannya adalah: bagaimana cara menemukan beberapa paragraf yang tepat dari ratusan halaman? Insting awal mungkin adalah "mengapa tidak mencari dokumen saja?" Itulah yang akan kita telusuri selanjutnya.
Pendekatan tradisional menggunakan pencarian kata kunci: pengguna memasukkan kata, dan aplikasi mencari dokumen yang mengandung kata tersebut secara persis. Misalnya, jika panduan berisi "Tokyo memiliki beberapa restoran ramen vegetarian yang sangat baik…", pencarian untuk "ramen vegetarian" akan menemukan paragraf tersebut. Meskipun cepat dan mudah, pencarian kata kunci gagal ketika makna, bukan teks persis, yang penting. Sinonim, variasi nama tempat, dan perbedaan terminologi sering menyebabkan hasil yang terlewatkan atau tidak relevan. Manusia membandingkan makna, bukan urutan kata, dan sistem pencarian berbasis kata kunci sering kali gagal mencapai tingkat kecocokan ini.
Di sinilah AI mengubah permainan melalui *pencarian semantik*. Alih-alih bertanya "Apakah dokumen ini mengandung kata yang sama?", pencarian semantik bertanya "Apakah dokumen ini menyampaikan ide yang sama?" Dalam contoh kita, pengguna bertanya "Di mana saya bisa makan ramen bebas daging dekat Stasiun Tokyo?" dan panduan menyatakan "Ichiran menawarkan ramen vegetarian beberapa langkah dari Stasiun Tokyo." Mesin pencari semantik memahami bahwa "bebas daging" dan "vegetarian" menyampaikan konsep yang hampir sama, sehingga mengambil cuplikan yang benar meskipun kata-kata persisnya berbeda.
Komputer tidak memahami makna secara alami; mereka bekerja dengan angka. *Embedding* mengubah teks menjadi vektor numerik yang menangkap makna konseptualnya. Anggap vektor ini sebagai sidik jari yang merepresentasikan esensi kalimat, bukan kata-kata itu sendiri. Frasa seperti "ramen vegetarian", "noodle bebas daging", dan "ramen berbasis nabati" akan memiliki embedding yang sangat mirip karena mereka menyampaikan ide yang serupa. Sebaliknya, "Gunung Fuji”, "pemesanan tiket", dan "pertukaran mata uang" menghasilkan vektor yang jauh berbeda karena mereka mewakili konsep yang tidak terkait.
Mengapa tidak membandingkan teks asli? Misalkan panduan menyatakan "Ichiran menawarkan ramen vegetarian dekat Stasiun Tokyo." Pengguna A bertanya "Rekomendasikan ramen vegetarian." Pengguna B bertanya "Di mana saya bisa menemukan restoran noodle bebas daging?" Perbandingan teks biasa akan menunjukkan kesamaan yang sangat sedikit, meskipun kedua permintaan tersebut pada dasarnya sama. Embedding memungkinkan model untuk melihat lebih dari sekadar kesamaan permukaan, menangkap niat di balik kata-kata.
Dari sudut pandang teknis, pipeline umumnya melibatkan tiga langkah: (1) **Pembuatan embedding** menggunakan model bahasa seperti BERT atau OpenAI’s text-embedding-ada-002 untuk mengubah setiap potongan dokumen menjadi vektor; (2) **Penyimpanan vektor** dalam basis data vektor seperti Pinecone atau FAISS untuk pencarian cepat; (3) **Pengambilan berdasarkan kesamaan** menggunakan produk dot atau jarak kosinus untuk menemukan potongan yang paling semantik mirip dengan embedding permintaan pengguna. Hasilnya kemudian diberikan ke LLM, sering kali dalam teknik yang disebut *Retrieval-Augmented Generation (RAG)*, yang menggabungkan fakta yang diambil dengan kemampuan generasi model.
Bagi bisnis di Indonesia, mengadopsi pendekatan berbasis RAG sangat berharga karena memungkinkan aplikasi AI lokal beroperasi dengan basis pengetahuan khusus—misalnya, peraturan regional, istilah kuliner, atau frasa budaya—tanpa membebani biaya komputasi yang besar. Hal ini juga meningkatkan kepuasan pengguna dengan memberikan jawaban yang lebih akurat dan kontekstual, yang sangat penting untuk layanan pelanggan yang kompetitif di pasar yang semakin melek teknologi.
Di masa depan, kita dapat mengharapkan peningkatan lebih lanjut: model embedding multilingual yang lebih baik yang dapat langsung memahami bahasa Indonesia, integrasi RAG dengan model fondasi lokal untuk kepatuhan data, dan pipeline pencarian semantik yang lebih efisien yang berjalan di perangkat edge. Bagi pengembang, sekarang adalah waktu yang tepat untuk bereksperimen dengan RAG, karena alat dan kerangka kerja open-source membuat eksperimen semakin mudah.
Kesimpulannya, memberikan pengetahuan pada AI di luar pelatihan bukan lagi sebuah kemewahan tetapi kebutuhan untuk aplikasi dunia nyata yang berguna. Dengan memanfaatkan pencarian semantik dan embedding, kita dapat menghubungkan LLM dengan basis pengetahuan yang luas dan relevan secara efisien, membuka kemungkinan baru untuk asisten yang cerdas dan responsif.