入门 11 分钟配置

理解 上下文

直接回答

上下文窗口是模型一次能够处理的最大 token 数:系统指令、历史记录、附加文档以及正在生成的回复都计入其中。它会占用内存,因为每个 token 都会在 KV 缓存中保留一个条目。在 Ollama 中,对于显存不足 24 GiB 的显卡,默认上下文窗口为 4096 个 token:通常限制您能让模型读取多少内容的,是上下文窗口,而非模型本身。

上下文窗口过短,会让模型忘记对话的开头或导致文档被截断;过大,则会占满显存,让一切都慢下来。本指南说明窗口包含哪些内容,根据一个真实模型的架构计算其内存消耗,并介绍如何调整窗口,避免出现意料之外的问题。

作者: Mohamed Meguedmi·更新于 2026-09-30·已在 Windows、macOS 和 Linux 上测试

#上下文窗口包含的内容

根据 Ollama 的文档,上下文长度是模型在内存中可访问的最大 token 数量。所有内容都计入这一个总额度:系统消息、对话历史、您粘贴的文件或文档片段、您最新的问题,以及模型正在生成的回复。对于推理模型,思考 token 也计入其中。当总量超过上下文窗口时,就必须舍弃一些内容:工具通常会截掉开头的内容,或者拒绝请求。模型在这个窗口之外没有任何记忆,除非外部系统(摘要、RAG)重新向它注入信息。

i
上下文窗口和记忆不是一回事
一个能“记住”昨天对话的助手,并不是靠上下文窗口做到的:应用程序会重新读取历史记录或数据库,再将其复制到提示中。上下文窗口规定了某一时刻能容纳多少内容。

#Token:占用上下文窗口的单位

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款

一个标记(token)不是一个单词:它是模型 tokenizer 定义的文本片段,通常是一个音节或常见单词。罕见或较长的单词会占用多个标记。法语在同等内容下通常比英语消耗更多的标记,因为大多数 tokenizer 都主要基于英语进行训练。具体比例因模型而异:不要依赖经验法则,应实际测量。Ollama 的 API 每次请求都会返回 prompt_eval_count,即提示词的标记数量。

计算提示的真实token数量
curl http://localhost:11434/api/generate -d '{"model":"qwen3:8b","prompt":"Bonjour le monde","stream":false}'
# lisez prompt_eval_count et eval_count dans la réponse JSON
经验法则
一页密集的法语A4文本大约相当于一千个token,具体取决于分词器:请在您自己的文档上使用prompt_eval_count进行验证。
一本图书
数十万tokens:在不进行分块的情况下,32,000或64,000 tokens的上下文窗口无法容纳。
一个回答
一个推理模型可能在生成可见响应前产生数千个思考 token,从而消耗可用窗口。

#应选择多大的上下文窗口

Ollama 根据显存容量设置默认值:显存低于 24 GiB 时约为 4000 个 token(4k),在 24 至 48 GiB 之间时为 32k,从 48 GiB 起为 256k。同一页面建议,对于需要大上下文的任务,例如网页搜索、智能体和编码工具,至少使用 64000 个 token。近期模型公布的最大上下文长度要高得多:例如,QuelLLM 目录列出的 Kimi K2.5 约为 256000 个 token,而 Kimi K3、DeepSeek V4 Flash 和 GLM 5.2 均约为 100 万个 token。但公布的最大值并不等于您机器上实际可用的上下文长度:内存容量,有时还有质量问题,会成为限制。

不同场景适用的窗口大小
用途参考上下文窗口大小备注
简短对话,问答形式4096至8192个token如果您不粘贴文档,这样的上下文窗口就够用了
文章的摘要或分析16,000至32,000个token检查文本的token数量
面向代码仓库的编程助手64000 个令牌或更多Ollama 推荐用于编码工具
具备工具和网络搜索能力的智能体64000 个令牌或更多每次调用工具都会重新注入文本
非常大的语料库不要追求窗口优先通过RAG而非直接发送全部内容

