Memora knowledge-rag Vector Search AI Agent Memory bge-m3

🔍 Bottom Line First
I applied Microsoft Research’s long-term memory framework Memora — published at ICML 2026 — directly to our own agent memory system knowledge-rag to validate its headline claim: that embedding only a short 6–8-word abstraction handle improves retrieval accuracy while dramatically reducing token usage. The results were not what I expected. The handle-only variant (C) ranked last across all metrics among the four variants tested, and only the C+ variant combining cue-anchor multi-vector slightly outperformed our current system.
Rather than making a deployment decision based on benchmark numbers alone, I ran validation on our own data and am sharing the full process and results here.
A long-term agent memory framework published by Microsoft Research at ICML 2026. Title: “A Harmonic Memory Representation Balancing Abstraction and Specificity”. All 9 authors are from Microsoft, submitted 2026-02-03. MIT License, open-sourced at github.com/microsoft/Memora.
📋 What Memora Claims
Memora separates each memory entry into three components: Primary Abstraction (a 6–8-word handle, embedded as the retrieval index key), Memory Value (the original rich content, stored without embedding), and Cue Anchors (entity/keyword tags providing multiple access paths). New information is merged into existing entries (consolidation) to prevent fragmentation, and retrieval uses policy-guided iterative search rather than static top-k. The paper claims that “standard RAG and KG-based memory systems are special cases of the Memora framework.”
The published benchmark numbers are impressive. LoCoMo 86.3% (600-turn long-term conversation evaluation, human ceiling ~87.9%), LongMemEval 87.4% (500 curated queries across 5 long-term memory capabilities), and up to ~98% token reduction versus full-context inference (lab measurement). The Microsoft Research official blog announced this on June 29, 2026, and the GitHub repository had 90 Stars as of 2026-07-02.
🏗️ Comparison with Our knowledge-rag
Our knowledge-rag uses a 2-layer architecture. The lower layer runs the open-source embedder bge-m3 (BAAI, 100+ languages, 1024 dimensions, dense+sparse+multi-vector support, cosine=dot product under L2 normalization) plus a reranker, with metadata in PostgreSQL and vectors in LanceDB (open-source embedded multimodal vector DB, Lance columnar format, hybrid search support). The upper layer is a human-curated SOP document layer.
The conversational memory layer includes importance scoring, decay, pin, conflict resolution, cosine≥0.7 auto-linking memory-graph, and nightly dreaming consolidation. The key architectural point: we already embed LLM-extracted self-contained fact sentences (fact.text) rather than the full original text, and store the original (original_content) in PostgreSQL and LanceDB without embedding. This structurally overlaps with Memora’s abstraction/value separation. The critical difference was the absence of multiple access paths like Cue Anchors. The question was therefore straightforward: “Does the shorter-handle Memora approach give us additional gains over our extracted fact embedding?”
| Dimension | knowledge-rag (current) | Memora |
|---|---|---|
| Embedding target | LLM-extracted fact.text |
6–8-word handle |
| Original storage | PostgreSQL + LanceDB (non-embedded) | Memory Value field (non-embedded) |
| Multiple access paths | Single vector | Cue Anchors (multiple) |
| Importance scoring | ✅ decay / pin / importance | ❌ |
| Consolidation | ✅ nightly dreaming | ✅ real-time merge |
| Memory graph | ✅ cosine≥0.7 auto-link | ❌ |
| Conflict resolution | ✅ importance≥0.5 threshold | ❌ |
| Maturity | Running in production daily | Research stage |
🧪 PoC Design
The live DB was not touched at all — existing data was used read-only throughout. No production changes were made.
- Sample: 50 items from the memory bank (primarily compound entries mixing multiple facts)
- Queries: 100 anti-circular indirect queries — generated from original content only, designed to prevent any variant from gaining a lexical home-field advantage
- Handle/cue anchor generation: Open LLM qwen3.6-35B-A3B running on local DGX Spark (
192.168.0.123:8082) - Embedder: bge-m3 (mlx, L2 normalization → cosine=dot product)
- Evaluation metrics: Recall@1 / @3 / @5 / MRR (higher is better)
The four variants compared are as follows.

