AI 开发必懂:Context Window(上下文窗口)到底是什么?

0 阅读6分钟

总结

还是先上总结~

  1. Context Window 组成部分是 历史会话+当前输入+模型输出
  2. 每个模型的 Context window 并不一致,比如GPT-4o则是 128k
  3. 描述模型的 128k的k不是存储大小单位,是数量单位 1k === 1000 token
  4. Context window 并不是越大越好,越大则代表计算复杂度越高,并且目标内容更难命中
  5. 当context window超过 指定存储限制的时候(比如:128k),一些模型会舍弃早期的存储内容,还有一些会直接报错。
  6. 128k的context window 换算粗估成存储空间的话 约是0.5MB大小

正文

概括

Context Window(上下文窗口) 是指:

👉 一个大模型在“当前对话中”一次性能看到、记住并参与计算的最大 token 数量。

你可以把它理解为:

🧠 模型的大脑“短期记忆容量”。

如果一个模型的 Context Window 是 128K tokens
那它一次最多只能处理 128,000 个 token 的输入 + 输出总和

注意,这里的128k只是举个例子,不是每个模型的content window都是128k

比如说👇🏻

模型Context Window
GPT-4o128K
Claude 3 Opus200K
Gemini 1.5 Pro1M
Llama 24K

超过这个长度,前面的内容就会被“挤掉”或无法参与计算。

下面我以gpt-4o模型作为解说案例,他的context window是128k

什么是 token?

token ≠ 字符
token ≠ 单词

它是模型内部的“文本切分单位”。

举例(中文场景):

我喜欢编程

大概会被拆成:

我 / 喜欢 / 编程

在英文中:

I love programming

大概会被拆成:

[I ,love ,program,ming]  最后转换为 [1243, 3457,46573,2343] 这么一组数据给模型

👉 1 token ≈ 0.75 英文单词
👉 中文通常 1 个字 ≈ 1 token(但不绝对)

关于token可以参考另一篇文章:juejin.cn/post/761485…

Context Window 包含什么?

它不是只算你输入的内容,而是:

系统提示词
+ 历史对话
+ 当前输入
+ 模型输出
= 总 token 数

举例:

如果模型是 128K context window:

  • 你历史对话用了 100K tokens
  • 你这次输入 20K tokens
  • 模型只能再输出 8K tokens

image.png 否则就会超限。超限的结果就是 被动裁剪或者 直接报错

为什么它重要?

在 AI 应用开发里,Context Window 决定:

  1. 能不能塞进整本书
  2. 能不能分析完整代码仓库
  3. 能不能长时间对话不“失忆”
  4. RAG 能塞多少 chunk
  5. Agent 能带多少历史思考轨迹

context window越大越好吗

context window不是越大越好

⚠️ window 大 ≠ 一定更聪明
⚠️ window 大 ≠ 成本低

因为:

token 越多,计算复杂度通常是 O(n²)

也就是:

上下文翻倍
计算量可能四倍
思考时间也会变长,

并且!因为上下文很太长,当前问题所需要参考的历史内容也不一定会被命中。

小伙伴的疑惑:

假设模型的最大上下文长度为128K tokens。在一次请求中,已有历史上下文 120K tokens,本轮输入 8K tokens,总长度已达到上限。
关键提示 A 位于当前上下文的末尾 1K 区间内(最早的那批内容里),当模型开始自回归生成下一个 token 时:

已知128k = 历史 + 提问 + 回答 目前 历史+提问 === 128k

在最后一k区间里的提示是否仍然参与注意力计算

  • 该提示 A 是否仍参与注意力计算?
  • 新生成的 token 是否会导致上下文长度超过 128K?如果超过,模型如何处理?
该提示 A 是否仍参与注意力计算?

答:基本不参与了

因为模型context window是要预留输出的,假定 128k的context window,预留8k给输出,那么允许输出的就只有120k,排在从当前输入开始往前推的第128k的提示就会被裁剪掉。

新生成的 token 是否会导致上下文长度超过 128K?如果超过,模型如何处理?

有两种种常见策略:

  1. Sliding window / 截断最前面历史

    • 模型丢掉最早的 token(比如前 1K),保留最近 128K token
    • 输出 token 继续生成,不超限制

采用此种方案基本都是应用层做的,或者直接在某些框架里,比如:LangChain等。非大模型本身的能力

  1. 报错或拒绝生成

    • 基本上所有的大模型都会直接返回“context length exceeded”错误

再次强调,context window超出自动截留是框架/应用层的能力,而不是模型自带功能。

128k中的k是存储容量单位吗?能存储多少token

这是个误区,很多小伙伴会以为这个128k是存储容量单位,实则不然,他是一个数量单位

  • 1K = 1,000 tokens(个数),1M = 100百万 token
  • 它表示“有多少个 token”,完全是计数,不涉及重量、体积或其他“质量”概念。

所以当我们说 128K context window,意思就是 模型一次最多能看到 128,000 个 token,纯粹是数量统计。

而估算下来,注意,是估算,128k 即 128 * 1000 * token 约等于 0.5 MB

至于怎么算,感兴趣的看下下面这个小章节,不感兴趣直接跳过也好。用处不大

128k 约等于 0.5MB的推演过程

假定

  • 1 token ≈ 4 字节(B)

    • 这是 GPT tokenizer 常用的粗略估算:大多数英文/中文字符编码后,平均占 4 字节
    • 中文一个字一般 3-4 字节,英文一个 token 可能 1-4 字节,综合取 4 B 作为平均值
  • 128K tokens = 128 × 1,000 = 128,000 tokens


存储容量=128,000 tokens×4 B/token=512,000 B 换算成 KB / MB: 512,000 B ÷ 1,024 ≈ 500 KB 512,000 B ÷ 1,000 ≈ 0.512 MB

粗略结论:128K tokens 大约 500 KB – 0.5 MB

最后

  • hello,我最近有点失业。如果有工作内推的小伙伴可以加我一下,我的大致情况如下
  • 我的情况是:
  • 工作年限:4年+
  • 团队管理:::干过小公司的前端技术leader。
  • 开源共享:::taro的vant组件库有开源贡献:
  • 技术博客:::juejin.cn/user/301311…
  • 技术方向:::近两年都是全栈,侧重前端+node(electron main侧),前端vue/react都写
  • ai经验:::有过C端Ai产品开发经验:www.remio.ai/user-guide/…
  • 学历:::专科
  • 我的诉求是:除了北京外全国各地都可
  • 我期望的薪资是:杭州,上海,广州 19-21。其他城市17-20

此内容还在,工作就还在找,求有缘人内推。

3b7c57ca-1922-4428-9c21-88c4efd18c52.png