确定上下文窗口大小时,经常会遇到两个陷阱。首先,窗口必须留出容纳回答的空间:如果一份文档占用了 32 000 个 token 中的 31 000 个,就几乎没有空间用于回答,推理模型也会在思考到一半时停止。其次,在对话中,历史记录会随着每一轮不断增长:第一条消息时够用的窗口,到第二十轮时可能就满了。因此,请按您实际使用中的最坏情况规划,而不是按平均情况,并保留约五分之一的窗口作为余量。

#上下文消耗多少内存

上下文窗口中的每个 token 都会在模型的每一层留下一个键和一个值,存储在 KV 缓存中。每个 token 的内存开销可根据架构中的四个数值计算:层数、键值头数量、每个头的维度,以及每个数值占用的字节数(FP16 为2字节)。公式为:2(键和值)× 层数 × KV 头数量 × 头维度 × 2字节。注意:应计算键值头数量,而不是注意力头数量,因为较新的模型会让多个注意力头共享键值头(grouped-query attention,分组查询注意力)。对于下方的模型,如果使用注意力头数量计算,估算出的缓存大小会是实际值的四倍。

以 Qwen3-8B 为例,其官方规格表注明有 36 层和 8 个键值头(查询头则有 32 个),公开配置将每个头的维度设为 128。每个 token 的内存开销为 2 × 36 × 8 × 128 × 2 = 147 456 字节,即 144 KiB。

Qwen3-8B模型在FP16下的KV缓存(基于其配置计算)
上下文KV缓存(FP16)KV缓存(q8_0,约一半)
4 096 tokens0.56 GiB0.28 GiB
8 192 tokens1.13 GiB0.56 GiB
16384 个标记2.25 GiB1.13 GiB
32 768 tokens4.50 GiB2.25 GiB
131 072 个 token(使用 YaRN,据模型说明)18.00 GiB9.00 GiB
!
8 GB 显存显卡的陷阱
Qwen3-8B 在 Q4 量化下,模型权重约占 5 GB。上下文长度为 32 768 个 token 时,KV 缓存额外占用 4.5 GiB,因此尚未计入计算缓冲区,总占用就已达到约 9.5 GB。在显存为 8 GB 的显卡上,模型会有一部分卸载到 CPU,生成速度大幅下降,却没有明确的错误提示。请使用 ollama ps 检查。

两个杠杆可以减少缓存。第一个是缓存的量化:Ollama 的 FAQ 指出,q8_0 类型消耗的 FP16 内存大约为一半,且损失极小,而 q4_0 消耗约四分之一,但在大上下文场景下损失更明显;两者均要求启用 Flash Attention。第二个是将窗口缩小到实际所需范围。我们的 KV 缓存指南详细说明了相关设置。

#设置上下文长度

#在 Ollama 中

Ollama 允许在服务器启动时设置默认长度,也可以为某个会话更改长度,或通过 API 为每次请求单独指定长度。

在 Ollama 中设置上下文的三种方法
# Valeur par défaut pour tout le serveur
OLLAMA_CONTEXT_LENGTH=64000 ollama serve

# Pour une session interactive
>>> /set parameter num_ctx 16384

# Pour un modèle personnalisé (Modelfile)
FROM qwen3:8b
PARAMETER num_ctx 16384

加载完成后,执行 ollama ps:CONTEXT 列显示分配的上下文长度,PROCESSOR 列显示GPU与CPU之间的计算分配比例。若部分计算负载落在CPU上,建议减少上下文长度或选择更小的模型。

#在 LM Studio 中

在LM Studio中,上下文长度在加载模型时通过加载参数设置,更改值需要重新加载模型。在确认前,请注意内存估算值。

#四步配置流程

  1. 01
    测量实际需求
    发送您的文档或典型对话历史,并查看 prompt_eval_count。再加上预期回复的长度;如果模型还会生成思考内容,也要加上这部分的长度。
  2. 02
    选择上下文窗口
    选择能够容纳这一总量并留出 20% 余量的最小值;如果使用智能体或编程工具,则按照 Ollama 的建议,至少选择 64,000 个 token。
  3. 03
    检查内存
    按这个上下文窗口大小加载模型,然后运行 ollama ps。处理器一栏应显示 100% GPU;否则,请缩小上下文窗口、量化缓存或更换模型。
  4. 04
    测试召回功能
    在一段长文本的中间放入一个具体事实,然后向模型询问这个事实。如果模型未能找出它,说明宣称的上下文窗口大于模型实际能利用的范围,需要采用文本切分或 RAG。

