Desain Infrastruktur untuk Mengurangi Biaya Proksi dan Token saat Deployment Produksi Agent-Reach
19 de junio de 2026
0
Computing/SoftwareComments (0)
Log in to leave a comment
No posts yet
Log in to leave a comment
No posts yet
Agen berbasis Agent-Reach yang berjalan lancar di CLI lokal sering kali menghadapi hambatan begitu diunggah ke server produksi. Saat dibanjiri puluhan ribu permintaan scraping, IP akan diblokir satu per satu oleh jaringan keamanan CDN seperti Cloudflare. Namun, jika kita hanya mengandalkan proksi residensial berbayar, biaya bandwidth tidak akan tertanggung. Selain itu, memasukkan HTML mentah langsung ke LLM dapat menyebabkan konteks meluap dan tagihan token membengkak. Untuk mengatasi masalah ini, diperlukan arsitektur routing dinamis dan pipeline pra-pemrosesan.
Mengoperasikan Agent-Reach tanpa perlindungan akan menghabiskan ribuan dolar hanya untuk biaya proksi residensial berbayar. Dalam sistem yang menangani 100.000 permintaan per hari dengan ukuran rata-rata 150KB per halaman dan tingkat kegagalan mencapai 50%, volume transfer data bulanan mencapai 675GB. Proksi residensial premium seperti Bright Data atau Oxylabs berkisar antara $4 hingga $8 per GB. Jika semua lalu lintas dialihkan ke sana, biaya bulanan bisa melonjak hingga $5.400.
Dengan menerapkan proxy aggregator sumber terbuka, Scrapoxy, sebagai super proxy berbasis kontainer Docker, Anda dapat mempertahankan endpoint tunggal sekaligus mengendalikan biaya infrastruktur. Pertama, buat berkas docker-compose.yml di root proyek dan definisikan image valkey/valkey:7.2-alpine serta fabienvauchelles/scrapoxy:latest. Berikan perintah --appendonly yes --requirepass [password] pada kontainer Valkey untuk memastikan persistensi caching kredensial. Setelah mengatur nama pengguna dan kata sandi di variabel lingkungan Scrapoxy, jalankan kontainer dengan perintah docker compose up -d. Konfigurasi ini dapat menghemat biaya langganan layanan berbayar lebih dari $200 per bulan.
Siklus rotasi IP harus dibedakan berdasarkan kebijakan keamanan platform target agar sesi tidak terputus. Untuk permintaan Read-Only publik yang tidak memerlukan autentikasi, tetapkan TTL agresif antara 30 detik hingga 3 menit guna mengalokasikan IP baru secara paksa melalui round-robin. Ini adalah langkah untuk menghindari pemblokiran berbasis ambang batas. Sebaliknya, untuk platform berbasis autentikasi seperti X atau Reddit yang memerlukan pemeliharaan cookie sesi, aktifkan fitur injeksi cookie Scrapoxy untuk mengunci node IP residensial yang sama selama 5 hingga 10 menit. Hal ini dilakukan untuk mencegah sesi autentikasi kedaluwarsa akibat perubahan IP geografis yang tiba-tiba.
Untuk menekan biaya lebih jauh, lakukan optimasi routing lalu lintas pada lapisan API Gateway NGINX. Definisikan kumpulan proksi pusat data berbiaya rendah (seperti DataImpulse yang berada di kisaran $1 per GB) dan kumpulan proksi residensial Scrapoxy secara terpisah dalam blok upstream di berkas konfigurasi NGINX (/etc/nginx/nginx.conf). Buat lokasi /fetch/generic/ di dalam blok server untuk meneruskan lalu lintas HTML publik dengan intensitas keamanan rendah, seperti RSS feed atau pencarian GitHub, ke proksi pusat data. Selanjutnya, buat lokasi /fetch/social/ untuk merutekan permintaan endpoint sosial dengan gesekan tinggi ke backend Scrapoxy dan menyuntikkan header. Penerapan routing dua jalur ini mencegah pemborosan bandwidth proksi residensial yang mahal dan memangkas total biaya proksi hingga 90%.
Data HTML mentah sarat dengan elemen DOM duplikat, stylesheet, dan tumpukan skrip inline. Jika diinput langsung ke LLM, data ini mengonsumsi token yang tidak perlu dan mengaburkan hasil inferensi. Dengan mengubah halaman web asli menjadi markdown alih-alih memasukkan konten mentah ke dalam jendela konteks, ukuran data dapat berkurang hingga 75% sampai 90%. Melakukan pembersihan berbasis regex dan serialisasi markdown pada tahap pra-pemrosesan pipeline dapat menghemat konsumsi token API LLM lebih dari 40% sekaligus mencegah galat window overflow.
Implementasikan fungsi Python yang memproses input data dengan mengombinasikan komponen parser Trafilatura dan html2text. Saat memanggil fungsi trafilatura.extract(), tentukan opsi favor_recall=False untuk mengecualikan bilah sisi atau iklan dan hanya mengekstrak teks isi utama. Sebagai cadangan jika ekstraksi blok konten utama gagal, masukkan kode fallback yang membuat objek html2text.HTML2Text() dengan pengaturan ignore_images=True dan body_width=0. Menjalankan rutinitas pembersihan menggunakan regex (re.sub) untuk menghapus tag sisa seperti <script> atau <style> serta mereduksi baris kosong yang berurutan akan mengurangi latensi respons agen.
Saat membagi dokumen yang panjang, alih-alih menggunakan chunking berdasarkan jumlah karakter yang sederhana, gunakan algoritma segmentasi yang mempertahankan konteks berdasarkan kemiripan semantik. Hitung kemiripan kosinus antara vektor embedding dari teks yang telah dibagi per kalimat untuk menangkap titik di mana diskontinuitas semantik terjadi.
Similarity(u, v) = rac{u cdot v}{|u| |v|}Setelah menghitung jarak antar kalimat yang berdekatan, tetapkan titik batas di mana perbedaan jarak melebihi persentil ke-95 dari keseluruhan dokumen sebagai titik segmentasi semantik untuk membuat daftar chunk. Penerapan chunking semantik terbukti lebih efektif dibandingkan metode panjang tetap dalam mencegah hilangnya informasi akibat pemisahan informasi terkait ke dalam chunk yang berbeda, sekaligus meningkatkan akurasi pencarian informasi LLM.
Platform seperti X atau LinkedIn memiliki batasan kecepatan yang ketat. Kesalahan HTTP 429 atau 403 sering terjadi. Dalam situasi gangguan sementara seperti ini, jika proses aplikasi sinkron terus-menerus mencoba ulang (retry), sumber daya server akan terkuras dan tingkat pemblokiran IP hanya akan meningkat. Untuk memastikan ketahanan sistem, diperlukan middleware penanganan pengecualian asinkron yang mengidentifikasi sifat galat dan menyesuaikan beban pada server target secara dinamis.
Saat merancang kelas error handler, bedakan dengan akurat antara kesalahan sementara dan kesalahan permanen. Jika kode status HTTP adalah 429, 502, 503, atau 504, atau jika pesan kesalahan mengandung 'timeout' atau 'connection refused', klasifikasikan sebagai kesalahan sementara dan jadwalkan untuk percobaan ulang. Sebaliknya, klasifikasikan kesalahan seperti 401 atau 400 sebagai kesalahan permanen dan segera isolasi ke Dead Letter Queue (DLQ). Jika terjadi kesalahan sementara, terapkan algoritma exponential backoff dengan jitter acak dalam milidetik untuk mencegah masalah Thundering Herd yang terjadi akibat penumpukan permintaan di waktu yang sama. Rumus perhitungan waktu tunggu adalah sebagai berikut:
Dengan menetapkan waktu tunggu dasar () sebesar 30 detik dan membatasi batas maksimum () hingga 600 detik, percobaan ulang ke-3 akan menjamin waktu tunggu terdistribusi sekitar 240 detik, yang secara efektif menghindari kebijakan pemblokiran platform target.
Untuk mencegah gangguan berantai di mana kegagalan atau peningkatan keamanan pada platform tertentu melumpuhkan seluruh alur kerja, implementasikan pola bulkhead berbasis Redis pada lapisan middleware. Alih-alih satu antrean global, buat daftar Redis independen yang dipisahkan berdasarkan domain tujuan (queue:bulkhead:twitter, queue:bulkhead:reddit, queue:bulkhead:general). Alokasikan batas konkurensi maksimum secara berbeda untuk worker pool yang mengonsumsi setiap antrean, misalnya 3 untuk Twitter dan 25 untuk General Web. Tulis rutinitas pemrosesan tertunda yang menggunakan Sorted Set pada Redis untuk mendaftarkan stempel waktu kembali sebagai score guna mengelola jadwal percobaan ulang tugas yang gagal. Dengan menerapkan struktur bulkhead ini, meskipun terjadi pemblokiran API oleh media sosial tertentu, hanya worker terkait yang akan berada dalam status menunggu, sementara tingkat keberhasilan penyelesaian tugas riset agen secara keseluruhan tetap terjaga di atas 95%.
Data mentah yang dikumpulkan secara acak dari berbagai sumber web sering kali mengandung ketidaksesuaian tanggal atau fakta palsu, sehingga mudah bagi LLM untuk melakukan inferensi yang menyimpang. Sebelum memberikan konteks ke model AI generatif, Anda harus menggabungkan lapisan verifikasi diskrit di ujung pipeline yang menghitung kredibilitas konten berkas markdown dan memvalidasi konsistensi numerik untuk memblokir fenomena halusinasi.
Rancang kelas filter deterministik yang menghitung validitas temporal metadata yang dikumpulkan serta pembobotan berdasarkan sumber platform. Dokumen yang memiliki stempel waktu masa depan berdasarkan waktu sistem atau tanggal dalam format ISO yang tidak valid harus segera dikecualikan dari set data. Selain itu, deklarasikan kamus yang memetakan bobot kepercayaan per sumber platform, misalnya memberikan 0,95 untuk GitHub, 0,90 untuk Wikipedia, dan menetapkan skor dasar rendah untuk informasi media sosial seperti Reddit (0,50) atau Twitter (0,40). Terapkan logika yang menambahkan bonus bobot metadata sebesar 0,05 hanya jika nama penulis dan judul dalam dokumen terjaga keutuhannya untuk menghasilkan skor kepercayaan akhir. Aset informasi dengan skor di bawah ambang batas akan secara otomatis dikecualikan pada tahap penyusunan prompt LLM.
Untuk menjamin kualitas data keluaran secara final, jalankan skrip penilaian yang membandingkan kandidat jawaban yang dihasilkan dengan konteks asli.
d+(?:.d+)?%?) untuk melakukan operasi irisan antara set simbol angka dalam set data asli dan set angka dalam kalimat yang dihasilkan. Jika terdeteksi angka atau unit mata uang acak yang tidak ada dalam sumber, munculkan bendera ketidaksesuaian numerik dan segera minta eksekusi ulang melalui middleware routing.Dengan menghubungkan lapisan verifikasi berlapis ini, masalah manipulasi angka dan kutipan palsu yang dilakukan oleh agen berbasis crawling dapat diblokir di tingkat arsitektur, dan hanya hasil riset yang terverifikasi sepenuhnya yang akan disampaikan kepada pengguna akhir.