Artikel mendalam tentang teknologi yang membentuk masa depan.

Feed Bebas Rekomendasi: Kurasi Mengalahkan Algoritma

Cara membangun feed bebas rekomendasi dengan kurasi manusia dan retrieval sederhana, bukan algoritma pengoptimal engagement. Pelajaran dari HackerTube.

Ilustrasi yang membandingkan dinding thumbnail berisik dengan rak video kurasi yang tenang dan tertata
Perbedaan antara feed yang dioptimasi untuk perhatianmu dan rak yang dikurasi manusia itu tidak halus.

Jumat pukul 11 malam. Kamu lelah, membuka YouTube, dan beranda menyambutmu dengan deretan thumbnail yang berteriak, wajah kaget, dan tiga topik yang sama yang dianggap kamu suka sejak 2019. Tidak ada yang sesuai keinginanmu, tapi kamu tetap scroll, karena memang itu fungsi antarmuka tersebut. Kalau kamu pernah merasakan kelelahan semacam itu, kamu sudah paham kenapa feed tanpa rekomendasi mendadak menarik, dan kenapa klon YouTube yang dibangun dari rekomendasi di komentar Hacker News, dirakit sekitar dua jam dengan bantuan AI agent, belakangan ramai dibicarakan.

Proyek yang dimaksud adalah HackerTube: antarmuka ala YouTube di atas sekitar 6.500 video yang direkomendasikan di komentar Hacker News dari 2007 sampai sekarang. Tanpa akun, tanpa pelacakan, tanpa manipulasi autoplay. State disimpan di local storage browser. Seluruhnya dibuat lewat satu sesi prompting di Sabtu pagi, dari ekstraksi data sampai deployment ke VPS. Saya ingin membahas kenapa ini bekerja begitu baik, karena pelajarannya berlaku jauh melampaui satu proyek sampingan yang menyenangkan. Ini berhasil karena tidak punya algoritma rekomendasi dalam arti konvensional, dan ternyata itu adalah fitur yang bisa kamu rancang secara sengaja di produkmu sendiri.

Mengapa Algoritma Rekomendasi Mengoptimalkan Hal yang Keliru

Saya menghabiskan beberapa tahun mengerjakan sistem ranking, jadi izinkan saya mengatakan bagian yang jarang diucapkan: fungsi objektifnya adalah produknya. Recommender skala platform dilatih dengan proksi engagement, seperti waktu tonton, click-through rate, durasi sesi, dan kadang dwell time yang dibobot oleh impresi iklan. Tidak satu pun dari itu mengukur "apakah pengguna pulang dengan puas." Yang diukur adalah "apakah pengguna tetap bertahan." Keduanya cukup sering berkorelasi sehingga kamu bisa yakin sedang membangun sesuatu yang bagus, tapi keduanya menyimpang persis di kasus yang penting: kemarahan, sensasi, dan video kedua puluh tentang topik yang sudah kamu kuras habis.

Ini adalah hukum Goodhart yang menyamar. Begitu waktu tonton menjadi target, ia berhenti mengukur apa pun tentang kualitas. Lebih buruk lagi, loop umpan baliknya tertutup: algoritma membentuk apa yang diklik, klik menjadi data latih, dan model makin yakin pada gambaran dirimu yang makin sempit. Beberapa orang yang menanggapi HackerTube mencatat hal yang juga saya rasakan sendiri: feed tanpa personalisasi berisi video pilihan para nerd ternyata punya tingkat hit yang lebih tinggi dibanding YouTube yang sangat dipersonalisasi. Itu seharusnya tidak mengejutkan. Personalisasi menyimpulkan seleramu dari momen terlemahmu (apa yang kamu klik jam 11 malam saat lelah), sementara kurasi merekam selera dari momen terkuat orang lain (saat mereka repot-repot menulis komentar merekomendasikan sesuatu ke rekan-rekannya).

Ada juga mode kegagalan yang lebih halus: feed yang dioptimasi sangat pandai menampilkan lebih banyak hal yang sudah kamu tahu. Padahal sebagian alasan orang menjelajah adalah perluasan cakrawala, yaitu menemukan sesuatu yang mengejutkan dan mengkalibrasi ulang model dunia kita. Optimasi engagement tidak punya sinyal gradien untuk kejutan yang baru berbuah nanti. Ia hanya tahu apakah kamu bertahan. Ini alasan yang sama mengapa saya pernah berargumen bahwa benchmark AI melewatkan sebagian besar pekerjaan nyata: proksi yang terukur menjauh dari hal yang sebenarnya kamu inginkan, dan penyimpangannya menumpuk.

