Kegagalan paling umum dalam deployment agen AI bukan kecerdasan — ini amnesia. Agen yang tidak dapat mengingat apa yang dilakukannya kemarin, apa preferensi pengguna, atau apa yang terjadi dalam percakapan terakhir pada dasarnya terbatas. Memori adalah yang membedakan chatbot stateless dari agen yang benar-benar semakin pintar tentang konteks spesifik Anda seiring waktu. Saya telah membangun sistem memori untuk beberapa integrasi AI di Commsult Indonesia, dan pilihan pola yang Anda buat sejak awal memiliki implikasi arsitektural yang signifikan.
Memori agen AI terbagi dalam empat kategori berdasarkan cakupan dan persistensi. Memori in-context (riwayat percakapan yang disuntikkan ke prompt) paling sederhana tetapi dibatasi oleh ukuran jendela konteks dan menghabiskan token di setiap panggilan. Memori semantik eksternal (database vektor seperti Pinecone, pgvector, atau Chroma) memungkinkan pengingatan jangka panjang berdasarkan kemiripan semantik. Memori episodik terstruktur (database tradisional yang menyimpan fakta, preferensi, peristiwa) memberi Anda riwayat yang dapat dikueri dan diaudit. Memori prosedural (keterampilan yang dipelajari atau alat yang dapat dibuat dan disimpan agen) adalah pola paling canggih.
Untuk sebagian besar aplikasi, mulailah dengan pemangkasan riwayat percakapan. Pertahankan N putaran terakhir dalam konteks, ringkas konten yang lebih lama menggunakan panggilan model ringan, dan suntikkan ringkasan di bagian atas. Ini berfungsi dengan baik untuk agen sesi tunggal dan tidak memerlukan infrastruktur eksternal. Tantangannya adalah biaya: setiap token dalam riwayat menghabiskan biaya di setiap panggilan API.
┌─────────────────────────────────────────────────────────────┐
│ AI Agent Memory Architecture │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Context Assembly Pipeline (runs on every message) │ │
│ │ │ │
│ │ 1. User Profile (structured DB) │ │
│ │ └─ preferences, role, tenant_id │ │
│ │ │ │
│ │ 2. Semantic Memory (pgvector) │ │
│ │ └─ top-3 relevant past interactions │ │
│ │ │ │
│ │ 3. Recent History (sliding window) │ │
│ │ └─ last 8 conversation turns verbatim │ │
│ │ │ │
│ │ 4. Current Message │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ LLM (with full context) │
│ │ │
│ ▼ │
│ Memory Write Tools: store_fact, update_preference │
└─────────────────────────────────────────────────────────────┘Dari pengalaman saya: implementasikan strategi konteks dua tingkat. Pertahankan 5-10 putaran terakhir secara verbatim (untuk koherensi konteks langsung) dan pertahankan ringkasan terstruktur untuk riwayat yang lebih lama. Ringkasan harus menyimpan fakta, bukan dialog — 'Pengguna mengelola 3 gudang inventaris di Jakarta dan lebih suka satuan metrik' lebih efisien token daripada mereproduksi percakapan di mana hal itu ditetapkan.
Database vektor menyimpan embedding teks dan memungkinkan pengambilan berdasarkan kemiripan semantik — agen dapat mengingat interaksi masa lalu yang relevan meskipun menggunakan kata-kata yang berbeda. Untuk produksi, saya menggunakan PostgreSQL dengan ekstensi pgvector daripada layanan database vektor terpisah. Ini menyederhanakan stack secara signifikan: satu database untuk data terstruktur dan embedding vektor.
Pola yang saya gunakan: pada setiap interaksi agen, embed pesan pengguna dan simpan bersama metadata (user ID, session ID, timestamp, entitas yang diekstrak). Di awal setiap sesi baru, ambil top-K interaksi masa lalu yang paling relevan menggunakan cosine similarity pada embedding. Suntikkan ini sebagai blok 'riwayat relevan' dalam system prompt.
-- pgvector setup
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE agent_memories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
session_id UUID,
domain TEXT NOT NULL DEFAULT 'general',
content TEXT NOT NULL,
embedding vector(1536), -- OpenAI ada-002 dimensions
metadata JSONB,
created_at TIMESTAMPTZ DEFAULT NOW(),
expires_at TIMESTAMPTZ -- optional TTL
);
-- Index for fast similarity search with metadata filter
CREATE INDEX idx_memories_embedding
ON agent_memories USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
CREATE INDEX idx_memories_user_domain
ON agent_memories (user_id, domain);
-- Retrieve top-K relevant memories
SELECT content, metadata,
1 - (embedding <=> $1::vector) AS similarity
FROM agent_memories
WHERE user_id = $2
AND domain = $3
AND (expires_at IS NULL OR expires_at > NOW())
ORDER BY embedding <=> $1::vector
LIMIT 3;Untuk fakta yang perlu diandalkan dan dapat dikueri — preferensi pengguna, tugas yang diselesaikan, keputusan yang dibuat — gunakan database terstruktur daripada vector store. Definisikan skema untuk apa yang perlu diingat agen: tabel preferensi pengguna (key-value), tabel riwayat tugas (tugas, hasil, timestamp), registri entitas (nama, ID, hubungan yang disebutkan pengguna).
Pengingatan kesamaan vektor memiliki masalah presisi: jika model embedding Anda tidak disesuaikan untuk domain Anda, ia akan mengambil memori yang mirip secara semantik tetapi tidak relevan secara kontekstual. Saya memiliki agen untuk sistem HR ERP yang terus mengambil percakapan persetujuan cuti ketika pengguna bertanya tentang inventaris — karena 'persetujuan' memiliki tumpang tindih semantik tinggi. Perbaikannya adalah menambahkan filter metadata (user_id + domain tag) sebagai pre-filter sebelum pencarian kesamaan vektor.
Arsitektur yang saya gunakan untuk agen produksi menggabungkan semua tiga pola: PostgreSQL dengan pgvector untuk fakta terstruktur dan embedding semantik, manajer konteks sliding window yang merakit prompt dari beberapa tingkat memori, dan alat tulis memori eksplisit yang dapat dipanggil agen untuk menyimpan informasi penting.
Keracunan memori adalah risiko nyata: jika agen menyimpan informasi yang salah, memori buruk tersebut bertahan dan mempengaruhi perilaku masa depan. Mitigasi: tambahkan skor kepercayaan ke fakta yang disimpan, implementasikan alat koreksi memori yang dapat dipanggil pengguna, validasi ulang fakta tersimpan secara berkala terhadap sumber otoritatif, dan log semua penulisan memori untuk audit.