name: memory
description: “用于偏好、事实和笔记的持久记忆系统”
emoji: “🧠”
记忆系统 - 完整API参考
跨对话存储和回忆用户偏好、事实和笔记。语义搜索由向量嵌入驱动。
聊天命令
存储记忆
/remember preference risk=保守的 保存交易偏好
/remember fact BTC减半在2028年4月 存储一个事实
/remember note 市场开盘前检查ETH 保存一个笔记
/remember rule 不要在FOMC期间交易 存储交易规则
回忆记忆
/memory 查看所有记忆
/memory preferences 仅查看偏好
/memory facts 仅查看事实
/memory notes 仅查看笔记
/memory rules 查看交易规则
/memory search "比特币" 搜索记忆
忘记记忆
/forget <key> 删除特定记忆
/forget all preferences 清除所有偏好
/forget all 清除所有(小心!)
TypeScript API参考
创建记忆服务
import { createMemoryService } from 'clodds/memory';
const memory = createMemoryService({
// 存储后端
backend: 'lancedb', // 'lancedb' | 'sqlite' | 'postgres'
// 嵌入模型
embeddings: {
provider: 'openai',
model: 'text-embedding-3-small',
},
// 选项
encryptionKey: process.env.MEMORY_ENCRYPTION_KEY,
});
记住(存储)
// 存储一个偏好
await memory.remember({
userId: 'user-123',
type: 'preference',
key: 'risk_tolerance',
value: 'conservative',
});
// 存储一个事实
await memory.remember({
userId: 'user-123',
type: 'fact',
content: 'BTC减半大约每4年发生一次',
metadata: { topic: 'crypto', confidence: 0.95 },
});
// 存储一个笔记
await memory.remember({
userId: 'user-123',
type: 'note',
content: '周二前检查Polymarket的选举市场',
metadata: { priority: 'high' },
});
// 存储一个交易规则
await memory.remember({
userId: 'user-123',
type: 'rule',
content: '单头寸交易不超过投资组合的5%',
});
回忆(检索)
// 获取用户的所有记忆
const all = await memory.recall({ userId: 'user-123' });
// 按类型获取
const preferences = await memory.recall({
userId: 'user-123',
type: 'preference',
});
// 获取特定键
const risk = await memory.recall({
userId: 'user-123',
type: 'preference',
key: 'risk_tolerance',
});
语义搜索
// 按含义搜索(不仅仅是关键词)
const results = await memory.semanticSearch({
userId: 'user-123',
query: '我的风险偏好是什么?',
limit: 5,
threshold: 0.7, // 相似度阈值
});
for (const result of results) {
console.log(`${result.type}: ${result.content}`);
console.log(` 相似度: ${result.score}`);
}
忘记(删除)
// 删除特定记忆
await memory.forget({
userId: 'user-123',
type: 'preference',
key: 'risk_tolerance',
});
// 删除所有类型的
await memory.forgetByType({
userId: 'user-123',
type: 'note',
});
// 删除所有记忆
await memory.forgetAll({ userId: 'user-123' });
每日日志
// 记录日常活动
await memory.logDaily({
userId: 'user-123',
date: new Date(),
trades: 5,
pnl: 123.45,
notes: '好日子,抓住了BTC上涨',
});
// 获取日志条目
const journal = await memory.getDailyLogs({
userId: 'user-123',
from: '2024-01-01',
to: '2024-01-31',
});
记忆类型
| 类型 |
目的 |
示例 |
| preference |
用户设置 |
risk=conservative |
| fact |
存储的知识 |
“ETH gas在周末更便宜” |
| note |
提醒/待办事项 |
“检查选举市场” |
| rule |
交易规则 |
“最大头寸5%” |
| context |
对话上下文 |
由系统自动保存 |
存储后端
| 后端 |
描述 |
最佳用途 |
| LanceDB |
向量数据库与混合搜索 |
生产,语义搜索 |
| SQLite |
本地基于文件 |
开发,单用户 |
| PostgreSQL |
分布式与pgvector |
多用户,生产 |
最佳实践
- 键要具体 —
max_position_size 而不是 just size
- 正确使用类型 — 偏好用于设置,规则用于约束
- 语义搜索 — 自然地问问题,嵌入会匹配
- 定期清理 — 删除过时的笔记和事实
- 备份记忆 — 在大更改前导出