Kurasi Manusia sebagai Korpus: Menambang Komentar Hacker News

Jadi dari mana feed bebas rekomendasi mendapat inventarisnya? Jawaban HackerTube cerdas karena memakai ulang sinyal berkualitas tinggi yang sudah ada: dua dekade komentar Hacker News. Pipeline-nya sederhana untuk dijelaskan. Unduh semua komentar publik HN (tersedia lewat API resmi dan dataset komunitas). Saring komentar yang berisi tautan YouTube, sekitar 40.000 jumlahnya. Lalu jalankan pass LLM yang lebih murah pada setiap komentar untuk menjawab satu pertanyaan: apakah orang ini benar-benar merekomendasikan video ini, atau itu spam, tautan asal lewat, atau seseorang yang mengutip video untuk mengejeknya? Tahap penyaringan itu mempersempit korpus menjadi sekitar 6.500 video dalam 150 klaster topik.

Dua pilihan desain di sini layak dicontek. Pertama, tahap klasifikasi adalah jenis tugas penilaian terbatas yang sangat cocok untuk LLM: ya/tidak dengan justifikasi singkat, diterapkan dalam skala besar dengan biaya receh. Ini pola yang sama dengan memakai constrained decoding untuk mengubah LLM menjadi model keputusan yang cepat: jangan minta model untuk menghasilkan, minta ia menyaring. Kedua, korpus itu punya batas kualitas bawaan. Setiap video di dalamnya direkomendasikan oleh manusia, secara tertulis, di hadapan audiens yang men-downvote omong kosong. Itu mekanisme penyaringan yang tidak bisa ditiru model engagement mana pun, karena berlandaskan reputasi, bukan klik.

Rekomendasi yang ditulis di komentar adalah seseorang yang mempertaruhkan reputasinya. Klik adalah refleks. Feed yang dibangun di atas yang pertama terasa berbeda karena memang berbeda.

Ada juga dimensi waktu yang penting. Rekomendasi ini membentang dari 2007 sampai sekarang, sehingga korpusnya didominasi konten yang bertahan lama seperti kuliah, talk teknis mendalam, dan wawancara panjang, bukan apa pun yang sedang didorong algoritma minggu ini. Satu detail yang disukai banyak orang: kategori "Longs" untuk video panjang. Di YouTube, talk 90 menit adalah risiko yang diambil recommender terhadap sesi tontonanmu. Di HackerTube, itu justru fitur, karena seseorang sudah menulis "ini mengubah cara saya berpikir tentang compiler" di sebelahnya.

Ilustrasi corong yang menyaring aliran gelembung komentar menjadi tumpukan kecil ubin video kurasi
Empat puluh ribu komentar masuk, enam ribu lebih video yang sudah tervalidasi keluar. Corong penyaringannya adalah produknya.

Retrieval Sederhana Mengalahkan Ranking Pintar

Ini bagian yang akan terasa sesat kalau kamu pernah bekerja di recsys: begitu korpusmu kecil dan bagus, ranking hampir tidak penting. Enam ribu video itu sedikit. Kamu tidak perlu model embedding two-tower dan cascade re-ranking; kamu cukup butuh tag topik, recency, dan satu tahap personalisasi ringan yang berjalan di sisi klien. "For You" di HackerTube bekerja berdasarkan state sesi di local storage, yaitu apa yang kamu tonton dan lewati di browser ini, tanpa akun dan tanpa profil di server. Itu bukan keterbatasan. Itu keputusan arsitektur yang menghilangkan seluruh kelas insentif buruk: kalau kamu tidak menyimpan perilaku pengguna, kamu tidak bisa tergoda untuk mengoptimasinya.

Kalau kamu ingin membuat versimu sendiri, misalnya feed paper, talk konferensi, postingan blog, atau apa pun yang direkomendasikan komunitasmu, logika ranking-nya muat dalam beberapa lusin baris. Ini bentuk dasarnya:

import math
import time
def score(video, session, now=None):
now = now or time.time()
s = 0.0
# Corpus quality signal: how many distinct humans vouched for it
s += math.log1p(video["recommenders"])
# Gentle recency so the feed isn't frozen in 2014
age_days = max((now - video["recommended_at"]) / 86400, 1)
s += 0.5 / math.log1p(age_days)
# Session-level taste: topics the user finished vs. skipped,
# stored in localStorage — never leaves the browser
for topic in video["topics"]:
s += 1.5 * session["finished"].get(topic, 0)
s -= 1.0 * session["skipped"].get(topic, 0)
# Already watched? Push it down hard, don't hide it
if video["id"] in session["seen"]:
s -= 5.0
return s
def for_you_feed(videos, session, limit=24):
return sorted(videos, key=lambda v: score(v, session), reverse=True)[:limit]

