Skip to content

Commit ac9baba

Browse files
Update mem_recall.md
1 parent 5bd4f4b commit ac9baba

File tree

1 file changed

+10
-244
lines changed

1 file changed

+10
-244
lines changed
Lines changed: 10 additions & 244 deletions
Original file line numberDiff line numberDiff line change
@@ -1,262 +1,28 @@
11
---
2-
title: 记忆召回和指令补全
3-
desc: 在 MemOS 中,记忆不仅仅是信息的存档,还要能够在需要时被动态取用,并转化为可执行的输入。这一过程由两个紧密衔接的环节完成:记忆召回 与 指令补全。
2+
title: 记忆召回
3+
desc: 在 MemOS 中,记忆不仅仅是信息的存档,还要能够在需要时被动态取用,并转化为可执行的输入。
44
---
55

66
## 1. 能力介绍
77

8-
### 1.1 记忆召回
9-
108
记忆召回负责在用户发起新请求时,快速检索出与任务最相关的记忆片段。
119

1210
* **作用**:确保模型在生成回答时,不是“从零开始”,而是结合用户历史、偏好、上下文。
1311

14-
* **返回结果**召回的内容以明文事实形式呈现
12+
* **返回结果**召回的内容以事实+偏好两种形式呈现
1513

1614
* 可溯源:每条记忆均附带来源、时间戳和置信度。
1715

