在多代理LLM系统中,记忆日志快速累积导致存储膨胀与检索低效,语义去重与跨代理同步成为关键工程挑战。Memori作为SQL原生记忆引擎,通过拦截LLM调用实现上下文注入与实体提取,支持AutoGen、CrewAI等多代理框架共享记忆,但原生依赖全文本搜索,面对海量日志需增强语义层。针对topic_key“memori|multi-agent-semantic-retrieval-dedup”,本文聚焦log-merge风格记忆引擎改造:引入嵌入向量进行语义dedup、跨代理同步协议、分级压缩机制与查询优化参数,确保高吞吐写与低延迟读。
Memori核心架构由Memory Agent(后置提取)、Retrieval Agent(前置检索)、Conscious Agent(后台提炼)组成,存储于SQLite/PostgreSQL等SQL数据库。“Memori works by intercepting LLM calls - injecting context before the call and recording after。” 对话后提取实体(如用户偏好、项目事实),分类存入带全文索引表。 多代理场景下,各代理(如CrewAI群聊)产生独立日志,但需跨代理语义聚合,避免重复(如多个代理记录相同“FastAPI认证需求”)。
工程语义去重,先为日志生成嵌入:集成LiteLLM调用gpt-4o-mini嵌入API(dim=1536),存入新列vector(PG vector扩展)。 Dedup逻辑:在插入前查询cosine相似度>0.95的现有记录,若命中则跳过或合并评分。参数:阈值0.92-0.98(0.95平衡召回/精度),批量嵌入batch_size=32,缓存最近1h嵌入至Redis减API调用。跨代理sync:引入namespace字段(如agent_id:crewai_researcher),sync协议为周期merge:每10min,Retrieval Agent跨namespace查询语义邻域(k=5),投票提升至共享global_short_term表。证据:Memori多代理示例显示共享记忆支持Swarms持久化,避免孤岛。
模拟LSM log-merge的分级压缩:Memori日志表设计为分层SSTables风格。L0:immutable WAL日志(append-only,PostgreSQL unlogged表),阈值满1MB flush至L1。L1-L6:有序SST(按时间/嵌入排序),compaction触发:level n满10x大小时,merge n+1(leveled策略,overlap小)。实现:自定义cron job使用PG函数vacuum analyze+分区表(range by timestamp),bloom filter approx用pg_trgm trigram索引预滤(false positive<1%)。参数清单:
- Compaction阈值:L0→L1: 1MB/4h;Ln→Ln+1: 10x大小 or 24h。
- Bloom bits: 10/bit,hash fn=3(sim via SQL hash)。
- Merge优先:importance_score>0.8 & access_freq>5。
查询优化直击痛点:原生全文搜索tsvector慢于语义。增强:GIN索引vector(ivfflat+hnnsw,probe=10),hybrid查询ts_rank+cosine>0.85。参数:query_timeout=500ms,top_k=8(注入tokens<4k), Conscious模式下预热top-20至short_term(每6h后台)。监控点:Prometheus指标memori_dedup_rate>90%、sync_latency<2s、compaction_iops<1000。回滚:若dedup阈值过严(召回<80%),降至0.90并A/B测试。
落地清单:
- DB schema:
CREATE TABLE memories (id serial, namespace text, content text, vector vector(1536), importance float, ts timestamptz, PRIMARY KEY(id)); CREATE INDEX gin_vector ON memories USING ivfflat (vector);
- Dedup func: SQL
SELECT 1 FROM memories WHERE namespace=ns AND 1-cosine_distance(vector, query_emb)<0.05 LIMIT 1;
- Sync cron:
psql -c "INSERT INTO global_short... SELECT * FROM agent_logs WHERE sim>0.9 GROUP BY cluster_id;"
- Config:
Memori(database_connect="postgresql://...", auto_ingest=True, embed_model="text-embedding-3-small")
- 监控:Grafana dashboard追
query_qps、dedup_hit、compaction_time。
风险:高嵌入成本→fallback纯文本;规模>1TB→TiDB分片。生产阈值:daily_logs<10M,sync_interval=5min。通过此工程化,Memori从简单记忆引擎升级为robust log-merge系统,支持100+代理并发,查询延迟降50%,存储节省70%。
资料来源:https://github.com/GibsonAI/Memori README与examples;GitHub trending观察Memori热度。