【AI面试临阵磨枪-30】如何设计 Agent 长短期记忆?对比 FullHistory、SlidingWindow、Summary、Vector 记忆

一、面试题目

面试官:请你讲解如何设计 AI Agent 的长期记忆与短期记忆架构?并对比 FullHistory、SlidingWindow、Summary 摘要记忆、Vector 向量记忆四种记忆方案的原理、优缺点及适用场景。

二、知识储备

1. Agent 长短期记忆整体设计思路

短期记忆(Short-Term Memory)

  • 定位:当前任务会话上下文,生命周期仅限单次对话 / 当前任务。
  • 作用:保存实时对话轮次、当前执行状态、临时中间结果,给模型提供即时上下文。
  • 特点:低延迟、直接塞入 Prompt、容量小、随会话销毁

长期记忆(Long-Term Memory)

  • 定位:跨会话永久沉淀知识,用户偏好、历史习惯、过往任务记录、业务经验。
  • 作用:跨轮、跨天、跨会话复用,让 Agent 越用越懂用户。
  • 特点:持久化存储、需要检索筛选、不全部塞进 Prompt、按需召回

整体架构设计

  1. 对话实时内容进短期记忆
  2. 定时 / 任务结束后提炼关键信息,沉淀到长期记忆
  3. 每轮推理前,从长期记忆检索相关内容,拼接到短期上下文;
  4. 控制总 Token 上限,避免上下文溢出、推理耗时过高。

2. 四种记忆方案原理 + 优缺点 + 适用场景

1)FullHistory 完整历史记忆

核心定义所有对话记录完整原样全部拼接进 Prompt,每轮都喂给大模型。

优点

  • 信息无丢失、逻辑最完整;
  • 实现最简单,无需任何复杂处理。

缺点

  • 轮次越多 Token 爆炸,极易上下文溢出
  • 推理成本高、延迟大、冗余信息多;
  • 完全不适合长会话、长期使用。

适用场景

  • 对话轮次极少的简单问答;
  • 测试 Demo、临时一次性会话;
  • 教学演示、极简 Bot。

2)SlidingWindow 滑动窗口记忆

核心定义 只保留最近 N 轮对话,超出窗口的旧记录直接丢弃,像滑动窗口一样固定长度。

优点

  • 严格控制 Token 数量,不会溢出;
  • 实现简单、开销低、延迟稳定;
  • 能保留近期上下文连贯性。

缺点

  • 丢弃窗口外历史,丢失远期关键信息
  • 无法跨会话记忆、没有长期沉淀能力;
  • 固定窗口不够灵活,重要旧信息也会被删掉。

适用场景

  • 日常多轮闲聊、客服对话;
  • 单任务短流程 Agent;
  • 对延迟敏感、不需要久远历史的场景。

3)Summary 摘要记忆(压缩总结)

核心定义 不保存原始完整对话,定期让 LLM 自动提炼摘要、浓缩关键信息,用摘要代替原始历史塞进 Prompt。

优点

  • 极大节省 Token,保留核心逻辑、舍弃冗余;
  • 上下文不容易溢出,支持更长会话;
  • 能保留跨轮关键意图和用户偏好。

缺点

  • 摘要可能丢失细节、产生信息失真
  • 每轮摘要会额外消耗 LLM 调用成本;
  • 多分支复杂对话,摘要容易逻辑错乱。

适用场景

  • 长文档多轮解读、长篇创作;
  • 持续多轮任务对话、办公助手;
  • 需要长上下文但不想用向量库的轻量化 Agent。

4)Vector 向量记忆(RAG 式长期记忆)

核心定义 把历史对话、用户信息、任务记录做 Embedding 向量化 ,存入向量数据库;每轮提问时语义检索召回相关记忆,动态拼入上下文。

优点

  • 真正实现永久长期记忆、跨会话复用
  • 按语义精准召回,不相关内容不混入 Prompt;
  • 不受轮次限制,支持海量历史沉淀;
  • 可做记忆增删、查询、遗忘、更新。

缺点

  • 架构最重,依赖 Embedding 模型 + 向量库;
  • 有额外向量存储、检索开销;
  • 语义召回存在匹配不准的概率。

适用场景

  • 生产级 AI Agent、私人助理;
  • 需要记住用户长期偏好、历史习惯;
  • 知识库问答、个性化陪伴、长期任务运维。

3. 工程级最佳组合设计

短期记忆 :SlidingWindow + 局部 Summary长期记忆:Vector 向量记忆组合逻辑:

  1. 近期 N 轮用滑动窗口保实时连贯;
  2. 超长会话做摘要压缩控 Token;
  3. 历史久远内容向量化存入向量库;
  4. 每轮先向量检索相关长期记忆,再拼接短期上下文,一起给 LLM 推理。

三、破局之道

在面试中,用这段话展现架构设计深度:设计 Agent 长短期记忆,核心本质是在上下文 Token 限制、信息完整性、推理成本三者之间做平衡

FullHistory 是最简单但不可落地,只能做 Demo;SlidingWindow 用固定窗口控制长度,保证近期对话连贯但丢失远期信息;Summary 通过大模型摘要压缩信息,在保留关键逻辑的同时降低 Token 开销;Vector 向量记忆是生产级长期记忆的标准方案,依靠语义 Embedding + 向量检索,实现海量历史永久沉淀、按需精准召回。

