Unified Consumer Memory Platform for Personalization at Scale
doordash · E-commerce · 2026 · source Agentic: no · promotional bias: med · summary-only (no fetched source) · extracted with prompt 0.5.6 (schema v2)
Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.
Problem
Domain: Consumer memory for marketplace personalization
DoorDash needed a shared semantic consumer memory that could serve both traditional ML ranking and LLM-driven experiences across a multi-vertical marketplace, because engagement models and opaque embeddings could not express interpretable preferences.
Constraints:
- DoorDash spans restaurants, groceries, convenience stores, and retail.
- Traditional collaborative filtering misses semantic cross-category preferences.
- Dense vectors are useful but not inspectable or language-native for LLMs.
- Every personalization surface should not independently re-extract consumer understanding.
- The platform needed versioning, manifests, lineage, A/B testing, and rollbacks.
Architecture
DoorDash built a unified consumer memory platform that converts behavioral signals into versioned natural-language memory blocks with LLMs, then encodes those blocks as dense embeddings and a heterogeneous context graph. The platform supports daily/weekly batch cadences, manifests, lineage, and downstream use by ranking/retrieval models and LLM-driven personalization experiences.
Diagram confidence: reconstructed (reconstructed from prose).
flowchart LR behavioral_signal_stream["Behavioral signal stream"] --> llm_semantic_extraction["LLM semantic extraction"] llm_semantic_extraction --> versioned_memory_blocks["Versioned memory blocks"] versioned_memory_blocks --> dense_embedding_encoder["Dense embedding encoder"] versioned_memory_blocks --> heterogeneous_context_graph["Heterogeneous context graph"] versioned_memory_blocks --> memory_manifests["Memory manifests"] dense_embedding_encoder --> ml_ranking_models["ML ranking models"] heterogeneous_context_graph --> ml_ranking_models heterogeneous_context_graph --> llm_personalization_experiences["LLM personalization experiences"] memory_manifests --> ml_ranking_models memory_manifests --> llm_personalization_experiences
Components
| Component | Role | Interacts with |
|---|---|---|
Behavioral signal stream |
Provides orders, searches, browsing, support interactions, and explicit preferences. | LLM semantic extraction |
LLM semantic extraction |
Converts raw behavioral signals into natural-language memory blocks. | Behavioral signal stream, Versioned memory blocks |
Versioned memory blocks |
Store interpretable consumer preference memories. | LLM semantic extraction, Dense embedding encoder, Heterogeneous context graph, Memory manifests |
Dense embedding encoder |
Converts memory blocks into semantic vectors for retrieval and ranking. | Versioned memory blocks, ML ranking models |
Heterogeneous context graph |
Represents relational preference context for graph-style reasoning. | Versioned memory blocks, ML ranking models, LLM personalization experiences |
Memory manifests |
Track lineage, versions, and batch outputs for testing and rollback. | Versioned memory blocks, ML ranking models, LLM personalization experiences |
ML ranking models |
Use memory features in traditional recommendation and retrieval models. | Dense embedding encoder, Heterogeneous context graph, Memory manifests |
LLM personalization experiences |
Use natural-language memory context for generative personalization. | Heterogeneous context graph, Memory manifests |
Data flow
Raw consumer behavior such as orders, searches, browsing, support interactions, and explicit preferences is processed into memory blocks. Long-term memory captures durable preferences, in-session context captures current intent, and explicit context stores stated preferences. Recurrent session patterns can graduate into long-term memory. Memory blocks are embedded and represented in a graph for downstream ML and LLM consumers.
3 supporting quotes
Why this architecture
DoorDash built memory once and served it in multiple representations because ML rankers need tensors/graph features while LLM experiences need language-native preference context.
Models used: LLMs · dense embedding models · traditional ML ranking models
Scale
- The marketplace spans restaurants, groceries, convenience stores, and retail.“Operating across DoorDash's multi-vertical marketplace spanning restaurants, groceries, convenience stores, and retail”summary, stated
- The platform runs at daily and weekly batch cadences.“The platform operates at daily/weekly batch cadences with versioned components and manifests”summary, stated
Alternatives considered (roads not taken)
Use engagement-only collaborative filtering
Rejected because: It misses semantic cross-category preferences.
Use opaque two-tower embeddings alone
Rejected because: They are not inspectable or interpretable by LLMs.
Let each surface independently infer consumer preferences
Rejected because: That creates redundant processing and inconsistent representations.
Patterns
agent-memory (consumer personalization)
DoorDash stores durable, in-session, and explicit consumer preferences as reusable memory.
batch-offline-processing (memory refresh)
Memory extraction and representation updates operate on daily/weekly batch cadences.
prompt-versioning (memory lineage)
Versioned components and manifests support A/B testing, rollbacks, and lineage.
rag-retrieval (memory retrieval)
Dense memory embeddings support semantic retrieval and ranking features.
Tradeoffs
Represent memory in multiple forms.
Chose Natural language blocks plus embeddings plus graph over One dense user vector.
Rationale: Different downstream systems need different forms of consumer understanding.
Use batch memory manifests.
Chose Versioned daily/weekly memory components over Unversioned live extraction for every surface.
Rationale: Batch manifests support testing, lineage, rollbacks, and consistent reuse.
Gotchas (what bit them)
Opaque user embeddings cannot be used directly by LLMs.
Root cause: LLMs reason over language, not learned latent vectors.
Resolution: Create natural-language memory blocks alongside vector and graph representations.
Session intent and long-term preference can conflict.
Root cause: Current behavior may override or supplement historical patterns.
Resolution: Separate long-term, in-session, and explicit memory layers with graduation rules.
Evaluation
The case describes evaluation through downstream personalization use cases, A/B testing, lineage, and enhanced ranking models rather than reporting final lift metrics in the excerpt.
Metrics: Daily/weekly batch cadence. · Three memory layers. · A/B testing and rollback support.
Outcomes
- DoorDash created a unified consumer memory platform.
- Memory blocks support both ML rankers and LLM-driven personalization.
- The platform enables personalized collections and enhanced ranking beyond engagement-only patterns.
The platform spans DoorDash's multi-vertical marketplace and operates on daily/weekly batch cadences.