Perhatikan apa yang tidak ada: tidak ada fitur dwell-time, tidak ada kecepatan engagement, tidak ada bandit exploration-exploitation yang mencoba mencari titik lelahmu. Sinyal personalisasinya bersifat eksplisit (selesai ditonton dan dilewati, berdasarkan perilaku pengguna sendiri dalam sesi ini) dan terbatas (beberapa poin masing-masing, mudah dikalahkan oleh istilah kualitas korpus). Algoritmanya bisa mendorong; ia tidak bisa menjebak. Asimetri itu adalah seluruh filosofinya dalam satu fungsi skor.

Keputusan soal thumbnail juga layak disebut, karena ini contoh bersih dari de-optimasi antarmuka. Kreator YouTube melakukan A/B test thumbnail sampai tak terhingga, sehingga thumbnail itu sendiri menjadi artefak adversarial. HackerTube mengabaikan thumbnail unggahan dan memakai frame pada menit ke-50% video. Ini perubahan satu baris yang menghapus perlombaan clickbait sepenuhnya. Pratinjaunya menunjukkan apa video itu sebenarnya, bukan apa yang menurut kreatornya akan membuatmu klik.

Merancang Feed Tanpa Akun atau Pelacakan

Memindahkan state ke klien mengubah lebih dari sekadar posisi privasimu. Ia mengubah struktur biaya dan area risiko hukummu. Tanpa akun pengguna, tidak perlu sistem autentikasi, reset password, mekanisme subject-access GDPR, dan tanggung jawab kebocoran profil perilaku. Backend-mu hanyalah file server statis dan mungkin satu API kecil. Seluruh situs bisa menjadi artefak build. Ketika arsitekturmu tidak bisa mengakumulasi data pengguna, sebagian besar dark pattern menjadi mustahil secara fisik, bukan sekadar melanggar kebijakan. Saya jauh lebih percaya pada jaminan seperti itu dibanding kebijakan privasi mana pun.

Trade-off-nya jujur: state lokal bersifat sementara dan terikat perangkat. Hapus data browser dan feed-mu kembali kosong. Tidak ada kesinambungan lintas perangkat. Untuk situs video lean-back, itu tidak masalah. Saya berpendapat reset itu kadang malah sehat. Untuk hal-hal di mana pengguna membangun koleksi jangka panjang, kamu perlu jalur ekspor/impor, yang kebetulan membawa kita ke keputusan paling berpandangan ke depan dalam proyek ini.

Data sebagai Antarmuka: Mengirim Korpus yang Bisa Di-fork

Bagian HackerTube yang menurut saya benar-benar baru bukanlah UI-nya, melainkan fakta bahwa seluruh dataset di balik situs ini bisa diunduh sebagai zip yang menyertakan DATA.md yang ditulis khusus untuk AI agent. Dokumen itu menjelaskan bagaimana file-file saling terhubung, jebakan-jebakannya, contoh record, dan cara mengambil metadata terbaru. Alurnya: berikan zip itu ke coding agent-mu dan katakan "buatkan saya email mingguan berisi talk tentang topik saya" atau "buatkan saya klien terminal untuk ini." Produknya bukan situs webnya. Produknya adalah korpus yang dikurasi, dan situs web hanyalah renderer referensi.

Ini pola yang saya kira akan semakin sering kita lihat. Selama dua dekade, saran standarnya adalah "sediakan API." Tapi API tetap menjadikanmu penjaga gerbang untuk setiap kueri, dan ia membusuk begitu kamu berhenti memeliharanya. Dataset portabel yang bisa dibaca agent membalik relasi itu: kamu menerbitkan sesuatu sekali, terdokumentasi dengan baik, lalu membiarkan seribu frontend personal bermekaran. Ini sejalan dengan semangat small web, yaitu penemuan yang dibangun dari orang-orang yang menautkan hal-hal yang mereka sukai, bukan platform yang memutuskan apa yang kamu lihat. Semangat itu diperbarui untuk dunia di mana konsumen pertama datamu mungkin adalah language model.

