第 7 期:Skill 1 — Memory Search(记忆搜索)
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
本期场景:博客项目开发了两周,你隐约记得之前做过一个关于"标签系统"的架构决策,但忘了具体选了哪个方案。你想让 Claude 帮你翻出那条记录。
7.1 Memory Search 是什么?
Memory Search 是 Claude-Mem 最核心的 Skill —— 让 Claude 能够用自然语言搜索你的开发历史。
在第 6 期中,我们学习了三层检索的原理。Memory Search 就是那三层检索的实际接口。
7.2 四个 MCP 工具详解
工具 1:search — 索引搜索
在记忆库中执行全文 + 语义混合搜索,返回轻量的索引列表。
search(
query: "标签系统", // 搜索关键词(必填)
type: "decision", // 按 Observation 类型过滤(可选)
date_from: "2026-04-01", // 起始日期过滤(可选)
date_to: "2026-04-21", // 截止日期过滤(可选)
project: "my-blog", // 按项目过滤(可选)
limit: 10 // 返回条数(可选,默认 10)
)
返回结果:每条约 50-100 tokens
[
{"id": 23, "title": "选择多对多标签方案", "type": "decision", "date": "2026-04-15"},
{"id": 31, "title": "实现标签 CRUD API", "type": "feature", "date": "2026-04-16"}
]
工具 2:timeline — 时间线上下文
查看某条 Observation 前后的事件链,理解因果关系。
timeline(
observation_id: 23, // 围绕哪条 Observation(可选)
query: "标签" // 或用关键词查时间线(可选)
)
返回结果:按时间排列的相关事件
[
{"id": 21, "title": "调研 Prisma 多对多关系", "type": "discovery"},
{"id": 22, "title": "对比隐式 vs 显式中间表", "type": "discovery"},
{"id": 23, "title": "选择多对多标签方案", "type": "decision"},
{"id": 24, "title": "创建 Tag 和 PostTag 模型", "type": "feature"}
]
工具 3:get_observations — 获取完整详情
用 ID 批量获取 Observation 的全部内容。
get_observations(
ids: [22, 23] // Observation ID 数组(必填)
)
返回结果:每条约 500-1,000 tokens
[
{
"id": 22,
"title": "对比隐式 vs 显式中间表",
"type": "discovery",
"narrative": "开发者对比了 Prisma 的两种多对多实现方式...",
"facts": [
"隐式中间表由 Prisma 自动管理,语法更简洁",
"显式中间表支持在关联上添加额外字段(如 sort_order)",
"博客的标签场景不需要额外字段"
],
"concepts": ["Prisma", "多对多关系", "中间表"]
},
{
"id": 23,
"title": "选择多对多标签方案",
"type": "decision",
"narrative": "基于调研结果,开发者决定使用 Prisma 隐式多对多...",
"facts": [
"选择隐式多对多(无需手动建中间表)",
"在 Post 模型中添加 tags Tag[] 字段",
"在 Tag 模型中添加 posts Post[] 字段"
]
}
]
工具 4:list_projects — 列出所有项目
list_projects()
返回所有记录过的项目名称列表。当你有多个项目时,可以用 project 参数限定搜索范围。
7.3 搜索语法与高级技巧
按类型过滤
# 只看架构决策
search(query="数据库", type="decision")
# 只看 Bug 修复
search(query="API", type="bugfix")
# 只看新发现
search(query="Prisma", type="discovery")
6 种可用类型:decision、bugfix、feature、refactor、discovery、change
按文件过滤
搜索涉及特定文件的 Observations:
# 搜索和 auth.ts 相关的所有记录
search(query="file:auth.ts")
# 搜索和 prisma schema 相关的决策
search(query="file:schema.prisma", type="decision")
按时间过滤
# 只搜索最近一周的记录
search(query="Bug", date_from="2026-04-14")
# 搜索某个时间段
search(query="部署", date_from="2026-04-01", date_to="2026-04-10")
组合搜索(高级)
# 上周关于数据库的架构决策
search(
query="数据库 Schema",
type="decision",
date_from="2026-04-14",
project="my-blog"
)
7.4 使用自然语言搜索
在实际使用中,你不需要记住这些语法。直接用自然语言问 Claude:
你:我们之前为什么选择了隐式多对多来做标签?
Claude 会自动将你的问题翻译成合适的搜索调用:
graph TD
A["你的问题:
我们为什么选隐式多对多做标签?"] --> B["Claude 分析意图"]
B --> C["search(query='标签 多对多', type='decision')"]
C --> D["找到 id #23"]
D --> E["get_observations(ids=[22, 23])"]
E --> F["Claude 综合 narrative + facts"]
F --> G["回答: 因为博客标签不需要
额外字段,隐式方案更简洁"]
style A fill:#6366f1,color:#fff
style G fill:#10b981,color:#fff7.5 搜索结果的引用
Claude-Mem 支持 Observation ID 引用。当 Claude 基于记忆回答问题时,它会标注来源:
Claude:根据 Observation #23,我们选择了 Prisma 隐式多对多方案...
你可以在 Web UI 中查看完整记录:
http://localhost:37777/api/observation/23
这种可追溯性让你能验证 Claude 的回答是否准确 —— 它不是在编造,是在引用真实的历史记录。
实操练习
- 确保博客项目已经有至少 2 个会话的 Observations
- 在新会话中,用自然语言搜索:
- "我们做过哪些架构决策?"
- "上次修复了什么 Bug?"
- "和数据库相关的操作有哪些?"
- 观察 Claude 是如何调用搜索工具的
- 在 Web UI 中通过 ID 验证搜索结果
下期预告
Memory Search 解决了"搜记忆"的问题。但如果 Claude 需要理解你的代码结构呢?读 500 行文件太浪费 Token。下一期介绍 Smart Explore —— 用 AST 解析精准裁剪代码,Token 节省 20 倍。