加载中

上下文如何影响 Claude 的性能和成本

Claude 对世界的一切了解,要么是在训练期间内置到模型中的,要么是当前上下文的一部分。 了解 Claude 的答案来自哪里、您可能在哪些地方使用了比预期更多的令牌,以及如何有意识地权衡成本和质量之间的取舍。

20 分钟

许多人将 AI 聊天用作搜索的替代方式。为了安全地做到这一点,了解 LLM 从哪里获取信息非常重要。当 LLM 产生错误信息时,这通常是缺失、不正确或低质量上下文的副作用。

如果您不知道这种情况为什么会发生,很容易觉得模型是在试图通过编造信息来欺骗您。但一旦您了解了模型的知识来自哪里,您就能更清楚地预见它可能在哪里出错。您还可以看到您的令牌都用在了哪里,并决定何时值得为更多上下文付费。

答案从哪里来

这是一个热身题——尽管猜猜看。

快速检测

当 AI 聊天模型回答您的问题时,答案来自哪里?

三者都会发生。本课将按以下顺序逐一讲解:来自训练的知识、您放入对话中的内容,以及模型自行查找的内容。

参数化记忆

模型有时就是……知道一些事情。这种内置的知识被称为参数化记忆(parametric memory),因为它被内置在模型的权重,即参数(parameters)中。

没有人刻意要构建一部百科全书,但 LLM 能够凭记忆背诵的事实,是其学习预测文本过程中产生的副产品。

参数化记忆的极限

参数化记忆在某些方面表现得比其他方面更好。下面是模型正在通过预测最可能出现的下一个词来撰写的句子。点击即可揭示每个句子接下来的几个词,然后自行判断模型所生成的信息是否正确。

加载中

添加上下文

来看一个 Claude 仅凭训练无法回答的问题。

在这个小组件中,如果我们通过提供额外的上下文来调整问题,这项任务对模型来说会明显变得更容易。

加载中

上下文窗口

语言模型的上下文有一个最大容量。在撰写本文时,当前的 Claude 旗舰模型最多可以容纳一百万个令牌。

这大约相当于三本《白鲸记》(Moby-Dick)的篇幅。那么人们怎么还会用完空间呢?

在 AI 聊天的早期,触及上限就意味着要重新开始。您可能在 2024 年或 2025 年的某个时刻,使用某个聊天界面时自己也遇到过这个上限。然而当这种情况发生时,您明明知道自己写的内容远远少于一本甚至三本小说——我们大多数人都没有那么多话要说。那么您的一百万个令牌都去哪儿了?让我们来一探究竟。

填满窗口

进行一次普通的聊天交互,观察您的上下文窗口是如何被填满的。为了让这个例子便于理解,我们假设有一个上下文窗口小得多的模型,只有 1,000 个令牌。

加载中

压缩

当上下文窗口接近上限时,应用程序会要求 Claude 对迄今为止的整个对话进行总结,然后这份摘要会取代之前存在的上下文。

压缩功能使您能够继续对话,而不必重新开始一段新对话。它的工作原理如下:

  1. 首先,应用程序会注意到这一点。 应用程序不会发送可能导致上下文窗口超负荷的请求,而是暂扣您的下一轮输入,并启动压缩。
  2. 接下来,Claude 进行总结。 迄今为止的对话会连同一个提示一起传递给 Claude,提示内容类似于"附上的是一段人类与模型之间的对话,请对目前为止发生的一切进行总结。"
  3. 最后,对话从这份摘要继续进行。 摘要取代了对话历史,然后第 1 步中被暂扣的查询会被传递给 Claude 以获得回应。

动手试试:压缩

加载中

书面记忆

记忆是一个有硬性限制的窗口能够感觉上是无限的原因:Claude 在一次对话中写下一条笔记,这条笔记会在下一次对话开始时被重新添加回来。

可以把记忆想象成 Claude 以《记忆碎片》(Memento)的方式把事情记录下来,之后再读回来:Claude 小睡之后完全恢复清醒,可以四处查看自己先前为自己写下的记忆文件。我们把这称为书面记忆,以免与参数化记忆混淆。

压缩是 Claude 能够在超出上下文上限后继续进行单次对话的方式。书面记忆则是 Claude 在多次对话之间保持重要细节处于上下文中的方式。

请从左到右阅读这段示意图。周二您表达了一个偏好,Claude 会明显地将其记录下来。然后到了周四,在一次全新的对话中,没有人再次告诉 Claude 这个偏好。但是那条记忆笔记会在您的第一条消息之前悄悄地插入到上下文中。这个过程使 Claude 能够根据您分享的直接反馈,随着时间的推移记住您的偏好。

加载中

这条记忆会进入未来的对话中,即使是在一个没有周二完整上下文的全新会话里也是如此。

不同的 Claude 产品以不同的方式实现记忆。Claude Code 会读取整个代码库中的 CLAUDE.md 文件,而 claude.ai 则将记忆保存在其设置中。但即使位置不同,过程也是一样的:Claude 把重要信息写下来,然后 Claude 的后续实例会在下一次对话开始时把它读回来。

一周的记忆

与同一个助手相处五天。留意它记录下了什么,并将其与它重新查找的内容进行比较。

加载中

前置上下文

放眼全局,在 Claude 看到您的第一个令牌之前,大量内容已经被添加到上下文中。下面的小组件展示了在与 Claude 的对话中可能被添加的前置上下文。具体内容因产品而异。

加载中

智能体上下文

既然您已经了解了上下文对增强 Claude 能力有多重要,理解智能体上下文(agentic context)也同样重要:也就是 Claude 在回答之前决定去获取更多上下文的情况。您在之前关于番茄植株的例子中已经见过这种情况,当时 Claude 使用了搜索工具,而不是凭借参数化记忆或已有的上下文来回答。

在下面的小组件中,请想象您就是 Claude。侧边栏显示了一些在用户消息之前被悄悄插入到上下文中的信息。对于每一个提示,请判断是应该凭借您已经知道的内容来回答,还是应该向外寻求更多上下文。

加载中

Claude 在每一轮都会做出同样的决定,而它多大程度上会主动寻求更多上下文,部分取决于努力程度(effort)设置。在较高的努力程度下,Claude 在回答之前更有可能进行搜索、阅读和核实,这通常意味着更好的答案和更大的上下文窗口。在较低的努力程度下,Claude 更有可能直接作答。了解如何在 Claude 中选择努力程度,或在 Claude Code 中选择。

追溯上下文

来看 Claude 的这个示例回复。每个高亮部分都受到了某些前置上下文的影响。点击某个部分,并判断您认为它来自哪里。

加载中

您现在可以做到的事情

  • 您可以说出权重中的内容(参数化记忆)与窗口中的内容(上下文)之间的区别。
  • 您知道窗口有一个上限,而且您并不是唯一一个在填充它的"作者"。
  • 您知道每一轮都会重新发送整个窗口,并且您可以有意识地决定何时开始一段新会话。
  • 您理解压缩是一种总结技术,它可以让窗口感觉上是无限的,但可能会丢失细节。
  • 您可以解释书面记忆是如何在会话之间保留下来的。
  • 您可以查看 Claude 的回复,并对前置上下文可能如何塑造了这个回复做出一些推测。

下一步:在 Claude 中选择努力程度 · 在 Claude Code 中

了解更多:AI 是如何工作的 · AI 的能力与局限性