Applicability
When to Use
✓When agents need to remember past interactions
✓When context windows are limited
✓When building personalized agent experiences
Overview
How It Works
This pattern gives AI agents persistent memory using MCP servers. Short-term memory (current conversation) is managed in Redis for fast access, while long-term memory (facts, preferences, past interactions) is stored in PostgreSQL or a vector database.
The agent loads relevant memories before each interaction using semantic search, incorporates them as context, and stores new learnings after each interaction. This enables agents that get smarter over time and maintain continuity across sessions.
Implementation
Code Example
typescript
async function getRelevantMemories(userId, currentQuery) {
// Short-term: recent conversation
const shortTerm = await redis.lrange(`conversation:${userId}`, 0, 10);
// Long-term: semantic search for relevant facts
const embedding = await openai.embed({ input: currentQuery });
const longTerm = await pinecone.query({ vector: embedding, filter: { userId }, topK: 5 });
return {
recentMessages: shortTerm.map(m => JSON.parse(m)),
relevantFacts: longTerm.map(m => m.metadata.content)
};
}
async function storeMemory(userId, interaction) {
// Short-term
await redis.lpush(`conversation:${userId}`, JSON.stringify(interaction));
await redis.ltrim(`conversation:${userId}`, 0, 50);
// Long-term: extract and store facts
const facts = extractFacts(interaction);
for (const fact of facts) {
const embedding = await openai.embed({ input: fact });
await pinecone.upsert({ vectors: [{ id: generateId(), values: embedding, metadata: { userId, content: fact } }] });
}
}Quick Info
Categoryai-agent
ComplexityMedium