555e282cc4
pi-agent-plugin checks / lint (push) Has been cancelled
pi-agent-plugin checks / test (20) (push) Has been cancelled
pi-agent-plugin checks / test (22) (push) Has been cancelled
pi-agent-plugin checks / build (push) Has been cancelled
TypeScript SDK CI / check_changes (push) Has been cancelled
TypeScript SDK CI / changelog_check (push) Has been cancelled
ci / changelog_check (push) Has been cancelled
ci / check_changes (push) Has been cancelled
ci / build_mem0 (3.10) (push) Has been cancelled
ci / build_mem0 (3.11) (push) Has been cancelled
ci / build_mem0 (3.12) (push) Has been cancelled
CLI Node CI / lint (push) Has been cancelled
CLI Node CI / test (20) (push) Has been cancelled
CLI Node CI / test (22) (push) Has been cancelled
CLI Node CI / build (push) Has been cancelled
CLI Python CI / lint (push) Has been cancelled
CLI Python CI / test (3.10) (push) Has been cancelled
CLI Python CI / test (3.11) (push) Has been cancelled
CLI Python CI / test (3.12) (push) Has been cancelled
CLI Python CI / build (push) Has been cancelled
openclaw checks / lint (push) Has been cancelled
openclaw checks / test (20) (push) Has been cancelled
openclaw checks / test (22) (push) Has been cancelled
openclaw checks / build (push) Has been cancelled
opencode-plugin checks / build (push) Has been cancelled
TypeScript SDK CI / build_ts_sdk (20) (push) Has been cancelled
TypeScript SDK CI / build_ts_sdk (22) (push) Has been cancelled
TypeScript SDK CI / integration_ts_sdk (20) (push) Has been cancelled
TypeScript SDK CI / integration_ts_sdk (22) (push) Has been cancelled
204 lines
4.7 KiB
Plaintext
204 lines
4.7 KiB
Plaintext
---
|
|
title: Advanced Memory Operations
|
|
description: "Run richer add/search/update/delete flows on the managed platform with metadata, rerankers, and per-request controls."
|
|
---
|
|
|
|
# Make Platform Memory Operations Smarter
|
|
|
|
<Info>
|
|
**Prerequisites**
|
|
- Platform workspace with API key
|
|
- Python 3.10+ and Node.js 18+
|
|
</Info>
|
|
|
|
<Tip>
|
|
Need a refresher on the core concepts first? Review the <Link href="/core-concepts/memory-operations/add">Add Memory</Link> overview, then come back for the advanced flow.
|
|
</Tip>
|
|
|
|
## Install and authenticate
|
|
|
|
<Tabs>
|
|
<Tab title="Python">
|
|
<Steps>
|
|
<Step title="Install the SDK">
|
|
```bash
|
|
pip install mem0ai
|
|
```
|
|
</Step>
|
|
<Step title="Export your API key">
|
|
```bash
|
|
export MEM0_API_KEY="sk-platform-..."
|
|
```
|
|
</Step>
|
|
<Step title="Create an async client">
|
|
```python
|
|
import os
|
|
from mem0 import AsyncMemoryClient
|
|
|
|
memory = AsyncMemoryClient(api_key=os.environ["MEM0_API_KEY"])
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
<Tab title="TypeScript">
|
|
<Steps>
|
|
<Step title="Install the OSS SDK">
|
|
```bash
|
|
npm install mem0ai
|
|
```
|
|
</Step>
|
|
<Step title="Load your API key">
|
|
```bash
|
|
export MEM0_API_KEY="sk-platform-..."
|
|
```
|
|
</Step>
|
|
<Step title="Instantiate the client">
|
|
```typescript
|
|
import MemoryClient from 'mem0ai';
|
|
|
|
const memory = new MemoryClient({ apiKey: process.env.MEM0_API_KEY! });
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Add memories with metadata
|
|
|
|
<Tabs>
|
|
<Tab title="Python">
|
|
<Steps>
|
|
<Step title="Record conversations with metadata">
|
|
```python
|
|
conversation = [
|
|
{"role": "user", "content": "I'm Morgan, planning a 3-week trip to Japan in May."},
|
|
{"role": "assistant", "content": "Great! I'll track dietary notes and cities you mention."},
|
|
{"role": "user", "content": "Please remember I avoid shellfish and prefer boutique hotels in Tokyo."},
|
|
]
|
|
|
|
result = await memory.add(
|
|
conversation,
|
|
user_id="traveler-42",
|
|
metadata={"trip": "japan-2025", "preferences": ["boutique", "no-shellfish"]},
|
|
run_id="planning-call-1",
|
|
)
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
<Tab title="TypeScript">
|
|
<Steps>
|
|
<Step title="Capture context-rich memories">
|
|
```typescript
|
|
const conversation = [
|
|
{ role: "user", content: "I'm Morgan, planning a 3-week trip to Japan in May." },
|
|
{ role: "assistant", content: "Great! I'll track dietary notes and cities you mention." },
|
|
{ role: "user", content: "Please remember I avoid shellfish and love boutique hotels in Tokyo." },
|
|
];
|
|
|
|
const result = await memory.add(conversation, {
|
|
userId: "traveler-42",
|
|
metadata: { trip: "japan-2025", preferences: ["boutique", "no-shellfish"] },
|
|
runId: "planning-call-1",
|
|
});
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
<Info icon="check">
|
|
Successful calls return memories tagged with the metadata you passed. In the dashboard, verify the `trip=japan-2025` tag exists on the new memory.
|
|
</Info>
|
|
|
|
## Retrieve and refine
|
|
|
|
<Tabs>
|
|
<Tab title="Python">
|
|
<Steps>
|
|
<Step title="Filter by metadata + reranker">
|
|
```python
|
|
matches = await memory.search(
|
|
"Any food alerts?",
|
|
filters={"user_id": "traveler-42", "metadata.trip": "japan-2025"},
|
|
rerank=True,
|
|
)
|
|
```
|
|
</Step>
|
|
<Step title="Update a memory inline">
|
|
```python
|
|
await memory.update(
|
|
memory_id=matches["results"][0]["id"],
|
|
text="Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
|
|
)
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
<Tab title="TypeScript">
|
|
<Steps>
|
|
<Step title="Search with metadata filters">
|
|
```typescript
|
|
const matches = await memory.search("Any food alerts?", {
|
|
filters: { user_id: "traveler-42", "metadata.trip": "japan-2025" },
|
|
rerank: true,
|
|
});
|
|
```
|
|
</Step>
|
|
<Step title="Apply an update">
|
|
```typescript
|
|
await memory.update(matches.results[0].id, {
|
|
text: "Morgan avoids shellfish and prefers boutique hotels in central Tokyo.",
|
|
});
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Clean up
|
|
|
|
<Tabs>
|
|
<Tab title="Python">
|
|
<Steps>
|
|
<Step title="Delete scoped memories">
|
|
```python
|
|
await memory.delete_all(user_id="traveler-42", run_id="planning-call-1")
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
<Tab title="TypeScript">
|
|
<Steps>
|
|
<Step title="Remove the run">
|
|
```typescript
|
|
await memory.deleteAll({ userId: "traveler-42", runId: "planning-call-1" });
|
|
```
|
|
</Step>
|
|
</Steps>
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Quick recovery
|
|
|
|
- Empty results with filters: log `filters` values and confirm metadata keys match (case-sensitive).
|
|
|
|
<Warning>
|
|
Metadata keys become part of your filtering schema. Stick to lowercase snake_case (`trip_id`, `preferences`) to avoid collisions down the road.
|
|
</Warning>
|
|
|
|
<CardGroup cols={2}>
|
|
<Card
|
|
title="Tune Metadata Filtering"
|
|
description="Layer field-level filters on top of advanced operations."
|
|
icon="funnel"
|
|
href="/open-source/features/metadata-filtering"
|
|
/>
|
|
<Card
|
|
title="Explore Reranker Search"
|
|
description="See how rerankers boost accuracy after advanced retrieval."
|
|
icon="sparkles"
|
|
href="/open-source/features/reranker-search"
|
|
/>
|
|
</CardGroup>
|