Saya Membina Bot Q&A Kod Dengan RAG: Apa Yang Berjaya Dan Apa Yang Gagal
Pembangun kami menghabiskan masa berhari-hari mencari melalui Slack dan dokumen lama untuk memahami mikroperkhidmatan kami. Saya memutuskan untuk membina chatbot bagi menjawab soalan-soalan ini menggunakan RAG.
Saya melakukan banyak kesilapan dalam proses tersebut. Inilah yang saya pelajari.
Kegagalan
- Saya cuba memasukkan semua dokumen ke dalam satu prompt. Ia mencapai had token, menyebabkan halusinasi, dan menelan kos yang terlalu tinggi.
- Saya menggunakan indeks TF-IDF asas. Ia gagal apabila pengguna menggunakan sinonim atau istilah yang berbeza.
- Saya cuba menggunakan pecahan (chunks) 500-aksara yang ringkas. Hasilnya adalah rawak kerana pecahan tersebut sering terputus di tengah ayat.
Penyelesaian
Saya berhenti melayan LLM sebagai enjin carian. Saya mengubahnya menjadi enjin pembacaan untuk indeks carian khusus.
Inilah saluran kerja (pipeline) yang berjaya:
- Pecahkan dokumen kepada bahagian 300-token dengan pertindihan (overlap) 50-token.
- Benamkan (embed) setiap pecahan ke dalam vektor.
- Simpan vektor dalam indeks carian kesamaan (similarity search index).
- Semasa waktu pertanyaan, cari 5 pecahan yang paling serupa.
- Masukkan hanya pecahan tersebut ke dalam LLM untuk menjana jawapan.
Perubahan ini mengurangkan halusinasi sebanyak 80% dan memotong kos kepada kurang daripada $0.01 bagi setiap pertanyaan.
Pengajaran Utama
- Saiz pecahan adalah penting. 150 token memberikan konteks yang terlalu sedikit. 1000 token pula memberikan terlalu banyak gangguan (noise). 300 token adalah titik keseimbangan yang ideal.
- Pertindihan (overlap) adalah wajib. Ia mengelakkan kehilangan konteks antara pecahan.
- Gunakan model kecil untuk kelajuan. Model embedding yang kecil berfungsi dengan baik untuk keperluan dalaman kami.
- Uji pengambilan (retrieval) anda. Jangan bergantung kepada semakan manual. Bina set ujian untuk mengukur ketepatan.
RAG bukanlah magis. Ia adalah satu teka-teki kejuruteraan. Jika pecahan anda teruk, pengambilan anda teruk. Jika pengambilan anda teruk, jawapan anda teruk.
Kami kini menjawab 80% soalan onboarding dengan betul. Ini jauh lebih pantas daripada menunggu manusia membalas di Slack.
Bagaimanakah anda membina pembantu AI untuk dokumentasi anda?
Optional learning community: https://t.me/GyaanSetuAi