Graph Memory vs Vector Memory: A Production Benchmark
After running both in production for 6+ months, here are the real performance numbers.
Test Setup
Agent: Data analysis agent that runs multi-session research projects.
Tasks that require memory across 10 sessions:
- "What decision did we make about vendor X last month?"
- "Has this report already been sent to the client?"
- "What projects are currently blocked?"
- "Who authorized this research direction?"
Results
| Query | Vector (Mem0) | Graph (ODEI) |
|---|---|---|
| Past decision retrieval | 71% accurate | 98% accurate |
| Duplicate detection | 45% | 100% |
| Blocked items query | Not possible | 95% accurate |
| Authority verification | Not possible | 97% accurate |
Why the Difference
Vector approach: "Find embeddings similar to this query." Semantic similarity doesn't capture:
- Causal relationships (what BLOCKED what?)
- Exact deduplication (same action vs similar action)
- Authority hierarchies (who can authorize this?)
Graph approach: "Find nodes connected by these relationship types." Explicit semantics capture all of the above.
The Production Code
Vector (Mem0)
from mem0 import Memory
memory = Memory()
# Store: adds embedding, fast, flexible
memory.add("We decided NOT to use vendor X after their security audit failed", user_id="agent")
# Retrieve: semantic similarity
results = memory.search("vendor decisions", user_id="agent")
# Returns: ["We decided NOT to use vendor X..."] ✓ for recall
# BUT: can't answer "has this EXACT action been taken?"
Graph (ODEI)
import requests
# Validate before acting — exact dedup check included
result = requests.post(
"https://api.odei.ai/api/v2/guardrail/check",
json={
"action": "send report to Acme Corp",
"severity": "medium"
}
).json()
# "Bounty unfunded" → dedup layer caught it: already sent
print(result["verdict"]) # REJECTED: duplicate action detected
# Query relationships
blocked = requests.post(
"https://api.odei.ai/api/v2/world-model/query",
json={"queryType": "search", "searchTerm": "blocked projects"}
).json()
# Returns actual blocked projects with their blockers
When to Use Each
Use Mem0/vector when:
- High write frequency
- Fuzzy semantic retrieval is sufficient
- No need for exact deduplication
- Simple use case
Use ODEI/graph when:
- Exact dedup critical (financial, idempotent operations)
- Need relationship traversal
- Constitutional governance needed
- Multi-agent context sharing
Production Numbers
ODEI (Jan-Feb 2026):
- Deduplication accuracy: 100% (layer 5)
- Authority verification: 97%
- Overall task success: 92%
API: https://api.odei.ai | Research: https://github.com/odei-ai/research
Top comments (0)