@elizaos/plugin-memory 1.0.4 โ 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +333 -192
- package/dist/browser/index.browser.js +348 -122
- package/dist/browser/index.browser.js.map +23 -13
- package/dist/cjs/index.node.cjs +2206 -963
- package/dist/cjs/index.node.js.map +23 -13
- package/dist/evaluators/consolidation.d.ts +19 -0
- package/dist/evaluators/summarization.d.ts +5 -17
- package/dist/index.d.ts +152 -30
- package/dist/node/index.node.js +2242 -994
- package/dist/node/index.node.js.map +23 -13
- package/dist/prompts/consolidation.d.ts +35 -0
- package/dist/prompts/summarization.d.ts +25 -0
- package/dist/providers/action-results.d.ts +2 -0
- package/dist/providers/long-term-memory.d.ts +18 -11
- package/dist/providers/recent-conversation-summary.d.ts +2 -0
- package/dist/repositories/conversation-summary.d.ts +33 -0
- package/dist/repositories/index.d.ts +17 -0
- package/dist/repositories/long-term-memory.d.ts +53 -0
- package/dist/schemas/conversation-summaries.d.ts +494 -0
- package/dist/schemas/index.d.ts +16 -6
- package/dist/schemas/long-term-memories.d.ts +308 -70
- package/dist/services/memory-service.d.ts +95 -48
- package/dist/types/index.d.ts +299 -52
- package/dist/utils/db-mapping.d.ts +20 -0
- package/dist/utils/decay-scoring.d.ts +41 -0
- package/dist/utils/embedding.d.ts +21 -0
- package/dist/utils/formatting.d.ts +17 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/search-merging.d.ts +18 -0
- package/dist/utils/token-counter.d.ts +53 -0
- package/package.json +83 -1
- package/dist/actions/remember.d.ts +0 -11
- package/dist/evaluators/long-term-extraction.d.ts +0 -8
- package/dist/providers/short-term-memory.d.ts +0 -19
- package/dist/schemas/memory-access-logs.d.ts +0 -154
- package/dist/schemas/session-summaries.d.ts +0 -283
package/README.md
CHANGED
|
@@ -1,34 +1,22 @@
|
|
|
1
1
|
# @elizaos/plugin-memory
|
|
2
2
|
|
|
3
|
-
Advanced memory
|
|
3
|
+
Advanced cognitive memory system for ElizaOS agents with persistent memory, intelligent fact extraction, and hybrid retrieval.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> ๐ **Research-Driven**: Built on analysis of 40+ academic papers. See [`refactor.md`](./refactor.md) and [`EVALUATION.md`](./EVALUATION.md) for details.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- **Context Preservation**: Maintains conversation flow while dramatically reducing token usage
|
|
11
|
-
- **Recent Message Retention**: Keeps the most recent messages for immediate context
|
|
12
|
-
- **Topic Extraction**: Identifies and tracks main topics discussed in each session
|
|
9
|
+
## Overview
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
Transforms stateless LLM agents into persistent entities with human-like memory capabilities:
|
|
15
12
|
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
13
|
+
- **Three-Tier Memory**: Episodic (events), Semantic (facts), Procedural (skills)
|
|
14
|
+
- **Smart Consolidation**: Automatically extracts persistent facts from conversations
|
|
15
|
+
- **Hybrid Retrieval**: Vector + BM25 + Graph search with exponential decay
|
|
16
|
+
- **Contextual Embeddings**: Self-contained memories that improve retrieval accuracy
|
|
17
|
+
- **Contradiction Detection**: Automatically handles conflicting information
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
1. **Identity**: User's name, role, profession (e.g., "I'm a data scientist")
|
|
24
|
-
2. **Expertise**: Domain knowledge, skills, familiarity with topics
|
|
25
|
-
3. **Projects**: Ongoing work, past interactions, recurring topics
|
|
26
|
-
4. **Preferences**: Communication style, format preferences, verbosity
|
|
27
|
-
5. **Data Sources**: Frequently used files, databases, APIs
|
|
28
|
-
6. **Goals**: Broader intentions and objectives
|
|
29
|
-
7. **Constraints**: User-defined rules or limitations
|
|
30
|
-
8. **Definitions**: Custom terms, acronyms, glossaries
|
|
31
|
-
9. **Behavioral Patterns**: Interaction styles and tendencies
|
|
19
|
+
---
|
|
32
20
|
|
|
33
21
|
## Installation
|
|
34
22
|
|
|
@@ -36,259 +24,412 @@ Advanced memory management plugin for ElizaOS that provides intelligent conversa
|
|
|
36
24
|
bun add @elizaos/plugin-memory
|
|
37
25
|
```
|
|
38
26
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
### Basic Setup
|
|
27
|
+
Add to your character file:
|
|
42
28
|
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
name: 'MyAgent',
|
|
48
|
-
plugins: [
|
|
49
|
-
memoryPlugin,
|
|
50
|
-
// ... other plugins
|
|
51
|
-
],
|
|
52
|
-
});
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"plugins": ["@elizaos/plugin-memory"]
|
|
32
|
+
}
|
|
53
33
|
```
|
|
54
34
|
|
|
55
|
-
|
|
35
|
+
The plugin auto-creates database tables on first load and handles everything automatically.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Configuration
|
|
40
|
+
|
|
41
|
+
### Quick Reference
|
|
42
|
+
|
|
43
|
+
| Setting | Default | Description |
|
|
44
|
+
| -------------------------------- | ------- | --------------------------------------- |
|
|
45
|
+
| `MEMORY_CONSOLIDATION_THRESHOLD` | `12` | Messages before fact extraction |
|
|
46
|
+
| `MEMORY_MIN_CONFIDENCE` | `0.7` | Minimum confidence to store facts (0-1) |
|
|
47
|
+
| `MEMORY_ENABLE_VECTOR_SEARCH` | `true` | Enable semantic search |
|
|
48
|
+
| `MEMORY_ENABLE_BM25` | `true` | Enable keyword search |
|
|
49
|
+
| `MEMORY_RETRIEVAL_LIMIT` | `5` | Max memories per query |
|
|
50
|
+
| `MEMORY_TOKEN_BUDGET` | `1000` | Token budget for memory context |
|
|
51
|
+
| `MEMORY_SUMMARY_ENABLED` | `true` | Enable conversation summarization |
|
|
52
|
+
| `MEMORY_MESSAGES_PER_SUMMARY` | `7` | Messages per summary |
|
|
53
|
+
| `MEMORY_SUMMARIES_PER_LEVEL` | `5` | Summaries before next level |
|
|
54
|
+
| `MEMORY_SUMMARY_MAX_DEPTH` | `3` | Maximum summary hierarchy depth |
|
|
55
|
+
| `MEMORY_SUMMARY_TOKEN_BUDGET` | `500` | Token budget for summaries |
|
|
56
|
+
| `CONTEXT_OVERLAP_USER_MESSAGES` | `2` | User messages overlap after summary |
|
|
57
|
+
|
|
58
|
+
### Configuration Methods
|
|
59
|
+
|
|
60
|
+
Settings are loaded via `runtime.getSetting()` with priority:
|
|
61
|
+
|
|
62
|
+
1. **Character `settings`** (highest priority)
|
|
63
|
+
2. **Environment variables** (`.env` file)
|
|
64
|
+
3. **Plugin defaults** (fallback)
|
|
56
65
|
|
|
57
|
-
|
|
66
|
+
#### Character File Example
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"name": "MyAgent",
|
|
71
|
+
"plugins": ["@elizaos/plugin-memory"],
|
|
72
|
+
"settings": {
|
|
73
|
+
"MEMORY_CONSOLIDATION_THRESHOLD": "15",
|
|
74
|
+
"MEMORY_MIN_CONFIDENCE": "0.8",
|
|
75
|
+
"MEMORY_RETRIEVAL_LIMIT": "10"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### `.env` File Example
|
|
58
81
|
|
|
59
82
|
```env
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
|
|
83
|
+
# Core Settings
|
|
84
|
+
MEMORY_CONSOLIDATION_THRESHOLD=12
|
|
85
|
+
MEMORY_MIN_CONFIDENCE=0.7
|
|
86
|
+
|
|
87
|
+
# Retrieval Settings
|
|
88
|
+
MEMORY_ENABLE_VECTOR_SEARCH=true
|
|
89
|
+
MEMORY_ENABLE_BM25=true
|
|
90
|
+
MEMORY_RETRIEVAL_LIMIT=5
|
|
91
|
+
MEMORY_TOKEN_BUDGET=1000
|
|
92
|
+
|
|
93
|
+
# Summarization Settings
|
|
94
|
+
MEMORY_SUMMARY_ENABLED=true
|
|
95
|
+
MEMORY_MESSAGES_PER_SUMMARY=7
|
|
96
|
+
MEMORY_SUMMARIES_PER_LEVEL=5
|
|
97
|
+
MEMORY_SUMMARY_MAX_DEPTH=3
|
|
98
|
+
MEMORY_SUMMARY_TOKEN_BUDGET=500
|
|
99
|
+
CONTEXT_OVERLAP_USER_MESSAGES=2
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Configuration Details
|
|
105
|
+
|
|
106
|
+
### Core Memory Settings
|
|
107
|
+
|
|
108
|
+
#### `MEMORY_CONSOLIDATION_THRESHOLD` (default: `12`)
|
|
109
|
+
|
|
110
|
+
Number of messages to buffer before triggering memory consolidation.
|
|
111
|
+
|
|
112
|
+
- **Lower** (5-8): Extract facts frequently, more LLM calls, better for fast-paced chats
|
|
113
|
+
- **Higher** (15-30): Let conversations develop, fewer LLM calls, better for long-form discussions
|
|
114
|
+
|
|
115
|
+
#### `MEMORY_MIN_CONFIDENCE` (default: `0.7`)
|
|
116
|
+
|
|
117
|
+
Minimum confidence score (0-1) to store extracted facts.
|
|
118
|
+
|
|
119
|
+
- **Higher** (0.8-0.9): Only store high-certainty facts, good for critical applications
|
|
120
|
+
- **Lower** (0.5-0.6): Capture more nuanced information, risk storing noise
|
|
121
|
+
|
|
122
|
+
### Retrieval Settings
|
|
123
|
+
|
|
124
|
+
#### `MEMORY_ENABLE_VECTOR_SEARCH` (default: `true`)
|
|
125
|
+
|
|
126
|
+
Enable semantic similarity search using embeddings. Recommended to keep enabled.
|
|
127
|
+
|
|
128
|
+
#### `MEMORY_ENABLE_BM25` (default: `true`)
|
|
129
|
+
|
|
130
|
+
Enable keyword-based search with stemming. Works best combined with vector search.
|
|
131
|
+
|
|
132
|
+
#### `MEMORY_RETRIEVAL_LIMIT` (default: `5`)
|
|
133
|
+
|
|
134
|
+
Maximum number of memories to retrieve per query.
|
|
135
|
+
|
|
136
|
+
- **Lower** (3): Faster responses, less context
|
|
137
|
+
- **Higher** (10-20): More context, uses more tokens
|
|
138
|
+
|
|
139
|
+
#### `MEMORY_TOKEN_BUDGET` (default: `1000`)
|
|
140
|
+
|
|
141
|
+
Maximum tokens for memory context in prompts. Automatically trims to fit budget.
|
|
142
|
+
|
|
143
|
+
### Summarization Settings
|
|
144
|
+
|
|
145
|
+
#### `MEMORY_SUMMARY_ENABLED` (default: `true`)
|
|
146
|
+
|
|
147
|
+
Enable hierarchical conversation summarization. Reduces token usage for long conversations.
|
|
148
|
+
|
|
149
|
+
#### `MEMORY_MESSAGES_PER_SUMMARY` (default: `7`)
|
|
150
|
+
|
|
151
|
+
How many messages to include in each Level 1 summary.
|
|
152
|
+
|
|
153
|
+
- **Lower** (5): More granular summaries
|
|
154
|
+
- **Higher** (15-20): Broader summaries
|
|
155
|
+
|
|
156
|
+
#### `MEMORY_SUMMARIES_PER_LEVEL` (default: `5`)
|
|
157
|
+
|
|
158
|
+
How many summaries to accumulate before creating the next level.
|
|
159
|
+
|
|
160
|
+
- Example: 5 Level-1 summaries โ 1 Level-2 summary
|
|
161
|
+
|
|
162
|
+
#### `MEMORY_SUMMARY_MAX_DEPTH` (default: `3`)
|
|
63
163
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
164
|
+
Maximum depth of the summary hierarchy.
|
|
165
|
+
|
|
166
|
+
- Level 1: Direct message summaries
|
|
167
|
+
- Level 2: Summaries of summaries
|
|
168
|
+
- Level 3+: Higher-level abstractions
|
|
169
|
+
|
|
170
|
+
#### `MEMORY_SUMMARY_TOKEN_BUDGET` (default: `500`)
|
|
171
|
+
|
|
172
|
+
Maximum tokens for conversation summaries in context.
|
|
173
|
+
|
|
174
|
+
#### `CONTEXT_OVERLAP_USER_MESSAGES` (default: `2`)
|
|
175
|
+
|
|
176
|
+
Number of user messages to show as overlap after summarization for conversation continuity.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Configuration Presets
|
|
181
|
+
|
|
182
|
+
### High-Frequency Chatbot
|
|
183
|
+
|
|
184
|
+
```json
|
|
185
|
+
{
|
|
186
|
+
"MEMORY_CONSOLIDATION_THRESHOLD": "8",
|
|
187
|
+
"MEMORY_MIN_CONFIDENCE": "0.8",
|
|
188
|
+
"MEMORY_RETRIEVAL_LIMIT": "3",
|
|
189
|
+
"MEMORY_MESSAGES_PER_SUMMARY": "5"
|
|
190
|
+
}
|
|
67
191
|
```
|
|
68
192
|
|
|
69
|
-
|
|
193
|
+
**Why**: Fast extraction, high-quality facts only, minimal context for speed.
|
|
70
194
|
|
|
71
|
-
|
|
195
|
+
### Long-Form Conversations (Therapy, Coaching, Research)
|
|
72
196
|
|
|
197
|
+
```json
|
|
198
|
+
{
|
|
199
|
+
"MEMORY_CONSOLIDATION_THRESHOLD": "20",
|
|
200
|
+
"MEMORY_MIN_CONFIDENCE": "0.6",
|
|
201
|
+
"MEMORY_RETRIEVAL_LIMIT": "10",
|
|
202
|
+
"MEMORY_TOKEN_BUDGET": "2000"
|
|
203
|
+
}
|
|
73
204
|
```
|
|
74
|
-
User: "Remember that I prefer TypeScript over JavaScript"
|
|
75
|
-
Agent: I've made a note of that in my Preferences memory: "User prefers TypeScript over JavaScript"
|
|
76
205
|
|
|
77
|
-
|
|
78
|
-
|
|
206
|
+
**Why**: Natural conversation flow, capture nuanced details, rich context.
|
|
207
|
+
|
|
208
|
+
### Critical Applications (Medical, Legal, Financial)
|
|
79
209
|
|
|
80
|
-
|
|
81
|
-
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"MEMORY_MIN_CONFIDENCE": "0.9",
|
|
213
|
+
"MEMORY_ENABLE_BM25": "true",
|
|
214
|
+
"MEMORY_ENABLE_VECTOR_SEARCH": "true"
|
|
215
|
+
}
|
|
82
216
|
```
|
|
83
217
|
|
|
84
|
-
|
|
218
|
+
**Why**: Only store very certain facts, use both keyword and semantic matching.
|
|
85
219
|
|
|
86
|
-
|
|
87
|
-
import { MemoryService } from '@elizaos/plugin-memory';
|
|
220
|
+
---
|
|
88
221
|
|
|
89
|
-
|
|
90
|
-
const memoryService = runtime.getService('memory') as MemoryService;
|
|
222
|
+
## Basic Usage
|
|
91
223
|
|
|
92
|
-
|
|
93
|
-
await memoryService.storeLongTermMemory({
|
|
94
|
-
agentId: runtime.agentId,
|
|
95
|
-
entityId: userId,
|
|
96
|
-
category: LongTermMemoryCategory.PREFERENCES,
|
|
97
|
-
content: 'User prefers concise responses',
|
|
98
|
-
confidence: 0.9,
|
|
99
|
-
source: 'manual',
|
|
100
|
-
});
|
|
224
|
+
The plugin works automatically once installed. No code changes required.
|
|
101
225
|
|
|
102
|
-
|
|
103
|
-
const memories = await memoryService.getLongTermMemories(userId);
|
|
226
|
+
### How It Works
|
|
104
227
|
|
|
105
|
-
|
|
106
|
-
|
|
228
|
+
1. **Conversation**: Agent buffers messages
|
|
229
|
+
2. **Consolidation**: After threshold (default 12), LLM extracts persistent facts
|
|
230
|
+
3. **Storage**: Facts stored with confidence โฅ 0.7 (configurable)
|
|
231
|
+
4. **Retrieval**: Hybrid search (vector + BM25) with decay scoring
|
|
232
|
+
5. **Context**: Relevant memories added to prompts automatically
|
|
233
|
+
|
|
234
|
+
### Example Flow
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
User: "I'm a software engineer working on React. I prefer TypeScript."
|
|
238
|
+
โ [12 messages later, consolidation triggers]
|
|
239
|
+
โ Extracted: "User is a software engineer" (confidence: 0.95)
|
|
240
|
+
โ Extracted: "User works with React" (confidence: 0.92)
|
|
241
|
+
โ Extracted: "User prefers TypeScript" (confidence: 0.95)
|
|
242
|
+
|
|
243
|
+
User: "What's the best state management for my project?"
|
|
244
|
+
โ Retrieves: React + TypeScript preferences
|
|
245
|
+
โ Agent: "For React with TypeScript, I'd recommend Zustand or..."
|
|
107
246
|
```
|
|
108
247
|
|
|
109
|
-
|
|
248
|
+
---
|
|
110
249
|
|
|
111
|
-
|
|
250
|
+
## Programmatic Access
|
|
112
251
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
- **`memory_access_logs`**: Optional usage tracking for analytics
|
|
252
|
+
```typescript
|
|
253
|
+
import { MemoryService, MemoryType, DecayFunction } from '@elizaos/plugin-memory';
|
|
116
254
|
|
|
117
|
-
|
|
255
|
+
// Get service
|
|
256
|
+
const memoryService = runtime.getService<MemoryService>('memory');
|
|
118
257
|
|
|
119
|
-
|
|
258
|
+
// Store memory manually
|
|
259
|
+
await memoryService.storeLongTermMemory({
|
|
260
|
+
agentId: runtime.agentId,
|
|
261
|
+
entityId: userId,
|
|
262
|
+
roomId: roomId,
|
|
263
|
+
type: MemoryType.SEMANTIC,
|
|
264
|
+
content: 'User is allergic to peanuts',
|
|
265
|
+
embeddingContext: '[Health fact]: User is allergic to peanuts',
|
|
266
|
+
confidence: 1.0,
|
|
267
|
+
decayRate: 0.0, // Never decays
|
|
268
|
+
decayFunction: DecayFunction.NONE,
|
|
269
|
+
source: { authorId: userId },
|
|
270
|
+
metadata: { category: 'health', critical: true },
|
|
271
|
+
});
|
|
120
272
|
|
|
121
|
-
|
|
273
|
+
// Search memories
|
|
274
|
+
const memories = await memoryService.searchLongTermMemories({
|
|
275
|
+
entityId: userId,
|
|
276
|
+
query: 'What foods should I avoid?',
|
|
277
|
+
type: MemoryType.SEMANTIC,
|
|
278
|
+
limit: 5,
|
|
279
|
+
minConfidence: 0.7,
|
|
280
|
+
});
|
|
122
281
|
|
|
123
|
-
|
|
282
|
+
// Get all memories by type
|
|
283
|
+
const facts = await memoryService.getLongTermMemories(userId, MemoryType.SEMANTIC, 20);
|
|
284
|
+
```
|
|
124
285
|
|
|
125
|
-
|
|
126
|
-
- Tracks message counts for summarization triggers
|
|
127
|
-
- Stores and retrieves long-term memories
|
|
128
|
-
- Manages session summaries
|
|
129
|
-
- Provides formatted memory context
|
|
286
|
+
---
|
|
130
287
|
|
|
131
|
-
|
|
288
|
+
## Troubleshooting
|
|
289
|
+
|
|
290
|
+
### No memories being extracted
|
|
291
|
+
|
|
292
|
+
**Check**:
|
|
132
293
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
- Archives old messages while preserving summaries
|
|
137
|
-
- **longTermExtractionEvaluator**: Periodically analyzes conversations
|
|
138
|
-
- Identifies facts worth remembering long-term
|
|
139
|
-
- Categorizes information semantically
|
|
140
|
-
- Assigns confidence scores
|
|
141
|
-
- Stores high-confidence memories
|
|
294
|
+
1. Has threshold been reached? (default: 12 messages)
|
|
295
|
+
2. Is LLM provider configured?
|
|
296
|
+
3. Check logs: `grep "consolidation" agent.log`
|
|
142
297
|
|
|
143
|
-
|
|
298
|
+
**Debug**:
|
|
144
299
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- **shortTermMemoryProvider**: Provides conversation summaries
|
|
150
|
-
- Runs before recentMessages (position: 95)
|
|
151
|
-
- Includes recent session summaries
|
|
152
|
-
- Shows topics and message counts
|
|
300
|
+
```typescript
|
|
301
|
+
const memoryService = runtime.getService<MemoryService>('memory');
|
|
302
|
+
console.log('Config:', memoryService.getConfig());
|
|
303
|
+
```
|
|
153
304
|
|
|
154
|
-
|
|
305
|
+
### Agent doesn't remember facts
|
|
155
306
|
|
|
156
|
-
|
|
157
|
-
- Triggers on keywords like "remember", "keep in mind", etc.
|
|
158
|
-
- Uses LLM to extract what to remember
|
|
159
|
-
- Categorizes and stores with confirmation
|
|
307
|
+
**Check**:
|
|
160
308
|
|
|
161
|
-
|
|
309
|
+
1. Database: `SELECT * FROM long_term_memories WHERE isActive = true;`
|
|
310
|
+
2. Confidence: `WHERE confidence >= 0.7`
|
|
311
|
+
3. Decay scores (old memories may have decayed)
|
|
162
312
|
|
|
163
|
-
|
|
313
|
+
**Debug**:
|
|
164
314
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
5. **Context Injection**: shortTermMemoryProvider injects summaries in future conversations
|
|
315
|
+
```typescript
|
|
316
|
+
const memories = await memoryService.getLongTermMemories(userId, undefined, 50, true);
|
|
317
|
+
console.log('Total:', memories.length, 'Active:', memories.filter((m) => m.isActive).length);
|
|
318
|
+
```
|
|
170
319
|
|
|
171
|
-
###
|
|
320
|
+
### High token usage
|
|
172
321
|
|
|
173
|
-
|
|
174
|
-
2. **Analysis**: LLM analyzes conversation for facts worth remembering
|
|
175
|
-
3. **Extraction**: Identifies facts, categorizes them, assigns confidence
|
|
176
|
-
4. **Storage**: High-confidence facts stored in long_term_memories table
|
|
177
|
-
5. **Retrieval**: longTermMemoryProvider injects relevant facts in all future conversations
|
|
322
|
+
**Solutions**:
|
|
178
323
|
|
|
179
|
-
|
|
324
|
+
- Lower `MEMORY_CONSOLIDATION_THRESHOLD` (consolidate more often)
|
|
325
|
+
- Reduce `MEMORY_RETRIEVAL_LIMIT` (fewer memories per query)
|
|
326
|
+
- Increase `MEMORY_MIN_CONFIDENCE` (only high-quality facts)
|
|
327
|
+
- Reduce `MEMORY_TOKEN_BUDGET` and `MEMORY_SUMMARY_TOKEN_BUDGET`
|
|
180
328
|
|
|
181
|
-
|
|
182
|
-
2. **Validation**: rememberAction validates the request
|
|
183
|
-
3. **Extraction**: LLM extracts what to remember and categorizes it
|
|
184
|
-
4. **Storage**: Fact stored with 'manual' source and high confidence
|
|
185
|
-
5. **Confirmation**: Agent confirms what was stored
|
|
329
|
+
### Transient requests stored as facts
|
|
186
330
|
|
|
187
|
-
|
|
331
|
+
**Solutions**:
|
|
188
332
|
|
|
189
|
-
|
|
333
|
+
- Increase `MEMORY_MIN_CONFIDENCE` to 0.8+
|
|
334
|
+
- Use better LLM model (GPT-4, Claude)
|
|
335
|
+
- Customize extraction prompts in `prompts/consolidation.ts`
|
|
190
336
|
|
|
191
|
-
|
|
192
|
-
- With plugin: 1000 messages = ~20 summaries + 10 recent = ~25,000 tokens
|
|
193
|
-
- **Savings**: ~85% reduction in context size
|
|
337
|
+
---
|
|
194
338
|
|
|
195
|
-
|
|
339
|
+
## Database Schema
|
|
196
340
|
|
|
197
|
-
-
|
|
198
|
-
- Long-term memories provide rich context in minimal tokens
|
|
199
|
-
- Recent messages still available for immediate context
|
|
341
|
+
Tables auto-created on first load via ElizaOS dynamic migrations:
|
|
200
342
|
|
|
201
|
-
###
|
|
343
|
+
### `long_term_memories`
|
|
202
344
|
|
|
203
|
-
|
|
204
|
-
- Separate tables for different memory types
|
|
205
|
-
- Optional vector search for semantic similarity (requires pgvector)
|
|
345
|
+
Stores episodic, semantic, and procedural memories with:
|
|
206
346
|
|
|
207
|
-
|
|
347
|
+
- Embeddings (pgvector)
|
|
348
|
+
- Confidence scores
|
|
349
|
+
- Decay rates
|
|
350
|
+
- Access tracking
|
|
351
|
+
- Soft deletes
|
|
208
352
|
|
|
209
|
-
###
|
|
353
|
+
### `conversation_summaries`
|
|
210
354
|
|
|
211
|
-
|
|
212
|
-
- Provide clear, factual information for better storage
|
|
213
|
-
- Verify important memories were stored correctly
|
|
355
|
+
Hierarchical conversation summaries with:
|
|
214
356
|
|
|
215
|
-
|
|
357
|
+
- Multi-level compression
|
|
358
|
+
- Time ranges
|
|
359
|
+
- Token estimates
|
|
360
|
+
- Access tracking
|
|
216
361
|
|
|
217
|
-
|
|
218
|
-
- Monitor summarization quality with test conversations
|
|
219
|
-
- Use confidence thresholds to filter low-quality extractions
|
|
220
|
-
- Consider enabling vector search for large-scale deployments
|
|
362
|
+
---
|
|
221
363
|
|
|
222
|
-
|
|
364
|
+
## Architecture Highlights
|
|
223
365
|
|
|
224
|
-
|
|
225
|
-
- **Long-form conversations**: Higher threshold (60-100 messages)
|
|
226
|
-
- **Critical applications**: Higher confidence threshold (0.8-0.9)
|
|
227
|
-
- **Exploratory use**: Lower confidence threshold (0.6-0.7)
|
|
366
|
+
### Memory Types
|
|
228
367
|
|
|
229
|
-
|
|
368
|
+
- **Episodic**: Time-anchored events ("User asked about X on Tuesday")
|
|
369
|
+
- **Semantic**: Timeless facts ("User is allergic to peanuts")
|
|
370
|
+
- **Procedural**: Skills and patterns ("User prefers git rebase")
|
|
230
371
|
|
|
231
|
-
###
|
|
372
|
+
### Hybrid Retrieval
|
|
232
373
|
|
|
233
|
-
|
|
374
|
+
Combines:
|
|
234
375
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
376
|
+
- **Vector Search**: Semantic similarity (pgvector HNSW index)
|
|
377
|
+
- **BM25**: Keyword matching with stemming
|
|
378
|
+
- **Decay Scoring**: `Confidence ร e^(-ฮปรt) ร (1 + log(accessCount))`
|
|
238
379
|
|
|
239
|
-
###
|
|
380
|
+
### Contextual Embeddings
|
|
240
381
|
|
|
241
|
-
|
|
382
|
+
Enriches content before embedding:
|
|
242
383
|
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
- Optimize extraction strategies
|
|
384
|
+
- Raw: "It was terrible"
|
|
385
|
+
- Enriched: "[Movie preference]: The movie Inception was terrible"
|
|
246
386
|
|
|
247
|
-
###
|
|
387
|
+
### Contradiction Detection
|
|
248
388
|
|
|
249
|
-
|
|
389
|
+
- Detects conflicting facts via LLM
|
|
390
|
+
- Soft deletes old memories (marks inactive)
|
|
391
|
+
- Maintains provenance chain via `supersedesId`
|
|
250
392
|
|
|
251
|
-
|
|
252
|
-
export enum CustomMemoryCategory {
|
|
253
|
-
...LongTermMemoryCategory,
|
|
254
|
-
MEDICAL_HISTORY = 'medical_history',
|
|
255
|
-
FINANCIAL_DATA = 'financial_data',
|
|
256
|
-
}
|
|
257
|
-
```
|
|
393
|
+
---
|
|
258
394
|
|
|
259
395
|
## Testing
|
|
260
396
|
|
|
261
|
-
Run the test suite:
|
|
262
|
-
|
|
263
397
|
```bash
|
|
264
398
|
cd packages/plugin-memory
|
|
265
399
|
bun test
|
|
266
400
|
```
|
|
267
401
|
|
|
268
|
-
|
|
402
|
+
Tests cover:
|
|
269
403
|
|
|
270
|
-
|
|
404
|
+
- XML parsing
|
|
405
|
+
- Memory consolidation
|
|
406
|
+
- Decay algorithms
|
|
407
|
+
- Contradiction detection
|
|
408
|
+
- Hybrid retrieval
|
|
271
409
|
|
|
272
|
-
|
|
273
|
-
- Verify MemoryService is registered
|
|
274
|
-
- Check LLM provider is configured
|
|
410
|
+
---
|
|
275
411
|
|
|
276
|
-
|
|
412
|
+
## Research & References
|
|
277
413
|
|
|
278
|
-
|
|
279
|
-
- Check confidence threshold isn't too high
|
|
280
|
-
- Ensure facts are being extracted (check logs)
|
|
414
|
+
Based on comprehensive research documented in [`refactor.md`](./refactor.md):
|
|
281
415
|
|
|
282
|
-
|
|
416
|
+
- **Cognitive Science**: Ebbinghaus forgetting curve, memory consolidation theory
|
|
417
|
+
- **AI/RAG Systems**: MemGPT, GraphRAG, Contextual Retrieval (Anthropic), HyDE
|
|
418
|
+
- **Agent Architecture**: A-MEM, AgentCore (AWS), MLE-Benchmark
|
|
283
419
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
420
|
+
Full analysis: [`EVALUATION.md`](./EVALUATION.md)
|
|
421
|
+
|
|
422
|
+
---
|
|
287
423
|
|
|
288
424
|
## License
|
|
289
425
|
|
|
290
426
|
MIT
|
|
291
427
|
|
|
292
|
-
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## Support
|
|
293
431
|
|
|
294
|
-
|
|
432
|
+
- **Research**: [`refactor.md`](./refactor.md)
|
|
433
|
+
- **Evaluation**: [`EVALUATION.md`](./EVALUATION.md)
|
|
434
|
+
- **Issues**: [GitHub Issues](https://github.com/elizaOS/eliza/issues)
|
|
435
|
+
- **Discord**: [ElizaOS Community](https://discord.gg/elizaos)
|