What to embed in a memory store
Not every utterance deserves a vector. A good rule: embed memory items that have content worth searching against, with metadata worth filtering on. Greetings, acknowledgements, and tool-output JSON are usually noise.
Three useful memory item shapes
- Turn-level — one chunk per user/assistant message. Easy, lots of items, retrieval can feel scattered.
- Episode-level — group consecutive turns into a coherent episode (a debugging session, a feature design discussion). Better retrieval relevance, harder to chunk automatically.
- Distillation-level — model-written summaries of episodes ('User decided to use HNSW over IVFFlat after a 30-min latency benchmark'). Highest signal-to-noise, requires periodic distillation pass.
Decay-aware retrieval
Recent memories should win ties over old ones. Score = similarity * exp(-age_days / half_life). Tune half_life on your eval set; cwkPippa uses ~30 days for general memories, longer for identity-defining moments.