{"slug": "persistent-vectorized-agent-memory-sqlite-fts5-to-cloud-libsql", "title": "Persistent Vectorized Agent Memory: SQLite FTS5 to Cloud LibSQL", "summary": "A developer outlined a persistent agent-memory architecture that replaces LangChain wrappers and cloud vector databases with SQLite FTS5 plus the sqlite-vec extension, synced to Cloud LibSQL (Turso) for distributed replication. The design combines lexical FTS5 search with native vector indexes in a single engine to avoid dual-database latency and race conditions, and was tested on a single 2 vCPU, 4GB RAM VPS in AWS Frankfurt against the Base L2 sequencer and a Turso primary replica.", "body_md": "Sebagian besar arsitektur memori agen AI yang beredar saat ini dibangun di atas fondasi yang rapuh: tumpukan wrapper LangChain yang lambat dan klaster Pinecone seharga ratusan dolar per bulan untuk sekadar menyimpan beberapa ratus megabita state dialog. Untuk agen otonom on-chain—terutama yang mengeksekusi modal riil tanpa intervensi manusia—desain seperti ini tidak hanya boros, tapi rapuh secara operasional.\n\nMari kita bedah arsitektur yang lebih waras: transisi dari SQLite lokal dengan FTS5 (Full-Text Search) dan ekstensi vektor `sqlite-vec`, menuju sinkronisasi terdistribusi via Cloud LibSQL (Turso). \n\nAgen otonom kita berjalan di Base L2 (Chain ID 8453), mengendalikan hot wallet perbendaharaan: `0x92Aff59709b03b9373b8fA887D24953D60fAd919`. \n\nKetika agen harus memutuskan alokasi likuiditas pada DEX lokal (seperti Aerodrome) atau mengevaluasi sinyal harga setiap 12 detik (interval block di Base adalah 2 detik), agen butuh dua hal secara simultan:\n\nMenjalankan dua database terpisah (satu PostgreSQL, satu Vector DB cloud) memperkenalkan latensi jaringan ganda dan race condition. LibSQL memecahkan ini: mesin SQLite yang sama, mendukung query FTS5 untuk pencarian leksikal, vektor embedding native, dan replikasi cloud global via HTTP pipeline.\n\nKita menggabungkan indeks invers FTS5 standar SQLite dengan tabel vektor. Pendekatan hybrid search ini memberi penalti pada halusinasi embedding murni dengan cross-referencing token mentah.\n\n```\n-- Dijalankan pada LibSQL / Turso engine\nCREATE TABLE IF NOT EXISTS agent_memory (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    timestamp INTEGER NOT NULL,\n    tx_hash TEXT,\n    content TEXT NOT NULL,\n    embedding F32_BLOB(384) -- all-MiniLM-L6-v2 output\n);\n\n-- Indeks leksikal FTS5 untuk pencarian hash transaksi dan alamat EVM\nCREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(\n    content,\n    tx_hash UNINDEXED,\n    content='agent_memory',\n    content_rowid='id'\n);\n\n-- Indeks vektor native LibSQL\nCREATE INDEX IF NOT EXISTS idx_memory_vec ON agent_memory(libsql_vector_idx(embedding));\n```\n\nBerikut adalah implementasi Python minimal tanpa abstraksi berlebih. Script ini membaca event on-chain Base, menghasilkan embedding lokal, dan menulis state ke remote LibSQL cluster.\n\n``` python\nimport os\nimport json\nimport libsql_client\nfrom web3 import Web3\n\n# Konfigurasi RPC Base Mainnet\nBASE_RPC_URL = \"https://mainnet.base.org\"\nAGENT_WALLET = \"0x92Aff59709b03b9373b8fA887D24953D60fAd919\"\nCHAIN_ID = 8453\n\nw3 = Web3(Web3.HTTPProvider(BASE_RPC_URL))\nassert w3.eth.chain_id == CHAIN_ID, \"Invalid Chain ID\"\n\n# Koneksi LibSQL (Edge / Cloud)\nclient = libsql_client.create_client_sync(\n    url=os.getenv(\"TURSO_DATABASE_URL\"),\n    auth_token=os.getenv(\"TURSO_AUTH_TOKEN\")\n)\n\ndef record_execution(tx_hash: str, raw_decision: str, embedding: list[float]):\n    # Pastikan state on-chain sinkron dengan memori lokal\n    receipt = w3.eth.get_transaction_receipt(tx_hash)\n    status_str = \"SUCCESS\" if receipt.status == 1 else \"REVERTED\"\n\n    payload = f\"tx:{tx_hash} | status:{status_str} | rationale:{raw_decision}\"\n    vec_blob = json.dumps(embedding)\n\n    client.execute(\n        \"\"\"\n        INSERT INTO agent_memory (timestamp, tx_hash, content, embedding)\n        VALUES (unixepoch(), ?, ?, vector32(?))\n        \"\"\",\n        [tx_hash, payload, vec_blob]\n    )\n\ndef recall_relevant_context(query_vec: list[float], keyword: str, limit: int = 5):\n    # Hybrid query: Gabungan leksikal FTS5 dan cosine similarity\n    query = \"\"\"\n    SELECT m.tx_hash, m.content, vector_distance_cos(m.embedding, vector32(?)) as dist\n    FROM agent_memory m\n    JOIN memory_fts f ON m.id = f.rowid\n    WHERE memory_fts MATCH ?\n    ORDER BY dist ASC\n    LIMIT ?;\n    \"\"\"\n    res = client.execute(query, [json.dumps(query_vec), keyword, limit])\n    return res.rows\n```\n\nKami menguji arsitektur ini pada VPS tunggal (2 vCPU, 4GB RAM) di region AWS Frankfurt yang berkomunikasi dengan Base sequencer dan Turso primary replica:\n\nBandingkan angka tersebut dengan klaster vector database komersial terpisah, di mana latensi jaringan ganda rata-rata memakan waktu 85ms hingga 140ms hanya untuk layer data. Ketika sequencer Base mengonfirmasi transaksi dalam hitungan detik, membuang ratusan milidetik pada layer database adalah bentuk kegagalan teknis.\n\nSederhanakan sistem Anda. Agen on-chain tidak\n\n`0x92Aff59709b03b9373b8fA887D24953D60fAd919`", "url": "https://wpnews.pro/news/persistent-vectorized-agent-memory-sqlite-fts5-to-cloud-libsql", "canonical_source": "https://dev.to/nindhita/persistent-vectorized-agent-memory-sqlite-fts5-to-cloud-libsql-1f42", "published_at": "2026-10-29 18:00:46+00:00", "updated_at": "2026-10-29 18:19:34.667305+00:00", "lang": "en", "topics": ["ai-agents", "ai-infrastructure", "mlops", "ai-tools", "developer-tools"], "entities": ["SQLite", "LibSQL", "Turso", "Base", "Aerodrome", "AWS", "LangChain", "Pinecone"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/persistent-vectorized-agent-memory-sqlite-fts5-to-cloud-libsql", "markdown": "https://wpnews.pro/news/persistent-vectorized-agent-memory-sqlite-fts5-to-cloud-libsql.md", "text": "https://wpnews.pro/news/persistent-vectorized-agent-memory-sqlite-fts5-to-cloud-libsql.txt", "jsonld": "https://wpnews.pro/news/persistent-vectorized-agent-memory-sqlite-fts5-to-cloud-libsql.jsonld"}}