Memory-of-Thought Prompting

prompt提示词2026年6月7日2

Memory-of-Thought Prompting(Li & Qiu, 2023b)的要点是:把模型在“无标注训练样本”上生成的 CoT 推理过程,当作一种可检索的“记忆库”;测试时针对当前题目,**检索相似样本的(问题+模型生成的推理链)**来组成 few-shot CoT prompt,从而提升推理表现。


1) 方法分两阶段

A. 测试前(离线):为无标注样本生成“Thought Memory”

给定一批无标注训练样本 (U={x_i})(只有题目/输入,没有答案/解释):

  1. 对每个 (x_i) 用 CoT 提示让 LLM 生成推理链(以及可选的最终答案)。
  2. 把结果存成“记忆条目”(memory item):
    • 输入/问题:(x_i)
    • 模型推理:(r_i)(chain-of-thought)
    • (可选)模型答案:(y_i)
    • (可选)embedding/索引信息,便于后续检索

直觉:即使没有人工标注答案,模型生成的推理链仍然携带了任务结构、解题套路、常用中间步骤等,可作为“范例”。


B. 测试时(在线):检索相似记忆,动态构造 few-shot CoT prompt

对测试样本 (x):

  1. 在记忆库中检索与 (x) 最相似的若干条(top-k),得到 ({(x_j, r_j, y_j)})。
    • 相似度可用:文本向量 embedding cosine、BM25、或任务特定特征。
  2. 将这些检索到的条目作为 few-shot exemplars,拼成 prompt,例如:
    • Example: 问题 (x_j)
    • Reasoning: (r_j)
    • Answer: (y_j)(如果保存了)
  3. 把当前测试问题 (x) 接在后面,让模型在这些“记忆示例”引导下生成自己的 CoT 与答案。

2) 它与“检索增强(RAG)”/“few-shot检索”的区别

  • 传统 RAG 常检索的是外部知识文档(事实文本)。
  • Memory-of-Thought 检索的是推理过程本身(thoughts/rationales):更像“解题套路库/推理模板库”。
  • 传统 few-shot retrieval 多检索(问题→相似问题)然后把(问题, 正确答案)塞进 prompt;但这里很多是无标注数据,因此用“模型生成的 CoT”来充当可用示例。

3) 为什么可能有效(直觉)

  • 对算术、常识、事实推理等任务,许多题目共享相似的推理结构(比如“先找关系→再做一步转换→再比较/求和”)。
  • 检索到的 CoT 等于给模型提供了“近邻题的解题脚手架”,比随机 few-shot 更对症。
  • 利用无标注数据扩充示例来源,成本低(主要成本是离线生成 CoT)。

4) 实现时的关键设计点

  • 记忆库规模:无标注样本越多,覆盖越好,但离线生成与索引成本更高。
  • 检索信号:用 embedding(更泛化)还是 BM25(更精确匹配关键词),或混合检索。
  • 是否保存 Answer:无标注时答案是模型猜的,可能错;有的实现只放“推理过程”,避免把错误最终答案当成强监督信号。
  • 去噪/筛选:可用自一致性、置信度、规则校验(算术可验算)过滤明显错误的记忆条目。
  • 提示格式:要明确区分“示例”和“当前题”,并保持 reasoning/answer 的结构一致。

5) 适用场景与效果(按你给的描述)

该技术在 Arithmetic、commonsense、factual reasoning 等基准上报告了显著提升。一般最受益的是:题目可被相似结构复用且检索能找到“近邻题”的任务。


如果你希望我把它写成一段可直接实现的伪代码(离线构建 memory + 在线检索组 prompt + 推理),告诉我你偏好用 embedding 检索还是 BM25,以及你的任务输出是多选还是数值/短答案。