检索 Recall
检索 Recall 是从记忆库中查找相关信息的过程,帮助 AI 在回答前”想起”相关信息,而不是只依赖当前这一轮对话。
与普通关键词搜索不同,Recall 不只是匹配字面词语,还会综合语义、关键词、关系和时间等多种方式理解问题,再对结果进行整合与排序,优先返回最有助于当前任务的记忆内容。当用户提出问题或 Agent 开始执行任务时,Agent 记忆服务会根据当前问题,从长期记忆中找出最相关的内容,补充上下文,生成更准确、更连贯的回答。
什么时候需要检索记忆
在以下场景中,建议使用 Recall 检索相关记忆:
- 当用户发起新问题时:Agent 可以先查找与当前问题相关的历史上下文,再生成更贴合用户需求的回答。
- 当需要参考历史背景时:用户希望继续之前的任务、沿用过往决策,或让 Agent 理解项目已有进展。
- 当需要个性化回答时:根据用户偏好、常用工具、写作风格或业务习惯,提供更符合用户习惯的响应。
- 当构建 Agent 的任务上下文时:在 Agent 执行较复杂任务前,可以先检索必要记忆,帮助它更好地理解任务背景,减少重复确认。
多维检索策略
Agent 记忆服务会从多个角度理解用户的问题,并融合不同检索方式的结果,优先返回最相关的记忆内容。
| 检索策略 | 说明 | 适合查询 |
|---|---|---|
| BM25 关键词 | 明确词语的精确匹配,适合查找专有名词、代码标识符和技术术语。 | 代码标识符、产品名、⼯单号、专有名词。 |
| 语义向量 | 理解问题的含义,即使用户没有使用完全相同的关键词,也能找到相关记忆。 | ⽤户偏好、项⽬⽬标、抽象概念。 |
| 知识图谱 | 根据人物、项目、系统、客户等实体之间的关系网络,发现间接相关的信息。 | ⼈物、项⽬、系统、客户之间的关系问题。 |
| 时间 | 模拟人类遗忘曲线,优先参考较新的记忆,让近期状态、最新计划和当前进展获得更高权重。 | 最近状态、当前计划、阶段性进展。 |
系统将这些策略生成的检索结果进行合并和排序,减少无关内容干扰,确保最终结果与查询高度相关。
需要提供哪些信息
| 信息项 | 是否必填 | 说明 |
|---|---|---|
| query | 必填 | 用户当前的问题或任务描述,建议使用自然语言表达。 |
| budget | 可选 | 控制检索强度,可选择 low、mid 或 high。 |
| tags | 可选,推荐使用 | 用于限定检索范围,例如只检索某个用户、项目或团队下的记忆。 |
| tag_match | 可选 | 用于设置标签匹配方式,帮助更准确地控制哪些记忆可以被检索到。 |
Budget参数:选择合适的检索强度
支持不同的检索强度,用户可以根据任务复杂度进行选择。
| 检索强度 | 适合场景 | 响应时长 | 说明 |
|---|---|---|---|
| low | 简单事实查询 | 50-100ms | 响应更快,适合查找明确、简单的信息。 |
| mid | 日常使用场景 | 100-300ms | 在速度和准确性之间取得平衡,适合大多数场景,推荐作为默认选择。 |
| high | 复杂分析任务 | 300-500ms | 检索范围更深,适合跨主题总结、复杂判断或需要更完整上下文的任务。 |
对于大多数 Agent 使用场景,建议优先使用mid,既能保证较好的检索效果,也不会带来过高的响应成本。
tag_match 参数:控制标签匹配范围
在使用 Recall 检索记忆时,tags 用来指定检索范围,即“从哪些范围中找记忆”;tag_match 用来决定这些标签如何匹配,即“这些范围要如何匹配”。在单用户或简单场景中,可以使用默认匹配方式;在多用户、多项目或多 Agent 共享同一个记忆库时,建议使用更严格的匹配方式,避免召回无关数据。
| 取值 | 含义 | 适合场景 | 简单理解 |
|---|---|---|---|
| any | 只要记忆匹配 tags 中任意一个标签,就可能被召回。 | 个人使用、单项目使用,或对隔离要求不高的场景。 | 只想大致限制范围 |
| all | 记忆需要同时匹配 tags 中的所有标签,才更容易被召回。 | 需要同时限定用户和项目范围的场景。 | 想同时限定用户和项目 |
| any_strict | 只召回明确带有 tags 中任意一个标签的记忆,不召回未打标签的记忆。 | 多用户共享记忆库,但只需要匹配其中一个范围的场景。 | 不希望召回没有标签的公共记忆 |
| all_strict | 只召回同时带有所有指定标签的记忆,范围最严格。 | 多用户、多项目、多租户场景,推荐用于严格数据隔离。 | 涉及多用户或权限隔离 |
例如,当一个记忆库中同时保存了多个用户和多个项目的数据时,可以在检索时指定:tags: ["user:alice", "project:atlas"], tag_match: "all_strict"
这表示系统只会检索同时属于Alice 用户和Atlas 项目的记忆,避免其他用户或其他项目的内容被错误召回。
使用建议
- 在 Agent 开始任务前检索记忆:当任务需要理解用户偏好、项目背景或历史决策时,建议先使用 Recall 获取相关上下文。
- 优先用于高频上下文补充:日常对话、任务执行和上下文注入场景中,优先使用 Recall;它更适合快速查找相关记忆。
- 用自然语言描述检索需求:query 可以直接使用用户问题或任务描述,例如“这个用户偏好的前端技术栈是什么?”或“这个项目之前有哪些关键决策?”。
- 保留专有名词和关键信息:如果问题中包含项目名称、产品名称、代码标识符或工单号,建议直接写入 query,有助于提高召回准确性。
- 使用 tags 限定检索范围:在多用户、多项目或共享记忆库场景中,建议通过 tags 限定只检索相关用户、项目或团队的数据。
- 多用户场景使用严格标签匹配:如果多个用户或项目共用同一个记忆库,建议使用 any_strict 或 all_strict,避免召回无关或未标记的数据。
- 控制返回内容大小:可以通过 max_tokens 控制返回上下文的长度,避免向 Agent 注入过多无关信息。
- 需要总结判断时使用反思:检索更适合查找相关记忆;如果用户需要总结、分析、画像或判断,建议使用反思。
请求示例
检索用户的前端技术偏好
1curl "$MEMORY_API_BASE_URL/recall" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bank_id": "'"$MEMORY_BANK_ID"'",
6 "query": "这个用户偏好的前端技术栈是什么?",
7 "budget": "mid",
8 "tags": ["user:alice"],
9 "tags_match": "any_strict",
10 "max_tokens": 1200
11 }'
返回示例
1{
2 "results": [
3 {
4 "id": "f1a2b3c4",
5 "text": "用户前端技术栈使用 TypeScript + React + Tailwind,状态管理使用 Zustand",
6 "type": "experience",
7 "context": "project onboarding",
8 "tags": ["user:alice", "project:frontend"],
9 "mentioned_at": "2026-05-25T10:00:00+08:00",
10 "document_id": "session-20260525"
11 },
12 {
13 "id": "g5h6i7j8",
14 "text": "团队引入 Storybook 做组件文档,部署在 Vercel 上",
15 "type": "experience",
16 "context": "project onboarding",
17 "tags": ["user:alice", "project:frontend"],
18 "mentioned_at": "2026-05-25T10:30:00+08:00",
19 "document_id": "session-20260525"
20 }
21 ]
22}
检索结果按相关性排序,Agent 可将 results 中的 text 字段作为上下文注入,生成更贴合用户的回答。
评价此篇文章
