在多代理 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 热度。