总结
还是先上总结~
- Context Window 组成部分是 历史会话+当前输入+模型输出
- 每个模型的 Context window 并不一致,比如GPT-4o则是 128k
- 描述模型的 128k的k不是存储大小单位,是数量单位 1k === 1000 token
- Context window 并不是越大越好,越大则代表计算复杂度越高,并且目标内容更难命中
- 当context window超过 指定存储限制的时候(比如:128k),一些模型会舍弃早期的存储内容,还有一些会直接报错。
- 128k的context window 换算粗估成存储空间的话 约是0.5MB大小
正文
概括
Context Window(上下文窗口) 是指:
👉 一个大模型在“当前对话中”一次性能看到、记住并参与计算的最大 token 数量。
你可以把它理解为:
🧠 模型的大脑“短期记忆容量”。
如果一个模型的 Context Window 是 128K tokens,
那它一次最多只能处理 128,000 个 token 的输入 + 输出总和。
注意,这里的128k只是举个例子,不是每个模型的content window都是128k。
比如说👇🏻
| 模型 | Context Window |
|---|---|
| GPT-4o | 128K |
| Claude 3 Opus | 200K |
| Gemini 1.5 Pro | 1M |
| Llama 2 | 4K |
超过这个长度,前面的内容就会被“挤掉”或无法参与计算。
下面我以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
否则就会超限。超限的结果就是 被动裁剪或者 直接报错
为什么它重要?
在 AI 应用开发里,Context Window 决定:
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?如果超过,模型如何处理?
有两种种常见策略:
-
Sliding window / 截断最前面历史
- 模型丢掉最早的 token(比如前 1K),保留最近 128K token
- 输出 token 继续生成,不超限制
采用此种方案基本都是应用层做的,或者直接在某些框架里,比如:LangChain等。非大模型本身的能力
-
报错或拒绝生成
- 基本上所有的大模型都会直接返回“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
此内容还在,工作就还在找,求有缘人内推。