1816
* 高可控:开发者可以完全掌握哪些记忆进入下游逻辑。
19-
20-
21-
### 1.2 指令补全(敬请期待)
22-
23-
需要注意的是,“事实”并不等于“指令”。开发者若只得到明文记忆,还需要额外写规则,才能将这些信息转译成大模型能直接执行的 Prompt。
24-
25-
:::note
26-
**指令补全的作用,** 就是在召回结果的基础上,自动生成不同粒度的指令
27-
:::
28-
29-
* **在多数系统里,开发者只能拿到“记忆事实”,然后自己拼接 Prompt。但这会遇到几个痛点:**
30-
31-
* 任务感知:同一条记忆,在不同任务下需要不同表述;
32-
33-
* 个性化偏好:用户风格、习惯需要被即时补齐;
34-
35-
* 动态优化:不同模型对 Prompt 的最优写法不同;
36-
37-
* 高效压缩:需要去除冗余,降低 token 消耗。
38-
39-
40-
<br>
41-
42-
* **MemOS 的指令补全帮开发者完成这部分“最后一公里”的工作:**
43-
44-
* 省去规则拼接和调优成本;
45-
46-
* 确保召回的记忆能被真正有效利用;
47-
48-
* 提供 matches / instruction / full\_instruction 三种模式,满足不同程度的控制需求。
49-
50-
* 记忆事实(matchs):召回当前Query的相关记忆
51-
52-
* 半成品指令(instruction):将召回的记忆与用户当前问题拼接,形成基础 Prompt,开发者可在此之上继续添加业务逻辑。
53-
54-
* 完整指令(full\_instruction):在半成品的基础上,结合上下文、偏好、合规约束等,生成可直接下发给模型的终端 Prompt。
55-
56-
57-
<br>
58-
59-
:::note
60-
指令补全由 **离线链路** 与 **实时链路** 共同作用
61-
:::
62-
63-
| **链路** | **说明** |
64-
| --- | --- |
65-
| **离线链路**(沉淀与准备) | 抽取用户偏好,形成档案。<br> <br> 构建 few-shot 样例库。<br> <br> 固化品牌、合规、风格等长期规则。 |
66-
| **实时链路**(动态决策) | 根据任务意图,选择当前要启用的记忆与模板。<br> <br> 裁决冲突(如“喜欢诗经开头” vs “要求简洁”)。<br> <br> 根据 token 预算和模型特性,做压缩与降级。 |
67-
68-
69-
## 2. 案例(需待指令补全上线)——AI教育中的个性化辅导
70-
71-
### 2.1 历史对话输入(原始材料)
72-
73-
```json
74-
2025-06-10
75-
学生:老师你好我叫小明,今年初三
76-
老师:你好小明,很高兴认识你
77-
……
78-
79-
2025-08-01
80-
学生:老师,这题我总算不出来,能不能讲清楚点?
81-
老师:好的,我会一步一步给你解释。
82-
……
83-
84-
2025-09-03
85-
……
86-
学生:你刚刚讲得太长了,我有点跟不上。能不能简单一点?
87-
老师:行,那我用更简短的方法告诉你。
88-
……
89-
90-
2025-10-09
91-
学生:我还是分不清一次函数和二次函数……
92-
老师:一次函数的图像是直线,二次函数是抛物线,你要记住这个区别。
93-
……
94-
```
95-
96-
### 2.2 MemOS指令偏好建模(离线链路)
97-
98-
* **偏好抽取**
99-
100-
* 喜欢分步骤讲解(来自“能不能一步一步讲”)。
101-
102-
* 偏好简洁(来自“你刚刚讲得太长了”)。
103-
104-
* 容易混淆相似概念(来自“我还是分不清一次函数和二次函数”)
105-
106-
* **few-shot 挑选**:挑出带分步骤、简洁解释、概念澄清的对话。
107-
108-
* **策略总结**:总结为“分步骤 + 简洁 + 澄清常见混淆”。
109-
110-
111-
```yaml
112-
user_teaching_template_u123:
113-
audience: "初三学生"
114-
task: "解答数学题"
115-
structure:
116-
- "分步骤讲解(3–4 步)"
117-
- "必要时先纠正一次函数与二次函数的混淆"
118-
constraints:
119-
- "讲解简洁,不要太长"
120-
- "重点突出,避免大段公式推导"
121-
122-
fewshot_examples_u123:
123-
- id: "fs-step-01"
124-
user: "老师,这题我总算不出来,能不能讲清楚点?"
125-
assistant: "好的,我会一步一步给你解释……"
126-
tag: "分步骤讲解"
127-
128-
- id: "fs-brief-02"
129-
user: "你刚刚讲得太长了,我有点跟不上。能不能简单一点?"
130-
assistant: "行,那我用更简短的方法告诉你……"
131-
tag: "简洁表达"
132-
133-
- id: "fs-contrast-03"
134-
user: "我还是分不清一次函数和二次函数……"
135-
assistant: "一次函数的图像是直线,二次函数是抛物线,你要记住这个区别……"
136-
tag: "概念澄清"
137-
```
138-
139-
### 2.3 实时链路(指令补全)
140-
141-
:::note{icon="ri:message-2-line"}
142-
用户提问【老师,你能教我解一下这个题吗?2x² - 3x - 5 = 0】
143-
:::
144-
145-
* **召回记忆matches:** 只返回事实,未加工。开发者需要自行拼接 Prompt、决定如何引导学生解题。
146-
147-
148-
```yaml
149-
matches:
150-
- value: "初三学生"
151-
score: 0.95
152-
source: "对话记录#2025-06-10"
153-
154-
- value: "偏好分步骤讲解"
155-
score: 0.94
156-
source: "对话记录#2025-08-01"
157-
158-
- value: "喜欢简洁的解释"
159-
score: 0.92
160-
source: "对话记录#2025-09-03"
161-
162-
- value: "分不清一次函数和二次函数概念"
163-
score: 0.90
164-
source: "对话记录#2025-10-09"
165-
166-
user_query: "老师,你能教我解一下这个题吗?2x² - 3x - 5 = 0"
167-
```
168-
169-
<br>
170-
171-
* **半成品指令 instruction:** 将事实转译成结构化要求:任务 / 受众 / 步骤 / 限制
172-
173-
174-
```yaml
175-
instruction: |
176-
任务:帮学生解答二次函数题目
177-
受众:初三学生
178-
要求:
179-
- 分 3–4 步讲解
180-
- 在讲解过程中纠正一次函数/二次函数的常见混淆
181-
- 保持简洁,避免冗长推导
182-
备注:如题目不完整,请先提出澄清问题
183-
184-
user_query: "老师,你能教我解一下这个题吗?2x² - 3x - 5 = 0"
185-
```
186-
187-
<br>
188-
189-
* **完整指令 full\_instruction:** 在半成品基础上进一步加工
17+
18+
* **特点**
19019

