news 2026/10/11 14:42:52

大模型的上下文窗口是什么意思

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型的上下文窗口是什么意思

一、从一个常见现象说起

你一定遇到过这样的场景:跟一个 AI 聊了很久,聊到第几十轮时,它突然"忘了"你开头说过的话;或者你把一份几十页的 PDF 丢给它,它只读到了前几页就开始回答。这不是模型"变笨"了,而是它撞上了一堵墙——上下文窗口(Context Window)。

本文就来聊清楚:上下文窗口到底是什么、它如何影响我们使用大模型、以及当需求超出窗口时,工程师们用哪些代码手段来突破它。

二、什么是上下文窗口

上下文窗口(Context Window),指的是大模型在"一次推理"中能够同时读取并记住的文本长度上限,通常以 token 为单位。你可以把它理解成模型的"短期记忆容量":在一次对话/一次补全中,所有输入(prompt) + 所有已生成的输出(completion) 加起来的 token 数,不能超过这个上限。

图 1:上下文窗口就像是模型一次能"框住"的文本范围

一个关键但常被忽视的点:窗口是"输入+输出共享"的。比如一个 8K token 的模型,你塞了 7K 的 prompt 进去,它最多只能再生成 1K token 的回答,再多就会被截断或报错。这也是为什么长 prompt 会"挤压"模型的回答空间。

三、为什么单位是 token 而不是"字"

大模型不直接读字符,而是先把文本切成"token"——一种介于字符和词之间的子词单元。一个汉字可能占 1~2 个 token,一个英文单词通常 1~3 个 token。所以"8000 token"既不等于 8000 个汉字,也不等于 8000 个英文单词。

图 2:文本被切成 token 序列后送入模型

用 OpenAI 的 tiktoken 库可以直观感受同一段话在不同编码器下的 token 数:

import tiktoken

# GPT-4o 使用的编码器

enc = tiktoken.encoding_for_model("gpt-4o")

zh = "上下文窗口是模型的短期记忆容量"

en = "The context window is the model's short-term memory capacity."

print("中文 token 数:", len(enc.encode(zh)))

print("英文 token 数:", len(enc.encode(en)))

print("中文 token 序列:", enc.encode(zh))

# 输出示例:

# 中文 token 数: 12

# 英文 token 数: 9

# 中文 token 序列: [60831, 106434, 494915, ...]

可以看到,仅 15 个汉字就消耗了 12 个 token。这意味着当我们讨论"4K/8K/128K 上下文"时,换算成自然语言字数往往要打不少折扣,这也是工程上必须用 token 计量的原因。

四、主流大模型的上下文窗口对比

最近两年,模型的上下文窗口呈数量级增长。下表是几个有代表性的模型:

从 4K 到 2M,三年内窗口扩大了约 500 倍。但窗口越大,推理成本和延迟也越高——上下文窗口从来不是"越大越好",而是要根据任务权衡。

五、上下文窗口为什么重要

它直接决定了模型能做什么样的任务:

短窗口(≤8K):只能做多轮问答、单篇短文摘要;

中窗口(32K~128K):可以"整本"读取一份 PDF、做长文档摘要、代码库级别的问答;

长窗口(200K~2M):能一次性吃下整本书、整段视频字幕、整个代码仓库,做跨文档推理。

但要注意:"能装下"不等于"能用好"。研究表明,当关键信息出现在超长上下文的中间位置时,模型的检索准确率会显著下降,这被称为"Lost in the Middle"现象。所以工程实践中,我们仍倾向于用 RAG 等手段,而不是盲目堆 prompt。

六、当需求超出窗口:RAG 的工程解法

假设我们有一份 50 万字的企业知识库,远超任何模型的单次窗口。最主流的解决方案是 RAG(Retrieval-Augmented Generation,检索增强生成):把文档切块、向量化、按需检索最相关的几块塞进 prompt。下面是一个最小可运行示例:

import numpy as np

# 1) 模拟一份长文档,按句子切成 chunk

doc = "上下文窗口是模型的短期记忆。它以 token 为单位。"

doc += "当文档超长时需要 RAG。RAG 先检索再生成。"

doc += "向量检索用embedding。embedding把文本映射成向量。"

chunks = [doc[i:i+12] for i in range(0, len(doc), 12)]

print("分块数:", len(chunks))

