Search...
Ctrl KAsk AI
Search...
Navigation
Integrations & Platforms
Memory as OpenAI Tool
Welcome Mem0 Platform Open Source Cookbooks Integrations API Reference Release Notes
Getting Started
Essentials
- Build a Companion with Mem0
- Partition Memories by Entity
- Control Memory Ingestion
- Set Memory Expiration
- Tag and Organize Memories
- Export Stored Memories
- Choose Vector vs Graph Memory
Companion Playbooks
- Interactive Memory Demo
- Build a Node.js Companion
- Personalized AI Tutor
- Smart Travel Assistant
- Research Assistant for YouTube
- Voice-First AI Companion
- Self-Hosted AI Companion
Ops & Automations
- Memory-Powered Support Agent
- Automated Email Intelligence
- Content Creation Workflow
- Multi-Session Research Agent
- Collaborative Task Assistant
Integrations & Platforms
- Memory-Powered Agent SDK
- Memory as OpenAI Tool
- Persistent Mastra Agents
- Healthcare Coach with ADK
- Bedrock with Persistent Memory
- Graph Memory on Neptune
- Search with Personal Context
Frameworks & Multimodal
- ReAct Agents with Memory
- Multi-Agent Collaboration
- Visual Memory Retrieval
- Persistent Eliza Characters
- Browser Extension Memory
- Gemini 3 with Mem0 MCP
- MiroFish Swarm Memory
On this page
- Getting Started
- Installation
- Environment Setup
- Configuration
- Adding Memories
- Retrieving Memories
- Structured Responses with Zod
- Using Web Search
- Examples
- Complete Car Recommendation System
- Responses
- Resources
Integrate Mem0’s memory capabilities with OpenAI’s Inbuilt Tools to create AI agents with persistent memory.
Getting Started
Installation
npm install mem0ai openai zod Environment Setup
Save your Mem0 and OpenAI API keys in a .env file:
MEM0_API_KEY=your_mem0_api_key
OPENAI_API_KEY=your_openai_api_keyGet your Mem0 API key from the Mem0 Dashboard.
Configuration
const mem0Config = {
apiKey: process.env.MEM0_API_KEY,
user_id: "sample-user",
};
const openAIClient = new OpenAI();
const mem0Client = new MemoryClient(mem0Config); Adding Memories
Store user preferences, past interactions, or any relevant information:
JavaScript
Output (Memories)
async function addUserPreferences() {
const mem0Client = new MemoryClient(mem0Config);
const userPreferences = "I Love BMW, Audi and Porsche. I Hate Mercedes. I love Red cars and Maroon cars. I have a budget of 120K to 150K USD. I like Audi the most.";
await mem0Client.add([{\
role: "user",\
content: userPreferences,\
}], mem0Config);
}
await addUserPreferences(); Retrieving Memories
Search for relevant memories based on the current user input:
const relevantMemories = await mem0Client.search(userInput, mem0Config); Structured Responses with Zod
Define structured response schemas to get consistent output formats:
// Define the schema for a car recommendation
const CarSchema = z.object({
car_name: z.string(),
car_price: z.string(),
car_url: z.string(),
car_image: z.string(),
car_description: z.string(),
});
// Schema for a list of car recommendations
const Cars = z.object({
cars: z.array(CarSchema),
});
// Create a function tool based on the schema
const carRecommendationTool = zodResponsesFunction({
name: "carRecommendations",
parameters: Cars
});
// Use the tool in your OpenAI request
const response = await openAIClient.responses.create({
model: "gpt-4.1-nano-2025-04-14",
tools: [{ type: "web_search_preview" }, carRecommendationTool],
input: `${getMemoryString(relevantMemories)}\n${userInput}`,
}); Using Web Search
Combine memory with web search for up-to-date recommendations:
const response = await openAIClient.responses.create({
model: "gpt-4.1-nano-2025-04-14",
tools: [{ type: "web_search_preview" }, carRecommendationTool],
input: `${getMemoryString(relevantMemories)}\n${userInput}`,
}); Examples
Complete Car Recommendation System
import MemoryClient from "mem0ai";
import { OpenAI } from "openai";
import { zodResponsesFunction } from "openai/helpers/zod";
import { z } from "zod";
import dotenv from 'dotenv';
dotenv.config();
const mem0Config = {
apiKey: process.env.MEM0_API_KEY,
user_id: "sample-user",
};
async function run() {
// Responses without memories
console.log("\n\nRESPONSES WITHOUT MEMORIES\n\n");
await main();
// Adding sample memories
await addSampleMemories();
// Responses with memories
console.log("\n\nRESPONSES WITH MEMORIES\n\n");
await main(true);
}
// OpenAI Response Schema
const CarSchema = z.object({
car_name: z.string(),
car_price: z.string(),
car_url: z.string(),
car_image: z.string(),
car_description: z.string(),
});
const Cars = z.object({
cars: z.array(CarSchema),
});
async function main(memory = false) {
const openAIClient = new OpenAI();
const mem0Client = new MemoryClient(mem0Config);
const input = "Suggest me some cars that I can buy today.";
const tool = zodResponsesFunction({ name: "carRecommendations", parameters: Cars });
// Store the user input as a memory
await mem0Client.add([{\
role: "user",\
content: input,\
}], mem0Config);
// Search for relevant memories
let relevantMemories = []
if (memory) {
relevantMemories = await mem0Client.search(input, mem0Config);
}
const response = await openAIClient.responses.create({
model: "gpt-4.1-nano-2025-04-14",
tools: [{ type: "web_search_preview" }, tool],
input: `${getMemoryString(relevantMemories)}\n${input}`,
});
console.log(response.output);
}
async function addSampleMemories() {
const mem0Client = new MemoryClient(mem0Config);
const myInterests = "I Love BMW, Audi and Porsche. I Hate Mercedes. I love Red cars and Maroon cars. I have a budget of 120K to 150K USD. I like Audi the most.";
await mem0Client.add([{\
role: "user",\
content: myInterests,\
}], mem0Config);
}
const getMemoryString = (memories) => {
const MEMORY_STRING_PREFIX = "These are the memories I have stored. Give more weightage to the question by users and try to answer that first. You have to modify your answer based on the memories I have provided. If the memories are irrelevant you can ignore them. Also don't reply to this section of the prompt, or the memories, they are only for your reference. The MEMORIES of the USER are: \n\n";
const memoryString = (memories?.results || memories).map((mem) => `${mem.memory}`).join("\n") ?? "";
return memoryString.length > 0 ? `${MEMORY_STRING_PREFIX}${memoryString}` : "";
};
run().catch(console.error); Responses
Without Memories
With Memories
{
"cars": [\
{\
"car_name": "Toyota Camry",\
"car_price": "$25,000",\
"car_url": "https://www.toyota.com/camry/",\
"car_image": "https://link-to-toyota-camry-image.com",\
"car_description": "Reliable mid-size sedan with great fuel efficiency."\
},\
{\
"car_name": "Honda Accord",\
"car_price": "$26,000",\
"car_url": "https://www.honda.com/accord/",\
"car_image": "https://link-to-honda-accord-image.com",\
"car_description": "Comfortable and spacious with advanced safety features."\
},\
{\
"car_name": "Ford Mustang",\
"car_price": "$28,000",\
"car_url": "https://www.ford.com/mustang/",\
"car_image": "https://link-to-ford-mustang-image.com",\
"car_description": "Iconic sports car with powerful engine options."\
},\
{\
"car_name": "Tesla Model 3",\
"car_price": "$38,000",\
"car_url": "https://www.tesla.com/model3",\
"car_image": "https://link-to-tesla-model3-image.com",\
"car_description": "Electric vehicle with advanced technology and long range."\
},\
{\
"car_name": "Chevrolet Equinox",\
"car_price": "$24,000",\
"car_url": "https://www.chevrolet.com/equinox/",\
"car_image": "https://link-to-chevron-equinox-image.com",\
"car_description": "Compact SUV with a spacious interior and user-friendly technology."\
}\
]
} Resources
Agents SDK Tool with Mem0 \ \ Extend the OpenAI Agents SDK with Mem0 integration capabilities.
Control Memory Ingestion \ \ Fine-tune what memories get stored during tool calls.
Was this page helpful?
YesNo
Memory-Powered Agent SDK\ \ Previous Persistent Mastra Agents\ \ Next
Ctrl+I
Assistant
Responses are generated using AI and may contain mistakes.
Suggestions
What API keys do I need?How do I add user memories?How do I set up Mem0 with OpenAI?