真正企业级 Agent 不会只用一种记忆策略,而是采用滑动窗口做短期实时上下文、摘要做长会话压缩、向量库做跨会话长期记忆的混合架构,既保证当前任务连贯,又能长期记住用户偏好,同时严格控制上下文长度与推理成本,这是工业级记忆设计的标准思路。

四、代码实现

1. Python 版本

python 复制代码
# 1. FullHistory 完整历史
class FullHistoryMemory:
    def __init__(self):
        self.history = []
    def add(self, query, resp):
        self.history.append({"q":query, "a":resp})
    def get_context(self):
        # 全部历史直接拼接
        return "\n".join([f"用户:{h['q']}\n助手:{h['a']}" for h in self.history])

# 2. SlidingWindow 滑动窗口
class SlidingWindowMemory:
    def __init__(self, window_size=5):
        self.history = []
        self.window_size = window_size
    def add(self, query, resp):
        self.history.append({"q":query, "a":resp})
        # 超出窗口截断
        if len(self.history) > self.window_size:
            self.history = self.history[-self.window_size:]
    def get_context(self):
        return "\n".join([f"用户:{h['q']}\n助手:{h['a']}" for h in self.history])

# 3. Summary 摘要记忆
class SummaryMemory:
    def __init__(self):
        self.raw_history = []
        self.summary = ""
    def add(self, query, resp):
        self.raw_history.append(f"用户:{query}\n助手:{resp}")
        # 每满3轮生成一次摘要
        if len(self.raw_history) % 3 == 0:
            self.summary = llm(f"请精简总结以下对话核心内容:\n{self.raw_history}")
    def get_context(self):
        return f"对话摘要:{self.summary}\n近期对话:{self.raw_history[-2:]}"

# 4. Vector 向量记忆(简化模拟)
class VectorMemory:
    def __init__(self):
        self.vector_db = []
    def add_memory(self, text):
        # 模拟 embedding 存入向量库
        vec = embedding(text)
        self.vector_db.append({"text":text, "vec":vec})
    def recall(self, query, top_k=2):
        # 模拟语义检索召回相关记忆
        q_vec = embedding(query)
        # 简化:直接返回最近两条
        return [item["text"] for item in self.vector_db[-top_k:]]

2. JavaScript 版本

javascript 复制代码
// 1. FullHistory 完整历史
class FullHistoryMemory {
  constructor() {
    this.history = [];
  }
  add(query, resp) {
    this.history.push({q: query, a: resp});
  }
  getContext() {
    return this.history.map(h => `用户:${h.q}\n助手:${h.a}`).join("\n");
  }
}

// 2. SlidingWindow 滑动窗口
class SlidingWindowMemory {
  constructor(windowSize = 5) {
    this.history = [];
    this.windowSize = windowSize;
  }
  add(query, resp) {
    this.history.push({q: query, a: resp});
    if (this.history.length > this.windowSize) {
      this.history = this.history.slice(-this.windowSize);
    }
  }
  getContext() {
    return this.history.map(h => `用户:${h.q}\n助手:${h.a}`).join("\n");
  }
}

// 3. Summary 摘要记忆
class SummaryMemory {
  constructor() {
    this.rawHistory = [];
    this.summary = "";
  }
  async add(query, resp) {
    this.rawHistory.push(`用户:${query}\n助手:${resp}`);
    if (this.rawHistory.length % 3 === 0) {
      this.summary = await llm(`精简总结对话:${this.rawHistory}`);
    }
  }
  getContext() {
    return `摘要:${this.summary}\n近期:${this.rawHistory.slice(-2)}`;
  }
}

// 4. Vector 向量记忆 简化版
class VectorMemory {
  constructor() {
    this.store = [];
  }
  addMemory(text) {
    let vec = embedding(text);
    this.store.push({text, vec});
  }
  recall(query, topK = 2) {
    return this.store.slice(-topK).map(item => item.text);
  }
}
相关推荐
沅柠-AI营销1 小时前
小品牌的GEO优化落地策略:2026年AI搜索时代的低成本突围指南
人工智能·agent·ai搜索优化·geo优化·品牌策略·中小品牌营销·geo优化技巧
NQBJT1 小时前
VS Code配置Python人工智能开发环境
开发语言·人工智能·vscode·python
@不误正业1 小时前
鸿蒙小艺智能体开放平台实战-接入系统级AI-Agent能力
人工智能·华为·harmonyos
月诸清酒1 小时前
47-260429 AI 科技日报 (HappyHorse 1.0 登顶文本转视频模型排行榜)
人工智能
byoass1 小时前
智巢AI知识库深度解析:企业文档管理从大海捞针到精准狙击的进化之路
开发语言·网络·人工智能·安全·c#·云计算
掘金一周1 小时前
你们觉得房贷多少,没有压力 | 沸点周刊 4.30
前端·人工智能·后端
美狐美颜SDK开放平台1 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
桜吹雪2 小时前
Langchain.js官方文档:构建具备按需加载技能的 SQL 助手
javascript·人工智能·node.js
ting94520002 小时前
深入解析 Social Fetch 机制:原理、架构、应用场景、实战落地与性能优化全攻略
人工智能·性能优化·架构