跳到主要内容

记忆系统

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_searchsearch 参数支持两种模式:

模式示例适用场景
关键词search="git commit chinese"知道具体术语,精确匹配
语义search="用户写代码的习惯"模糊回忆,找相关内容

推荐:优先语义搜索,描述你想找的内容。如果结果不精确,再用关键词缩小。

过滤技巧

过滤目标参数示例值
特定分类category"preferences"
特定 AgentagentId"codex"
最近一周startTime"2026-06-03T00:00:00Z"
最近 N 条limit5

典型搜索场景

  • 新对话开始:搜索用户偏好和上下文
  • 用户询问过去信息:搜索具体内容
  • 添加前检查重复:搜索即将添加的内容摘要

记忆合并

当多条记忆描述同一主题时,应合并为一条,消除碎片化。

相似度判断

以下条件之一即视为相似:

  • 同一 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_addmemory_update异步操作,通常毫秒级完成索引。仅当需要立即检索时才调用 memory_task_wait 等待。

生命周期管理

  1. 添加前搜索 — 避免重复,触发合并或冲突处理
  2. 相似即合并 — 减少碎片化
  3. 冲突留历史metadata.history 记录变更
  4. 定期清理 — 过时记忆及时删除
  5. 纠正而非追加 — 用 memory_update 而非 memory_add