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