Lewati ke konten

Memori dan pengetahuan

Tanpa memori, setiap percakapan agen dimulai dari nol: konvensi yang sama harus dijelaskan ulang, keputusan yang sama diperdebatkan ulang, jalan buntu yang sama ditelusuri ulang. Memori adalah penyimpanan bercakupan ruang kerja yang bertahan lintas eksekusi, dan keberadaannya membuat pengetahuan yang dihasilkan satu agen dapat ditemukan agen lain di kemudian hari.

Memori memiliki tiga lapisan dan ketiganya menjawab pertanyaan yang berbeda:

  1. Fakta — apa yang benar (sebuah konvensi, sebuah hasil, sebuah keputusan).
  2. Kebijakan — apa yang harus dilakukan agen tentangnya (aturan normatif).
  3. Memori kerja — apa yang sedang setengah jalan dikerjakan satu agen.

Perbedaan ini penting karena ketiganya mencapai agen melalui jalur yang berbeda. Fakta dicari. Kebijakan didorong. Memori kerja bersifat privat.

MemoryFact adalah unit pengetahuan yang bercakupan ruang kerja dan domain.

Atribut Isinya
domain Domain pengetahuan (“conventions”, “decisions”, “codebase”)
topic Label topik yang singkat
content Teks pengetahuannya
confidence 0,0–1,0, diinisialisasi dari asal-usul dan dinaikkan saat disebut ulang
memoryType Jenis fakta — menentukan kurva peluruhan temporalnya
veracity Bagaimana fakta itu diketahui — menginisialisasi keyakinan dan menentukan besaran setiap kenaikan saat disebut ulang
sourceObservationIds Observasi mana yang menghasilkannya
supersededBy Fakta yang lebih baru yang menggantikannya, jika ada
validUntil, recallCount, mentionCount Sinyal kedaluwarsa dan pemakaian yang dipakai saat recall

Dua baris terakhir adalah yang sering terlewat, dan justru keduanya yang menentukan fakta mana yang muncul. memoryType membawa parameter peluruhan Weibull per jenis, sehingga komitmen berbatas waktu cepat memudar sementara fakta profil yang stabil tidak. veracity mencatat asal-usul — dinyatakan oleh manusia (bobot 1,0), disimpulkan oleh agen (0,7), dihasilkan oleh alat (0,5), diimpor (0,6) — dan bobot itu menginisialisasi keyakinan awal fakta.

Fakta tidak pernah disunting di tempat saat dibantah. Menulis fakta menjalankan deteksi konflik terhadap fakta berdomain dan bertopik sama, lalu menggantikan yang kalah dan mencatat satu baris konflik. Jejak auditnya itulah intinya: Anda selalu dapat melihat apa yang dahulu diyakini dan apa yang menggantikannya.

MemoryPolicy adalah aturan normatif yang diturunkan dari fakta, bercakupan ruang kerja dan domain, dengan penanda aktif dan requiredRole opsional.

Setiap kebijakan aktif di ruang kerja disuntikkan ke setiap pengiriman, tanpa penyaringan — tidak ada penyaringan menurut domain, peran, tugas, atau space. Ini perlu diketahui sebelum Anda menulis kebijakan kedua puluh, karena kebijakan bersaing memperebutkan jendela konteks yang sama dengan tugasnya. Itulah pula sebabnya requiredRole pada sebuah kebijakan hanya bersifat saran: ia menjelaskan kepada siapa aturan itu ditujukan, bukan menghalangi aturan itu sampai ke semua orang lain.

MemoryDomain mengelompokkan fakta dan kebijakan di dalam sebuah ruang kerja. Domain memberi pengetahuan struktur organisasional dan domain adalah unit yang menjadi acuan penulisan pemberian akses — tetapi perhatikan peringatan di bawah sebelum memperlakukan domain sebagai batas kerahasiaan.

Sebuah domain bersifat seluruh ruang kerja (architecture) atau dibatasi ke satu repositori (repo:<slug>/architecture). Nama yang sama pada kedua cakupan adalah dua penyimpanan yang independen: fakta yang benar untuk satu basis kode tidak menimpa fakta seluruh ruang kerja. search_memory dan preambul pengiriman mengurutkan memori bercakupan repo lebih dahulu saat agen bekerja di repo itu; keduanya tidak menyaring sisanya keluar. Berikan repo pada propose_fact / propose_policy / search_memory untuk menulis atau memperkuat cakupan tersebut.

Kontrol akses bersifat fail-open untuk pembacaan

Bagian berjudul “Kontrol akses bersifat fail-open untuk pembacaan”

MemoryAccessGrant memetakan peran agen dan sebuah domain ke salah satu dari tiga tingkat izin:

Izin Artinya
none Tidak ada akses
read Dapat mencari dan mengambil fakta
write Diperlukan oleh propose_policy. Penulisan fakta (propose_fact, supersede_fact) tidak digerbangi pemberian akses

Asimetri ini — longgar untuk pembacaan, ketat untuk penulisan kebijakan — adalah pertukaran yang disengaja. Memori paling berguna saat beredar, dan penolakan pembacaan menghasilkan agen yang diam-diam tahu lebih sedikit, bukan agen yang melaporkan masalah. Sebaliknya, penolakan penulisan kebijakan bersifat nyaring dan dapat diperbaiki, jadi di situlah penegakannya berada. Domain yang baru dibuat menginisialisasi write untuk setiap peran; memperketatnya setelah itu hanyalah penyuntingan lewat RPC, karena tidak ada UI untuk pemberian akses.

