← 文章 / 未分类
bytebytego 6小时前 · 2026-09-16 14:00:37 · 1 阅读

大语言模型拥有金鱼般的记忆吗?

Agent 能写代码,但要让代码符合你的系统、团队规范和历史决策才是难点,结果就是在反复纠错中浪费时间和 token。

更多的 MCP、规则和更大的上下文窗口能让 agent 获取信息,但不等于理解。真正跑在前面的团队,都有一层上下文层,为 agent 精准提供当前任务所需的内容。

9 月 23 日免费网络研讨会,你将看到:

  • 团队在 AI 成熟度曲线上的常见卡点,以及为什么常规方案不够用

  • 上下文层如何同时解决质量、效率和成本问题

  • 现场演示:同一个编码任务,有无上下文层的对比

如果你想让 AI agent 发挥最大价值,这场分享值得一听。

立即报名


LLM 可以分析一份 100 页的文档,看懂复杂的编程讨论,还能引用几条消息之前聊过的内容。可一旦我们新开一个对话,之前的交流内容它就立刻忘得一干二净——看起来 LLM 的记忆和金鱼差不多。

这个观察没错。LLM 通常不会对之前的交互保留任何个人记忆或持久记忆。那它是怎么引用我们过去说过的话的呢?

实际上,LLM 并不像人类那样记住一段对话,而是我们每发送一条新消息时,模型都会收到截至当前的完整对话信息。这些工作都是由围绕模型构建的应用来完成的,而不是模型本身。比如,一个聊天应用可能会存储消息、维护早期讨论的摘要、检索相关记忆、维护用户画像,然后按需把这些信息的一部分放在模型面前。从用户角度看,模型像是记得一切;但从技术上讲,做“记忆”这件事的其实是周边应用。

模型与其外围应用之间的区别,是理解 LLM 记忆的关键。

这种设计会带来重要影响。随着对话不断增长,应用必须处理越来越多的文本,从而推高成本和延迟。最终,对话会大到超出模型上下文窗口的容量。此时,较早的信息必须被移除、摘要,或存储到其他位置。

本文将介绍 LLM 如何处理记忆,使其能够在执行需要多轮对话和上下文保持的复杂任务时,对最终用户真正有用。

LLM 的「记忆」是什么意思?

在 LLM 语境下,“记忆”一词指代几种不同的事物,不应混淆。下面逐一详细介绍。

训练记忆

训练阶段,LLM 从海量数据中学习模式。这些模式被编码在数十亿个数值中,称为参数或权重。

正因如此,模型无需在当前的 prompt 中接收相关知识,就能解释 JavaScript、识别常见的历史事件或撰写邮件。

但这并非个人记忆。如果用户告诉模型“我最喜欢的编程语言是 TypeScript”,标准的 API 响应并不会重写模型的权重。基础模型不会通过对话永久记住这一事实。

工作记忆

模型的临时工作记忆就是其上下文窗口。它包含模型在生成当前响应时所能考虑的所有内容。

它可能包括:

  • 系统和开发者指令

  • 当前用户消息

  • 对话中的历史消息

  • 检索到的文档

  • 工具描述与工具结果

  • 保存的用户偏好

  • 早期对话的摘要

  • 为模型输出预留的空间

上下文窗口更像一张办公桌,而非人类记忆。模型只能处理放在桌上的文档。一旦桌子清空,除非应用程序再次将文档放回桌面,模型无法自行恢复这些信息。

持久化应用内存

持久化记忆通常存储在模型外部,例如数据库、文件、向量存储或用户画像服务中。当模型需要这些信息时,应用程序会将其检索出来并插入到当前上下文中。

因此,模型本身并不具备持久化记忆。它只是从其他系统中接收持久化信息。


构建并扩展制胜的 AI 智能体策略(赞助内容)

将智能体部署到生产环境相对容易。挑战在于保持其可靠性、可治理性,并实现持续改进,大多数企业 AI 项目正是在这里停滞不前。

顶尖团队是如何做到的?他们采用智能体运营模型(AOM),这是一个逐步框架,旨在协调人员、流程和技术,使企业智能体在规模扩展的同时不断优化。

