记忆系统
datadata-memory 提供跨会话持久化记忆管理。Agent 可以在对话中记住用户偏好、项目约定、关键决策等信息,在后续对话中检索使用。
MCP 工具
| 工具 | 用途 | 关键参数 |
|---|---|---|
memory_add | 添加新记忆(异步索引) | content(必填), category, tags, agentId, metadata |
memory_search | 搜索已有记忆 | search(必填), limit, offset, category, agentId, sessionId, startTime, endTime |
memory_update | 更新已有记忆(异步索引) | id(必填), content(必填), tags, category, agentId, metadata |
memory_delete | 删除记忆 | id(必填) |
memory_task_wait | 等待异步任务完成 | taskId(必填), timeout(秒,默认 60) |
记忆属性
| 属性 | 说明 | 示例 |
|---|---|---|
content | 原子事实或偏好,一句话说清楚 | "用户偏好使用中文编写 Git 提交信息" |
category | 自定义分类,用于组织过滤 | "preferences", "project-notes" |
tags | 可搜索标签数组 | ["git", "convention"] |
metadata | 键值对附加信息 | {"project": "datadata-skills"} |
搜索策略
关键词 vs 语义搜索
memory_search 的 search 参数支持两种模式:
| 模式 | 示例 | 适用场景 |
|---|---|---|
| 关键词 | search="git commit chinese" | 知道具体术语,精确匹配 |
| 语义 | search="用户写代码的习惯" | 模糊回忆,找相关内容 |
推荐:优先语义搜索,描述你想找的内容。如果结果不精确,再用关键词缩小。
过滤技巧
| 过滤目标 | 参数 | 示例值 |
|---|---|---|
| 特定分类 | category | "preferences" |
| 特定 Agent | agentId | "codex" |
| 最近一周 | startTime | "2026-06-03T00:00:00Z" |
| 最近 N 条 | limit | 5 |
典型搜索场景
- 新对话开始:搜索用户偏好和上下文
- 用户询问过去信息:搜索具体内容
- 添加前检查重复:搜索即将添加的内容摘要
记忆合并
当多条记忆描述同一主题时,应合并为一条,消除碎片化。
相似度判断
以下条件之一即视为相似:
- 同一
category下语义高度重叠 - 关键词高度重合(都包含 "commit"、"中文" 等)
- 同一实体/主题(同项目、同工具等)
合并决策矩阵
搜索已有记忆
├─ 完全重复(>95% 相似)→ 跳过添加
├─ 新信息是已有信息的子集 → 跳过添加
├─ 新信息是已有信息的超集 → memory_update 替换
├─ 互补关系 → 合并后 memory_update
└─ 不相关(<50%)→ memory_add 新增
合并格式规范
合并后的 content 应保持清晰可读:
✅ "用户偏好:使用中文编写 commit;遵循 AngularJS 风格"
❌ "用户喜欢中文 commit 然后他还会用..."(混乱无结构)
冲突合并
当新信息与已有记忆矛盾时,以最新信息为准,同时保留变更历史。
冲突识别
| 信号 | 含义 | 行动 |
|---|---|---|
| "不对,应该是..." | 明确纠正 | 冲突合并 |
| "我现在用..." | 偏好变更 | 冲突合并 |
| 同一事实前后不一致 | 隐式冲突 | 冲突合并 |
| 不同上下文不同选择 | 不冲突,并存 | 新增独立记忆 |
冲突合并示例
已有记忆:"用户电话: 1111"
用户说:"我电话其实是 2222"
→ memory_update(content="用户电话: 2222", metadata={
"history": [{"value": "用户电话: 1111", "updatedAt": "..."}]
})
最佳实践
记忆内容编写
✅ 好的记忆:
"用户偏好使用中文编写 Git 提交信息,遵循 AngularJS 风格"
"datadata-skills 项目约定:Markdown 文件不自动换行"
❌ 差的记忆:
"用户的一些偏好:中文、VS Code、TypeScript"(太多不相关事实混在一起)
"项目约定"(太模糊)
分类体系建议
| category | 用途 |
|---|---|
preferences | 用户偏好和习惯 |
conventions | 项目规范和约定 |
project-notes | 项目相关的知识和背景 |
contacts | 联系人信息 |
learnings | 从过去对话中学到的经验教训 |
索引机制
memory_add 和 memory_update 是异步操作,通常毫秒级完成索引。仅当需要立即检索时才调用 memory_task_wait 等待。
生命周期管理
- 添加前搜索 — 避免重复,触发合并或冲突处理
- 相似即合并 — 减少碎片化
- 冲突留历史 —
metadata.history记录变更 - 定期清理 — 过时记忆及时删除
- 纠正而非追加 — 用
memory_update而非memory_add