Setiap agen memiliki AgentWorkingMemory: buku catatan teks bebas yang dikunci menurut ruang kerja dan agen. Catatan ini bertahan lintas eksekusi, bersifat privat untuk agen tersebut, dan disuntikkan ke prompt-nya pada setiap pengiriman. Di sinilah “saya sudah setengah jalan merefaktor auth” hidup — keadaan yang layak dibawa ke eksekusi berikutnya tetapi tidak layak diangkat menjadi fakta permanen.

Saat pengiriman, preambul memori disusun dari tepat tiga hal:

  • Setiap kebijakan ruang kerja yang aktif, sebagai baris - [domain] rule.
  • Memori kerja agen itu sendiri, apa adanya.
  • Daftar pendek fakta yang cocok secara kata kunci untuk tugas ini — paling banyak lima, dalam anggaran ~1.200 karakter dan hanya ketika deskripsi tugas panjangnya minimal 20 karakter. Tugas yang lebih pendek tidak mendapat fakta sama sekali.

Daftar pendek itu hanya berbasis FTS/kata kunci dan memang dibatasi dengan sengaja. Membuat embedding untuk sebuah kueri itu lambat dan jalur pengiriman adalah satu-satunya tempat latensi langsung terlihat, jadi jalur semantik yang lambat sengaja dijauhkan dari sana. Preambul ditutup dengan meminta agen memverifikasi butir-butir yang menopang keputusan dengan search_memory, tempat model recall selengkapnya berada.

Tidak ada pemberian akses yang diperiksa di jalur ini. Apa pun yang ditemukan daftar pendek itulah yang dilihat agen.

Alat search_memory yang dihadapkan ke agen memiliki tiga mode dan ketiganya benar-benar pencarian yang berbeda:

  • keyword — hanya FTS5.
  • semantic — hasil BM25 dan vektor digabungkan dengan reciprocal rank fusion.
  • hybrid (bawaan) — recall polifonik: empat suara berperingkat yang digabungkan, lalu didiversifikasi.

Keempat suara itu adalah leksikal (FTS), semantik (KNN vektor), temporal (fakta aktif yang terbaru), dan graf — penelusuran dua hop atas edge episodik dari benih leksikal dan semantik terkuat. Suara graf adalah alasan edge episodik ada sejak awal: ia memunculkan fakta yang terhubung dengan jawaban Anda tanpa cocok dengan satu kata pun dari Anda. Setiap suara diberi bobot berdasarkan intent kueri yang diklasifikasikan (semantik paling berbobot secara bawaan, lalu graf dan leksikal, lalu kebaruan), skor setiap kandidat diskalakan oleh peluruhan Weibull-nya, dan himpunan hasilnya didiversifikasi dengan MMR sehingga lima pernyataan ulang satu fakta tidak menyingkirkan empat fakta yang berbeda.

Pencarian memori di desktop dan web adalah jalur terpisah yang lebih sederhana: operasi RPC memory_fact.search hanya FTS5, karena klien tipis tidak dapat mengirimkan embedding kueri dan jalur hybrid tetap internal di host. Jadi peringkat yang Anda lihat di peramban memori bukan peringkat yang diterima agen dari search_memory. Itu memang diharapkan, bukan bug, tetapi artinya “saya sudah mencari dan tidak menemukannya” di UI bukan bukti bahwa agen tidak akan menemukannya.

Di mana memori berada dan siapa yang menulisnya

Bagian berjudul “Di mana memori berada dan siapa yang menulisnya”

Peramban memori berada di Pengaturan → Ruang kerja → Memori (/workspaces/<id>/settings/memory), dengan tab Fakta, Kebijakan, dan Graf.

Ada asimetri di sana yang mengejutkan banyak orang: Anda dapat menyunting dan menghapus memori, tetapi tidak dapat membuatnya. Baik tab Fakta maupun tab Kebijakan tidak memiliki kontrol untuk menambah. Penulisan dilakukan di sisi agen, melalui propose_fact dan propose_policy (supersede_fact / supersede_policy untuk menggantikannya). remember menulis butir tier panas yang dibatasi sesi yang nantinya mungkin diangkat consolidate_memory menjadi fakta; record_observation dan update_my_notes menulis buku catatan privat yang disuntikkan saat pengiriman. Peramban ini adalah permukaan untuk meninjau dan mengoreksi, bukan untuk menulis — jadi jika Anda ingin sebuah fakta masuk ke memori, cara menaruhnya di sana adalah dengan memberi tahu agen.

Dua operasi pemeliharaan juga dipanggil oleh agen, bukan dijadwalkan: consolidate_memory menggabungkan dan memangkas fakta yang menumpuk dan harmonize_memory merekonsiliasi keyakinan yang menyimpang antar-agen. list_memory_conflicts menampilkan apa yang sudah dicatat deteksi konflik. Tidak ada yang menjalankannya untuk Anda dengan pengatur waktu. Keputusan rapat dipanen ke domain decisions ketika langkah persist rapat mencatatnya; itu bukan pengatur waktu pada eksekusi agen yang selesai.