# 2) 假装有一个 embedding 函数,把每个 chunk 变成 8 维向量

def embed(text: str) -> np.ndarray:

rng = np.random.default_rng(abs(hash(text)) % (2**32))

return rng.normal(size=8)

db = np.vstack([embed(c) for c in chunks]) # 向量库

# 3) 用户提问,检索最相似的 top-2 chunk

query = "RAG 是什么?"

q_vec = embed(query)

scores = db @ q_vec / (np.linalg.norm(db, axis=1) * np.linalg.norm(q_vec))

top_idx = np.argsort(scores)[::-1][:2]

retrieved = [chunks[i] for i in top_idx]

# 4) 只把检索到的片段塞进 prompt(远小于窗口)

prompt = "已知信息:\n" + "\n".join(retrieved) + "\n\n问题:" + query

print("最终 prompt 长度(字符):", len(prompt))

print("prompt:", prompt)

运行后你会发现,虽然原始文档很长,但真正送进模型的 prompt 只有几十个字。这就是 RAG 的核心价值:用"检索"把"无限长"的文档压缩到"窗口内"。除了 RAG,常见的还有 Map-Reduce 摘要、滑动窗口记忆、分层摘要等策略,思路都是同一类——用工程手段绕开窗口的物理上限。

七、总结

上下文窗口 = 大模型一次推理中能同时读写的 token 上限,是输入与输出共享的。它决定了模型能处理多长的文本、能记住多少轮对话,但"装得下"不等于"用得好",长上下文还伴随 Lost in the Middle、成本与延迟上升等问题。理解它,能帮你在选型、Prompt 设计和工程架构(如 RAG)上做出更合理的决策。

下次再遇到 AI"失忆"或"读不完文档",你就知道:这不是它笨,而是上下文窗口到顶了——该上 RAG 了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 14:41:53

教师评价系统落地指南:从指标配置到自动聚合的完整方案

简介:基于SSM(Spring、SpringMVC、MyBatis)框架打造的教师评价系统完整工程,面向教育信息化开发者和高校师生,用于解决教师评估流程繁琐、评价维度单一、数据分散等问题,覆盖角色管理、权限控制、班级学生及…

作者头像 李华
网站建设 2026/10/11 14:41:38

棉花病害目标检测实战:YOLO标注格式解析与训练避坑指南

简介:棉花植物病害图像目标检测标注数据,面向深度学习目标检测入门与进阶开发者,可用于YOLO系列模型训练、调参及改进实践。数据覆盖枯萎病、卷曲、灰霉、叶斑病及健康叶片等六类常见状态,并已划分训练集、验证集与测试集&#xf…

作者头像 李华
网站建设 2026/10/11 14:39:23

数据库系统概论第5版答案高效使用:三遍刷题法把习题变提分利器

简介:关系代数和SQL是数据库课程的两大基石,而范式分解与事务并发控制则是考试的深水区。面对《数据库系统概论》这类经典教材,许多学习者依赖课后习题答案来校验理解,但手写答案文档存在版本错位、SQL方言差异等隐患。真正有效的…

作者头像 李华
网站建设 2026/10/11 14:38:14

KFS Oracle源端不停机迁移三种方案

在数据库国产化迁移过程中,如何在不停止业务的前提下,将Oracle中的存量数据完整、高效地迁移到目标数据库,是每个DBA和架构师面临的核心挑战。本文基于金仓KFS(Kingbase FlySync)数据同步工具,详细介绍三种…

作者头像 李华
网站建设 2026/10/11 14:38:10

若依微服务整合MySQL与达梦双数据源:注解+AOP动态切换实战

在微服务改造和国产化适配这两股浪潮的交叉点上,“若依微服务里配 MySQL DM 双数据源”是一个绕不开的经典需求。很多团队在信创环境下拿到一套若依Cloud,第一步不是加业务代码,而是琢磨怎么在不破坏原有权限体系的前提下,让业务…

作者头像 李华
网站建设 2026/10/11 14:36:44

Java交易引擎安全加固三步走:从代码防御到密钥管控

1. 从一次应急响应说起最近帮一位做量化交易的朋友排查线上事故,他自研的一套Java加密货币交易引擎在极端行情下出现了订单重复提交和内存溢出的问题,更严重的是API密钥疑似被泄露。复盘下来,问题不是出在某个高深的技术点上,而是…

作者头像 李华