Menulis dokumentasi untuk agent adalah kerajinan baru yang sedang berkembang. Manusia memindai sekilas; agent membaca secara harfiah dan menyeluruh, dan mereka tersandung pada asumsi implisit yang akan disimpulkan manusia. DATA.md yang baik menyatakan satuan, nullability, keanehan encoding, dan mode kegagalan di awal. Kalau kamu menerbitkan dataset, ini sekarang wajib. Bedanya adalah antara agent yang menghasilkan fork yang berfungsi dalam sekali jalan dan agent yang berhalusinasi tentang skema.

Ilustrasi satu kotak arsip yang bercabang ke banyak perangkat dan format berbeda
Terbitkan korpus sekali; biarkan seratus frontend bermekaran.

Keterbatasan Jujur dari Feed Terkurasi

Saya sudah berjanji mengedepankan pragmatisme daripada hype, jadi berikut tepi-tepi tajamnya. Pertama: korpus yang dikurasi mewarisi bias kuratornya. Hacker News adalah demografi tertentu dengan selera tertentu. Hasilnya adalah "100% konten nerd murni," yang menyenangkan jika kamu termasuk target audiens dan tidak terlihat jika bukan. Pendekatan ini tidak bisa diskalakan ke "semua orang," dan memang tidak berusaha begitu. Ini sebuah kedai, bukan utilitas.

  • Basi: snapshot beku akan membusuk. Kamu butuh job terjadwal yang menjalankan ulang pipeline ekstraksi, atau feed diam-diam berubah menjadi museum.
  • Ketergantungan platform: videonya tetap berada di YouTube. Penghapusan, pembatasan wilayah, dan perubahan ToS akan membusukkan korpusmu dari bawah. Lacak tautan mati atau kehilangan kepercayaan.
  • Kunci demografi: siapa pun yang merekomendasikan menentukan selera. Tidak masalah untuk situs komunitas, tapi ini masalah bias serius jika kamu menjualnya sebagai penemuan yang netral.
  • Batas kesegaran: konten baru yang bagus belum punya rekomendasi. Feed terkurasi secara sistematis kurang melayani yang baru, justru celah yang diisi algoritma engagement, untuk hal baik maupun buruk.

Poin terakhir itulah yang membuat saya tetap jujur soal pendekatan ini. Feed engagement dan feed kurasi bukan musuh; mereka dioptimasi untuk horizon waktu yang berbeda. Kurasi memberitahumu apa yang terbukti berharga. Ranking engagement, dalam bentuk terbaiknya, memunculkan apa yang mungkin menjadi berharga. Versi sehat dari recommender YouTube akan sangat mirip korpus HackerTube dengan satu jalur kecil yang diberi label jelas "baru dan belum terbukti." Tragedinya bukan karena algoritma rekomendasi ada, melainkan karena model bisnis menuntut mereka menjadi seluruh antarmuka.

Kapan Kamu Sebaiknya Membangun Sendiri

Waktu build dua jam adalah cerita di dalam cerita. Proyek ini tidak mungkin secepat ini lima tahun lalu, bukan karena satu langkah pun sulit, tapi karena ada empat puluhan langkah rumit: ekstraksi, penyaringan, pengayaan metadata, UI, deployment, dan pengerasan. Agent yang bisa memegang seluruh rencana dalam konteksnya memadatkan semua itu menjadi satu sesi prompting. Artinya, hambatan untuk membangun alternatif terkurasi berskala niche untuk feed platform telah turun menjadi kira-kira "satu orang yang termotivasi dengan Sabtu pagi."

Jadi ini pendapat saya, dan saya akan berkomitmen padanya: jika kamu menjalankan produk apa pun dengan feed, seperti basis pengetahuan internal, forum komunitas, atau produk konten, kamu sebaiknya membuat prototipe versi kurasi sebelum membangun versi algoritmik. Mulailah dengan rekomendasi manusia yang eksplisit, saring dengan pass LLM yang murah, ranking dengan fungsi skor yang cukup sederhana untuk dijelaskan di standup, dan jaga state di sisi klien selama bisa. Kamu akan tahu apakah masalahmu sebenarnya inventaris atau ranking, dan dalam pengalaman saya hampir selalu inventaris. Feed yang dioptimasi engagement adalah alat untuk memaksimalkan metrik. Feed kurasi adalah alat untuk menghormati manusia. Bangun yang kedua lebih dulu, dan baru raih yang pertama ketika kamu bisa menjelaskan dengan tepat mengapa, dan untuk siapa, ia layak ada.