Tag: Peringkat Kosinus

  • Memori Agen AI Tertangkap Basah Berbohong: Dua Log yang Mengubah Pendekatan

    Memori Agen AI Tertangkap Basah Berbohong: Dua Log yang Mengubah Pendekatan

    Dalam dunia pengembangan agen AI, ada saat-saat ketika sistem hampir melakukan kesalahan fatal, menganggap kesuksesan palsu sebagai sesuatu yang nyata. Baru-baru ini, agen AI kami yang menciptakan sistem memori vecmory, hampir melaporkan hasil cemerlang yang ternyata hanya fatamorgana. Pada saat-saat terakhir, ia memeriksa memorinya sendiri dan menemukan catatan dari sesi sebelumnya: ide ini sudah pernah diuji pada data nyata dan gagal. Agen itu menghentikan dirinya sendiri sebelum mengirimkan laporan. Ini bukan skenario iklan — ini adalah log. Di bawah ini adalah dua log berurutan, dan pada log kedua, memori memaksa kami untuk membuang fitur yang kami banggakan. Kami menulis vecmory — ‘memori berdasarkan makna’ untuk agen AI. Ini bukan tentang pencarian vektor (semua orang memilikinya), tetapi tentang memastikan agen tidak mengulangi kesalahan yang sama dua kali.

    Skenario Pertama: Router yang ‘Menunjukkan 0.98’

    Dalam salah satu sesi, agen mengusulkan untuk meningkatkan peringkat hasil pencarian. Idenya: membuat router yang, berdasarkan permintaan, memutuskan metode peringkat apa yang digunakan — kosinus murni atau metode graf (Personalized PageRank). Ia mengumpulkan tolok ukur sintetis. Korelasi prediktor dengan pilihan ideal adalah 0,98. Hampir sempurna. Tinggal melaporkan dan menggabungkan.

    Sebelum melaporkan, agen melakukan recall pada memorinya sendiri. Dan ia menemukan catatan dari sesi sebelumnya: ide yang sama ini sudah pernah diuji pada data nyata — dan gagal. Pertanyaan yang masuk akal: mengapa ia mulai mengerjakannya — bukankah memorinya sudah ada? Karena recall bersifat semantik, dan apa yang muncul tergantung pada permintaan. Pada awalnya, permintaan itu luas — ‘meningkatkan peringkat’ — sehingga catatan sentral umum tentang peringkat muncul ke permukaan, sementara catatan spesifik ‘router khusus ini sudah diuji dan gagal’ tenggelam di bawahnya. Catatan itu baru muncul ketika konteks kerja menyempit menjadi spesifik — ‘router cos-distribution, PPR vs kosinus, 0.98’: recall pada teks ini akhirnya menangkapnya. Memori tidak diam — ia muncul tepat ketika permintaan menjadi cukup akurat untuk mengambilnya.

    Sintetis hanya sejujur embedding sintetis. Dan pada MiniLM multibahasa yang kami gunakan untuk menghitung vektor, kosinus hidup dalam geometri yang sangat berbeda dibandingkan dengan sintetis. Kami mengukurnya langsung pada korpus memori nyata kami (246 node) saat menulis artikel ini: pasangan acak yang tidak terkait memberikan kosinus rata-rata 0,53 (p5–p95: 0,24–0,76); tetangga terdekat yang sebenarnya — rata-rata 0,80 (p5–p95: 0,57–0,91); dan pada sintetis dari vektor acak, yang tidak terkait berada di 0,00 (±0,08). Perbedaannya langsung terlihat. Pada sintetis, ‘mirip’ terpisah dari ‘tidak mirip’ oleh jurang — ambang batas yang masuk akal memotong dengan bersih. Pada data nyata, awan ‘tetangga’ dan ‘acak’ tumpang tindih: pasangan acak pada persentil atas (0,76) masuk lebih tinggi daripada tetangga pada persentil bawah (0,57). Ambang batas yang pada sintetis berfungsi seperti pisau bedah, pada vektor nyata melewati dalam awan noise acak dan tidak memisahkan apa pun. Catatan dalam memori persis tentang ini: embedding nyata memiliki kosinus dasar yang tinggi dan padat, ambang batas absolut dari sintetis tidak dapat ditransfer — andalkan peringkat (top-k), bukan ambang batas. Agen membaca catatannya sendiri dan membunuh ide itu — sebelum menulis ‘selesai, korelasi 0,98’.

    Kasus kedua — pola yang sama, tetapi lebih menyakitkan: memori memaksa kami membuang fitur yang sudah kami puji di README. Secara default, vecmory memberi peringkat hasil tidak hanya berdasarkan kosinus, tetapi juga dengan tambahan “kepentingan” simpul — derajat masuknya dalam graf (berapa banyak catatan yang merujuk padanya). Logikanya indah: fakta sentral yang sering disebutkan akan muncul lebih tinggi. Kami menyematkannya sebagai default. Lalu — kami mengukurnya. Bukan recall@k (itu tentang akurasi pencarian), tetapi tepatnya kualitas peringkat, pada pasangan nyata “kueri → jawaban benar”: kosinus murni: MRR 0,81; campuran “cerdas” kami dengan kepentingan: MRR 0,41. Kepentingan menenggelamkan jawaban yang tepat. Fakta spesifik langka yang tidak dirujuk siapa pun akan tenggelam di bawah “hub” yang umum digunakan.

    Selanjutnya — lebih menarik. Pada graf “berusia” sintetis dengan hub yang jelas, semuanya terbalik: kosinus mengubur hub (MRR 0,033), sementara kepentingan mengangkatnya (hingga 1,0). Artinya, tanda manfaat dari kepentingan bergantung pada intensi kueri: untuk “beri saya fakta tepat” ia merugikan, untuk “beri saya tentang topik ini secara umum” ia membantu. Tidak ada bobot statis tunggal yang menang untuk kedua kelas. Kami mencoba empat cara untuk mendamaikan sinyal — jumlah berbobot, gerbang, RRF, dan PPR — dan sampai pada kesimpulan yang tidak menyenangkan: masalahnya bukan pada formula pencampuran, melainkan pada sinyal itu sendiri. Kepentingan global simpul adalah prior popularitas, bukan relevansi. Kesimpulan untuk default sudah jelas: untuk kasus utama kami (recall titik), peringkat terbaik adalah kosinus murni. Dan kami menghapus kepentingan dari peringkat default — fitur kami sendiri, yang sudah kami tulis di README. Metode graf (query-seeded PPR) kami pertahankan, tetapi sebagai opsi, bukan default: ia jujur mengangkat hub pada kueri luas dan kalah adil dari kosinus pada kueri titik.

    Apa yang Sebenarnya Kami Pahami tentang “Kepentingan”

    Jika popularitas global (derajat masuk) gagal sebagai sinyal, sinyal apa yang benar? Kami sampai pada jawaban yang tak terduga namun jelas: yang penting bukanlah apa yang banyak dirujuk, melainkan apa yang telah diperbaiki manusia secara berulang. Dan di sinilah value proposition menjadi jujur. Kami tidak menjual “memori graf” (lagi-lagi komoditas). Kami menjual: agen berhenti menginjak penggaruk yang sama yang sudah Anda perbaiki.

    Kedua episode ini mudah dianggap sebagai keberuntungan. Tetapi ketika Anda membersihkan berbagai sampah dalam memori cukup lama (kami mengembangkan vecmory sepenuhnya di vecmory sendiri), terlihat: ini bukan fluktuasi, melainkan beberapa hukum yang stabil. Sekarang akan ada ringkasan — tiga wahyu, tanpa cerita “suatu kali saya mengalami”.

    Aturan “Periksa Sebelum ‘Selesai’”

    Memori yang mengonfirmasi apa yang menyenangkan bagi Anda — itu bukan memori, melainkan gema. Memori memperoleh nilai luar biasa ketika ia membantah penulisnya. Aturan “Periksa Sebelum ‘Selesai’” membatalkan router (babak 1) dan fitur yang kami nantikan (babak 2) — satu mekanisme, korban berbeda. Karena pada kueri-gejala, memori mengambil melalui tepi kausal-temporal (caused_by — “karena”, followed_by — issue→PR) bukan “kata serupa”, melainkan penyebab spesifik dan perbaikan masa lalu. Top-k datar tidak bisa melakukan ini — inilah yang dimaksud dengan “menghubungkan titik-titik”.

    Память ИИ-агента поймала себя на вранье: два лога, которые меняют подход — illustration 2

    Dan ini benar-benar terukur, bukan sekadar perkiraan. Kami mengambil repositori tiket langsung (4299 node: 1993 issue + 2306 PR) dan anotasi yang tidak kami buat sendiri: pola standar GitHub Closes #N di badan PR — pasangan siap pakai «gejala → perbaikannya», diekstrak dengan regex mentah, tanpa LLM sama sekali. Pada 300 permintaan-gejala yang ditahan, kosinus murni menemukan perbaikan PR yang tepat dalam 38% kasus (terkadang perbaikan berbagi kosakata dengan gejala), sedangkan penelusuran grafik kausal mencapai 87%. Selisih 49 poin — itulah kontribusi grafik di atas kesamaan kata. Skrip pengukuran ada di repositori, angkanya dapat direproduksi dengan perintah.

    Apa yang secara konsisten menghalangi — setiap saat, bukan sekali saja

    Pertama, agen tidak memanggil memori sendiri: tanpa hook paksa, recall tidak dipanggil secara sistematis, setiap sesi. Memori yang harus «tidak lupa ditanyakan» tidak berfungsi — yang harus bertanya adalah pemicu deterministik, bukan niat baik agen. Kedua, ambang batas absolut berdasarkan kosinus tidak dapat ditransfer ke mana pun: sintetis → nyata, kemarin → hari ini, satu model → model lain, korpus luas → sempit (pada korpus demo satu domain, di mana «semuanya mirip», kosinus hampir tidak bisa membedakan). Pengobatannya selalu sama: rangking top-k, jangan menebak ambang batas.

    Hukum «sinyal sering menenggelamkan yang jarang namun berharga»

    Satu hukum yang menjelaskan setengah dari masalah kami: sinyal yang sering dan padat menenggelamkan yang jarang namun berharga. Ini muncul di tiga tempat umum: popularitas global node menenggelamkan fakta langka yang tepat — dan menggagalkan keempat cara untuk mencampurnya ke dalam peringkat (jumlah tertimbang, gerbang, RRF, PPR); node-hub mengubur fakta spesifik dalam peringkat kosinus, dan sebaliknya; tepi auto-similar_to yang padat meredam tepi kausal caused_by yang jarang — oleh karena itu recall kausal harus dipisahkan ke mode terisolasi tersendiri. Ketika Anda melihat ini sebagai satu hukum, pengobatannya jelas: yang jarang namun berharga tidak boleh dicampur dengan yang sering namun umum — ambil dengan mekanisme terpisah (penelusuran terisolasi, peringkat sadar-graf), jangan berharap ia muncul sendiri di top-k umum. Hukum yang sama juga mendasari sinyal kepentingan kami: yang berharga bukanlah yang populer, melainkan apa yang diperbaiki manusia berulang kali.

    Pertanyaan yang Sering Diajukan

    Apa itu vecmory?

    Vecmory adalah sistem memori semantik untuk agen AI, berdasarkan pencarian vektor dan grafik kausal-temporal. Ini memungkinkan agen mengingat fakta, mengingatnya berdasarkan makna, dan menghubungkan peristiwa untuk tidak mengulangi kesalahan masa lalu.

    Apa perbedaan vecmory dengan pencarian vektor biasa?

    Pencarian vektor menemukan catatan yang mirip secara makna, tetapi tidak mempertimbangkan hubungan kausal. Vecmory menambahkan memori grafik: selain kedekatan kosinus, ia menelusuri tepi «sebab-akibat» dan «urutan temporal», yang memungkinkan menemukan fakta yang tidak hanya mirip, tetapi relevan secara konteks — misalnya, eksperimen yang gagal sebelumnya.

    Mengapa Anda menghapus kepentingan node dari peringkat?

    Bagaimana Anda mengevaluasi kualitas memori?

    Pengukuran menunjukkan bahwa penambahan popularitas global (derajat masuk) menurunkan MRR dari 0,81 menjadi 0,41 pada kueri titik. Topik langka yang akurat tenggelam di bawah massa yang populer namun tidak relevan. Untuk kasus utama (recall tepat), cosinus murni ternyata lebih baik.

    Bagaimana Anda mengevaluasi kualitas memori?

    Kami menggunakan data nyata: repositori GitHub dengan 4299 tiket, di mana pasangan issue→PR diekstrak berdasarkan pola Closes #N. Pada 300 kueri-gejala, recall berbasis graf memberikan akurasi 87% dibandingkan 38% pada cosinus murni. Semua skrip terbuka dan dapat direproduksi.

    Kesimpulan

    Kedua cerita ini tentang satu hal: buang mantra “memori membantu agen” dan sadarlah: ini dua log di mana memori justru bekerja melawan kita sendiri — melawan optimisme kita dan fitur kita sendiri. Agen dengan memori berbeda dari agen tanpa memori bukan karena ia tahu lebih banyak, tetapi karena ia bisa menangkap dirinya sendiri pada “bingo!” sesaat sebelum laporan yang licik — karena sebelumnya sudah terjadi dan sudah gagal. Dan karena ia siap membuang fiturnya sendiri ketika fakta menunjukkan bahwa fitur itu lebih buruk. Ini adalah artikel pertama dari tiga artikel. Selanjutnya: “Mengapa kami tidak menulis Bad CaRMa lagi” — tentang bagaimana model data hiper-universal biasanya berubah menjadi bencana, dan apa yang kami lakukan agar model kami tidak berubah. Dan “Membangun ANN dengan tangan — kapan itu sepadan, dan kapan tidak” — analisis terbuka, mengapa kami menulis HNSW sendiri dan dalam kasus apa jawaban yang benar adalah “ambil pgvector dan jangan sok pintar”. Jika Anda ingin agen Anda berhenti menginjak penggaruk yang sama, coba vecmory: mulailah dengan dokumentasi kami atau fork repositori. Memori yang keberatan — satu-satunya yang layak dipercaya.