在 LangChain 的最新指南中,你将学到:

  • 为什么 AI 智能体的故障模式不同于传统软件

  • 覆盖智能体全生命周期的工程堆栈

  • 从“构建与部署”转向“运营与持续改进”的思维转变

了解更多


基础 API 调用过程中发生了什么?

考虑一个最简单的 API 请求:

{
  "messages": [
    {
      "role": "user",
      "content": "My name is Adam."
    }
  ]
}

模型可能会回答:“很高兴见到你,Adam。”

假设下一个请求只包含以下内容:

{
  "messages": [
    {
      "role": "user",
      "content": "What is my name?"
    }
  ]
}

由于第二个请求中未包含姓名,且前一个请求已结束,模型无法可靠地回答。模型内部并不存在持续更新的私密日记本。

为了让对话能继续,应用必须把之前的对话内容重新发送一遍:

{
  "messages": [
    {
      "role": "user",
      "content": "My name is Adam."
    },
    {
      "role": "assistant",
      "content": "Nice to meet you, Adam."
    },
    {
      "role": "user",
      "content": "What is my name?"
    }
  ]
}

这样模型就能回答“Adam”了,因为名字出现在了当前的输入中。

大多数模型服务商提供的 Messages API 都是无状态的,进行多轮对话时需要调用方自己提供对话历史。

每次 API 调用真的是从零开始的吗?

一次新的模型调用通常并非完全“一无所知”。模型仍然具备以下东西:

  • 训练得到的权重

  • 通用的语言能力

  • 训练过程中学到的知识

  • 平台提供的安全和行为规则

  • 当前上下文中的所有内容

它缺少的,是针对这个特定用户或这段对话的、自动更新的记忆。

更准确的说法是:模型的每次回复,都是基于它已有的权重加上当次可用的上下文生成的。对话历史中的信息并不会自动延续,除非外部系统主动把它传递下去。

有些 API 提供服务端管理的对话状态。这种情况下,我们就不需要手动重发每一条消息,只需提供一个对话标识符,服务端就能根据它找到之前的消息、重建所需的上下文。这让 API 更好用,但并不意味着模型真的产生了个人记忆。

AI 聊天机器人如何营造出“有记忆”的错觉

假设一段对话中包含五条用户消息和五条助手回复。

当用户发送下一条消息时,应用构造的输入可能包含以下内容:

系统指令

用户消息 1
助手回复 1

用户消息 2
助手回复 2

用户消息 3
助手回复 3

用户消息 4
助手回复 4

用户消息 5
助手回复 5

新的用户消息

模型会将上述内容作为单个大型输入接收。例如,在之前的对话中,用户可能提到过数据库问题,选择了 PostgreSQL,并要求提供 TypeScript 示例。因此,基于这些上下文,模型能够更自然地延续回答。

对用户而言,这可能感觉像是模型记住了之前的事物。然而,从模型的角度来看,这些细节只是当前正在处理的文本中的一部分。我们不应简单地称之为“伪记忆”,因为应用层面确实存在连续性。更准确的术语应该是“重建记忆”或“基于上下文的记忆”。

上下文窗口是工作记忆预算

LLM 的上下文窗口以 token 计量。Token 是文本的最小片段。短词可能对应一个 token,而较长或不常见的词可能会被拆分为多个 token。

上下文窗口通常包含的内容比可见对话多。它还可能包含隐藏指令、工具定义、搜索结果、文档以及生成回答的空间。假设某个模型的上下文窗口为 100K token,应用可能需要将以下内容装入该空间:

  • 系统指令:3,000 token

  • 工具定义:8,000 token

  • 对话历史:55,000 token

  • 检索到的文档:20,000 token

  • 当前问题:1,000 token

  • 剩余回复预算:13,000 token

一旦可用空间耗尽,应用无法无限制地继续添加信息。它必须移除、压缩或替换某些内容。

较大的上下文窗口也并不保证完美的召回能力。随着信息量的增加,模型可能更难区分重要事实与无关、重复或矛盾的内容。这种退化

原始来源: bytebytego

评论 (0)