191-
* 将“常混淆”转化为具体教学动作(在讲解时必须强调二次函数与一次函数的区别)
192-
193-
* 把“分步骤讲解”的偏好转译为明确的解题方式(用分步骤的形式进行说明)
194-
195-
* 将“初三学生”改写为教学场景中的角色关系(你是一名初三学生的数学老师)
20+
* 无感召回:用户无需重复说明自己之前的选择或偏好
19621

197-
* 从历史对话中挑选 few-shot 示例,补充到最终指令中,帮助模型更好学习解题和澄清的模式
198-
199-
200-
> 半成品偏结构化,方便开发者二次加工;完整指令偏自然语言,更贴近模型直接执行。
201-
202-
```yaml
203-
final_prompt_to_model:
204-
- role: system
205-
content: |
206-
你是一名初三学生的数学老师。
207-
学生在学习时经常把一次函数和二次函数混淆,且更喜欢简洁、分步骤的讲解。
208-
请参考以下历史示例的风格:
209-
210-
【示例 1】
211-
学生:老师,这题我总算不出来,能不能讲清楚点?
212-
老师:好的,我会一步一步给你解释。
213-
214-
【示例 2】
215-
学生:你刚刚讲得太长了,我有点跟不上。能不能简单一点?
216-
老师:行,那我用更简短的方法告诉你。
217-
218-
【示例 3】
219-
学生:我还是分不清一次函数和二次函数……
220-
老师:一次函数的图像是直线,二次函数是抛物线,你要记住这个区别。
221-
222-
现在请回答学生问题:“解 2x² - 3x - 5 = 0”。
223-
要求:
224-
- 用分步骤方式解题(3–4 步);
225-
- 在讲解中指出一次函数与二次函数的区别;
226-
- 保持答案简洁清晰,避免冗长推导;
227-
- 如果题目信息不足,请先提出澄清问题。
228-
- role: user
229-
content: "老师,你能教我解一下这个题吗?2x² - 3x - 5 = 0"
230-
```
231-
> 案例总结:在“初三学生解二次函数”的场景中,指令补全相比只返回原始记忆有如下增益
232-
233-
* **从事实到可执行**
234-
235-
236-
* 原始记忆只有“学生常混淆二次函数和一次函数”,开发者需要自己转化为教学动作。
237-
238-
* 指令补全直接生成“讲解时必须强调关键区别”,避免开发者额外写规则。
239-
240-
* **上下文融合**
241-
242-
* 原始记忆是零散片段,开发者要自己判断如何放进 Prompt。
243-
244-
* 指令补全自动把记忆和用户问题融合成一个连贯的任务描述,模型可直接使用。
245-
246-
* **优化与裁剪**
247-
248-
* 如果开发者直接拼接记忆,结果往往冗余或冲突。
249-
250-
* 指令补全自动压缩为简洁的步骤要求,减少 token 消耗,也提升回答聚焦度。
251-
252-
* **健壮性保障**
253-
254-
* 开发者如果只拿到记忆,还得考虑“题目不完整怎么办”。
255-
256-
* 指令补全内置了澄清策略,让输出更稳健,无需开发者重复造轮子。
22+
* 结构化输出:区分事实 / 偏好,便于开发者控制是否注入
25723

25824

259-
## 3. 进阶:如果你想做深度定制
25+
## 2. 进阶:如果你想做深度定制
26026

26127
在 MemOS 中,召回与补全的实现方式并非单一路径,而是由多种策略与组件组合完成。不同场景可能需要不同的配置,本节列出主要环节与可定制点,供你根据业务需要灵活选择。
26228

@@ -275,13 +41,13 @@ final_prompt_to_model:
27541
| | A/B 测试 | 同时运行两套拼接模板,比较用户满意度差异 |
27642

27743

278-
## 4. 下一步行动
44+
## 3. 下一步行动
27945

28046
了解MemOS更多核心能力
28147

28248
* [记忆生命周期管理](/overview/quick_start/mem_lifecycle)
28349

28450

285-
## 5. 联系我们
51+
## 4. 联系我们
28652

28753
<img src="https://cdn.memtensor.com.cn/img/1758685658684_nbhka4_compressed.png" alt="image" style="width:70%;">

0 commit comments

Comments
 (0)