📊 Results
Below are the Recall@1/3/5 and MRR comparison results for the four variants. Results outside of C+ (handle + cue multi-vector) did not meet expectations.
| Variant | R@1 | R@3 | R@5 | MRR |
|---|---|---|---|---|
| A — Original embedding | 0.06 | 0.23 | 0.40 | 0.220 |
| B — Extracted fact (current) | 0.08 | 0.22 | 0.27 | 0.196 |
| C — Handle only | 0.06 | 0.17 | 0.23 | 0.170 |
| C+ — Handle + cue, max-sim | 0.09 | 0.26 | 0.42 | 0.255 |
At the individual query level, the differences become even more pronounced. The table below shows the retrieval rank of the correct item per indirect query type (lower rank = better, out of 50 total items).
| Indirect Query Type | A | B | C | C+ |
|---|---|---|---|---|
| Query asking about config file paths and DB size for a specific instance | 1 | 33 | 48 | 1 |
llama.cpp build b8946 vs b9006 parameter support difference |
23 | 19 | 27 | 6 |
| Query asking about Qwen3.6 Thinking Mode sampling configuration | 20 | 2 | 10 | 1 |
The most notable data point in this experiment: C dropped to rank 48 on the first query.

🔬 Interpretation
Let me start with why C (handle only) ranked last across all metrics. Our memory contains many short, specialized technical identifiers — file paths, version numbers, parameter names, build hashes. Replacing this information with a 6–8-word abstraction handle causes excessive loss of lexical surface. The core issue is the domain mismatch: Memora’s benchmarks (LoCoMo is a 600-turn everyday conversation evaluation, LongMemEval focuses on natural language questions) differ substantially from our domain characteristics.
Why C+ outperformed the current B has nothing to do with shorter handles. The gain comes from multiple access paths and max-sim retrieval. Indexing entities and keywords as separate vectors and taking the most similar vector at query time is what delivered the improvement. This also partially validates the paper’s claim that “standard RAG and KG-based memory are special cases of Memora.”
That said, the limitations must be stated clearly. The R@1 difference for C+ amounts to just 1 query, and a sample size of n=50/100 is insufficient for a decision-grade conclusion. Production changes are on hold at this point.
There is also a secondary finding. Original embedding (A) outperformed extracted fact (B) on R@3/R@5/MRR. This signals that the recall gains from the fact-extraction stage may be smaller than expected. However, the anti-circular design itself may have favored the lexically richer original content, so a separate evaluation design is needed before drawing conclusions.
📚 References
- Memora paper (arXiv:2602.03315, ICML 2026) — Microsoft Research, submitted 2026-02-03
- Memora GitHub (MIT License) — Python 3.10+, 90 Stars (as of 2026-07-02)
- Microsoft Research official blog — published 2026-06-29
- LoCoMo benchmark score overview — EmergentMind
- LongMemEval paper (arXiv:2410.10813) — 500 curated questions, 5 long-term memory capabilities
- AI Memory Benchmark 2026 Comparison — mem0.ai
- Memora real-world deployment analysis — InfoWorld
- bge-m3 — BAAI, HuggingFace
- LanceDB official site
✅ Conclusion
Three takeaways. First, Memora’s abstraction handle (C) is a regression in our system. We will not adopt it. Our memory domain (many short technical identifiers) differs fundamentally from the domain where Memora was validated (natural language conversation-centric). Second, the transferable idea is cue-anchor multi-vector indexing. The key was not shorter handles but multiple access paths + max-sim. Third, C+ requires a decision-grade re-experiment with a larger n and real recall queries. There is a signal, but the data is insufficient for a conclusion.
The real value of this experiment is not whether Memora is the right answer. It lies in the empirical confirmation that when we validated a high-profile paper on our own data, the headline was a regression — and only the peripheral idea showed a modest gain, still at the signal level. For other design approaches to AI agent memory architecture, see the Tech category at ai-girls.org. The takeaway: do not make decisions based on benchmark numbers alone.