#上下文窗口大,并不意味着能准确理解内容

2023 年的一项研究《Lost in the Middle》表明,模型性能可能会因信息在上下文中的位置而明显下降:信息位于开头或结尾时,性能通常更好;位于中间时,性能则会下降,即使是宣称支持长上下文的模型也不例外。2024 年发布的 RULER 基准测试进一步表明:随着上下文长度增加,几乎所有受测模型的准确率都会大幅下降,只有一半模型在 32,000 个 token 时仍能保持令人满意的水平,而它们全都宣称支持 32,000 个或更多 token。

这些研究针对的是各自时代的模型,无法说明 2026 年模型的表现,其中多个模型专门针对长上下文进行了训练。但操作原则仍然适用:将指令和关键事实放在开头,在结尾重申问题,并先用您自己的文档进行测试,再相信所宣称的数十万 token 上下文窗口。最简单的测试是,在您所在领域的一篇长文本中间插入一条具体信息,然后让模型再次提供这条信息:如果模型每次测试都能找到它,这个窗口就能用于您的使用场景;如果找不到,就缩短发送的文本,或采用分段处理。

#当内容溢出时

随对话推进逐步总结
每隔几轮让模型生成一次对话摘要,再以该摘要作为上下文的开头重新开始:会丢失一些细节,但能保持对话主线。
分割文档
长 PDF 按章节逐一处理,再汇总各部分的回答。分块指南详细介绍了适用的分块大小。
切换到RAG
当语料库远超窗口范围时,只提取少量相关片段,而非全部发送。
选择上下文更长的模型
只有内存足够时才可以:将上下文窗口扩大一倍之前,请先参阅上文的KV缓存计算。
FAQ
LLM的上下文窗口是什么?+
这是模型一次处理的最大token数量:系统消息、历史记录、附加文档、当前问题与回答。超过此数量,模型将截断开头或直接拒绝请求。该窗口限制了模型可读内容,而非其训练过程中所学知识。
Ollama 的默认上下文窗口大小是多少?+
默认上下文窗口大小取决于显存:显存低于 24 GiB 时为 4k 个 token,24 至 48 GiB 时为 32k 个 token,超过 48 GiB 时为 256k 个 token。Ollama 建议智能体、网页搜索和编码工具使用至少 64,000 个 token 的上下文窗口。您可以通过 OLLAMA_CONTEXT_LENGTH 或 num_ctx 修改窗口大小。
如何提升本地模型的上下文长度?+
启动服务器时设置 OLLAMA_CONTEXT_LENGTH,或在交互会话中使用 /set parameter num_ctx,或在 Modelfile 中声明 PARAMETER num_ctx。然后使用 ollama ps 确认模型仍完全运行在 GPU 上:更长的上下文会消耗更多内存,可能导致部分模型转移到 CPU 上运行。
一个包含 32,000 个标记的上下文会消耗多少 VRAM?+
这取决于架构。对于 Qwen3-8B,在 32 768 个 token 的上下文下,除模型权重外,FP16 KV 缓存还会占用约 4.5 GiB。公式为:2 × 层数 × KV 头数 × 头维度 × 每个 token 2 字节。对缓存进行 q8_0 量化可将这一开销大致减半。
更大的上下文长度能让模型变得更智能吗?+
不会。更大的上下文窗口能让模型读取更多文本,但不会让它推理得更好。相反,“Lost in the Middle”和 RULER 研究表明,随着上下文变长,准确率可能下降。请选择任务所需的窗口大小,而不是尽可能大的窗口。
是否需要 RAG 或大上下文窗口来分析文档?+
如果整个文档能放入上下文窗口并留有余量,而且内存充足,直接发送完整文档更简单。如果文档超出这一范围,或需要查询包含大量文件的资料库,RAG 更节省资源,而且通常更可靠,因为它只发送有用的段落。

#深入了解

这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。