OpenAI API context window 是什么?

更新于 2026-10-30 · runapi.cfd

简答:OpenAI API 的 context window(上下文窗口)是一次请求能够处理的最大 token 容量,不是模型的永久记忆。先用“当前输入 token + 计划输出 token ≤ 模型上下文窗口”做初步检查;如果是推理模型,还要按官方 usage 规则确认 reasoning token,它通常是 output_tokens 的明细,不应再次重复相加。最稳妥的流程是:核对具体模型限制、用 Tokenizer 估算输入、设置合理的 max_output_tokens,再根据响应的 usage 和 incomplete 状态排查。

定义:Context window 是模型在一次生成请求中能够处理的 token 总容量,通常涉及输入 token、输出 token,以及部分模型输出中的 reasoning token。

30 秒判断卡:先用数字判断请求是否可能超限

假设某模型的 context window 为 W = 128000,当前输入占用 I = 90000,你希望最多生成 O = 12000 个输出 token。初步检查是:I + O = 102000,没有超过 128000,因此从总量角度看仍有约 26000 token 的余量。

这里的 12000 是输出上限,不是模型一定会生成的数量;如果模型属于推理模型,还要根据该模型的官方规则和最终 usage 核对 reasoning token。不要把 reasoning_tokens 再额外加到已经包含它的 output_tokens 上。

先检查什么怎么判断超出或异常时怎么做
模型 context window查看具体模型详情页,不套用其他模型数字更换适合的模型,或缩短输入
当前输入 token统计消息、历史、工具、文件等实际输入删除无关历史、工具结果和重复说明
max_output_tokens它是本轮输出上限,不是总上下文大小根据剩余空间设置,不要把它当作扩容参数
reasoning token部分推理模型会在 output_tokens_details 中提供明细按 usage 结构读取,避免重复计数
响应状态检查是否出现 incomplete 或输出截断缩短输入、降低输出预留并重新测试

OpenAI 官方将 context window 定义为单次请求中输入和输出可使用的最大 token 数,部分模型还会涉及 reasoning token;模型详情页则分别列出 context window 与 max output。OpenAI 对话状态文档 OpenAI 模型文档

Context window、输入输出 token 与 reasoning token 的关系

可以把一次请求理解为一个有限容量的容器。输入侧可能包括系统或开发者指令、用户问题、历史消息、工具定义、工具返回内容、文件和图片等;输出侧包括模型生成的结果,部分推理模型还会在输出用量中记录 reasoning token。

需要特别区分三个概念:

  • 可见输出 token:用户通常能在响应文本中看到的内容。
  • 总 output tokens:API usage 中用于表示模型输出消耗的总量,可能包含 reasoning token。
  • reasoning tokens:部分推理模型的输出明细,用于说明总输出中的推理部分。

因此,排查时不要简单套用“输入 + 可见输出 + reasoning token”并重复相加。更安全的做法是先读取当前响应的 usage 字段,再按照具体模型文档解释字段层级。OpenAI 的官方响应示例把 reasoning_tokens 放在 output_tokens_details 下,说明它是 output_tokens 的明细,而不是必然独立于 output_tokens 的第三个总量。OpenAI Responses Compact API 参考

Context window 和 max_output_tokens 有什么区别?

Context window回答“这一轮请求总共能容纳多少 token”;max_output_tokens回答“这一轮最多允许模型生成多少输出 token”。前者是总容量,后者是输出侧的上限。

继续使用上面的假设:模型上下文窗口为 128000,输入为 90000,设置 max_output_tokens=12000,则初步总量为 102000。若将输出上限设置为 50000,初步总量将变成 140000,已经超过假设的上下文窗口。此时调低 max_output_tokens 可能帮助请求满足总量限制,但它不会扩大 context window,也不能修复已经过大的输入。

如果输入本身已经超过模型可接受范围,例如输入达到 140000,而模型窗口只有 128000,那么即使把 max_output_tokens 设置为 1,也应先缩短输入。反过来,如果输入很小但输出总是过早停止,则应检查 max_output_tokens、响应状态和停止原因,而不是只看 context window。

最小可运行请求:设置输出上限并读取 usage

下面是一个 Responses API 的最小请求示例。模型 ID 和密钥都是占位符,必须替换为当前账户可用的值;不要把真实密钥写入代码仓库、Shell 历史、日志或前端代码。示例使用 max_output_tokens 预留最多 12000 个输出 token:

curl https://api.openai.com/v1/responses -H "Content-Type: application/json" -H "Authorization: Bearer $OPENAI_API_KEY" -d '{"model":"替换为可用模型ID","input":"用三句话解释 context window","max_output_tokens":12000}'

  1. 先确认模型 ID、context window 和 max output 来自同一个具体模型页面。
  2. 估算输入规模,不能只统计用户问题,还要考虑历史消息、工具定义和附件。
  3. 设置一个低于剩余容量的 max_output_tokens,先验证请求能否完成。
  4. 检查 HTTP 状态、输出文本、响应状态和 usage,不要只根据是否返回 200 判断成功。
  5. 若出现不完整响应,区分是输入过大、输出上限过小,还是模型在上下文限制下被截断。

OpenAI 官方文档说明,Responses API 可以使用会话状态和 previous_response_id 管理多轮对话,但历史输入 token 仍可能计入 API 用量;保存会话并不意味着上下文窗口无限扩大。OpenAI 对话状态文档

中文、英文和代码怎样估算 token?

字符数、字数和 token 数不是同一个概念。中文、英文、标点、空格、数字和代码会按照目标模型使用的编码方式切分,因此不能写死“一个汉字等于一个 token”或“固定多少字等于一个 token”。

可以用下面这段 Python 对纯文本做可复核估算。它不会模拟完整聊天消息包装、工具 Schema、图片或文件处理,所以结果只能作为输入预警;完整请求仍应以当前端点支持的计数方法和 API 返回的 usage 为准:

pip install tiktoken

import tiktoken; model = "替换为目标模型ID"; text = "请把这段中文摘要成三句话,并保留 API、JSON 和 max_output_tokens 这些代码标记。"; enc = tiktoken.encoding_for_model(model); ids = enc.encode(text); print("字符数:", len(text)); print("token数:", len(ids))

这段示例的关键不是背下某个固定数字,而是让本地编码器按照目标模型返回实际结果。官方 tiktoken 项目提供了 encoding_for_model(),但如果模型名称未被库识别,应按目标模型文档选择对应编码或改用官方支持的计数方式。OpenAI tiktoken 项目

对于聊天消息、工具定义、图片和文件,计数规则取决于具体端点和模型,不能把纯文本编码结果直接当成完整请求 token 数。遇到临界长度时,应保留安全余量,并用实际响应的 usage 复核。

上下文超限和输出变短:按顺序排查

  1. 先查模型:确认模型 ID、context window 和 max output 是否匹配,不要把旧模型或其他模型的数字套过来。
  2. 再查输入:统计历史消息、系统指令、工具描述、工具返回、文件和图片,优先删除重复或不再需要的内容。
  3. 区分输出问题:输入过大时要缩短输入;输出上限过小才调整 max_output_tokens;仅仅降低输出上限不能修复超大的输入。
  4. 检查响应:查看是否有 incomplete、截断原因或 usage 明细,确认是容量限制还是业务逻辑提前结束。
  5. 最后处理长对话:将任务拆成阶段,保留目标、约束、已确认事实和未解决问题,删除重复闲聊与过期工具结果。

上下文超限不适合盲目重试,因为请求内容没有变化。应先减少输入,再发送一个最小请求确认端点和模型本身可用。

长对话如何管理:手动摘要、previous_response_id 与 compaction

Chat Completions 通常需要应用自行维护并重新发送历史消息;Responses API 则提供 Conversations、previous_response_id 和 compaction 等上下文管理方式。无论使用哪种方式,模型仍然受具体 context window 限制。

对于长时间运行的 Responses API 流程,可以使用服务端 compaction:在请求中配置 context_management 和 compact_threshold,当渲染后的 token 数达到阈值时由服务端压缩上下文。也可以调用 /responses/compact 获取压缩后的上下文窗口,并将返回结果原样传给下一次请求。

官方文档特别提醒,压缩结果是供模型继续工作的机器状态,不应当当作普通人工摘要随意编辑。若使用 previous_response_id,按文档继续传入新的用户消息;若自行维护输入数组,则应保留压缩返回的完整结果。OpenAI Compaction 文档 OpenAI Compact API 参考

什么时候应该查模型文档,而不是套用网上数字?

context window、最大输出 token、推理行为、输入类型和 usage 字段都可能因模型及模型快照不同而变化。本文的 128000 仅用于演示计算方法,不是 OpenAI API 的统一上限。实际调用前,应打开具体模型详情页核对当前限制。

如果你通过兼容接口、API Router 或其他供应商调用,还要额外确认路由层是否修改了模型 ID、参数名、输出上限或上下文限制。OpenAI 官方模型页面只能证明对应官方端的能力,不能自动证明其他网关的行为。

常见问题

OpenAI API 的 context window 是模型记忆吗?

不是。它是单次请求能够处理的 token 容量。多轮对话要保留历史,应用仍需传入相关消息、使用会话状态或采用官方支持的上下文管理方式;context window 本身不是永久记忆。

输入 token、输出 token 和 reasoning token 会不会重复计算?

不能简单把三者无条件相加。部分响应中 reasoning_tokens 位于 output_tokens_details 下,是 output_tokens 的明细。应先查看当前模型和响应 usage 的字段层级,再决定如何解释。

为什么 max_output_tokens 设置很大,回答仍然不完整?

max_output_tokens 只是输出上限,不会扩大 context window。如果输入历史、工具定义或附件已经占用大量空间,模型可用空间仍然有限;应先缩短输入并检查响应状态。

中文文本怎样准确计算 token?

不能按固定字数换算。可使用与目标模型匹配的 Tokenizer 或 tiktoken 对纯文本估算;聊天包装、工具、图片和文件的完整计数取决于端点和模型,最终应以 API usage 或当前官方文档为准。

previous_response_id 会让历史输入不再计费吗?

不会简单等同于免费复用。OpenAI 文档说明,响应链中的历史输入 token 仍可能作为输入 token 计入用量;应结合 usage、缓存机制和当前模型文档核对。

context window 超限时应该重试多少次?

不要盲目重试。先缩短历史、删除无关工具结果、拆分任务,或在适用的 Responses API 流程中使用 compaction,再发送最小请求验证。

相关阅读

参考资料

  1. Conversation state | OpenAI API
  2. Models | OpenAI API
  3. Compaction | OpenAI API
  4. Compact conversation | OpenAI API Reference
  5. tiktoken | OpenAI GitHub
温馨提示
置顶

【RunAPI 新域名启用通知】
https://runapi.host
原域名 runapi.cfd 需要使用代理才能访问,RunAPI 现已启用新域名: https://runapi.host

新域名可直接访问,账户、余额及服务数据均不受影响。(注意:新域名在非代理环境下只可见国内模型,api调用不受影响)

2 个月前 · 2026-08-07 11:30

claude-haiku-5.5已上线

14 小时前 · 2026-10-09 12:14

gemini-nano-banana-2.1已上线

1 天前 · 2026-10-08 21:58

🎉 国庆限时充值 9 折! 10 月 2 日 18:00:00 — 10 月 7 日 23:59:59,点击任意额度充值并选择支付宝支付,支付页面将自动享受 9 折优惠!

⚠️ 本次优惠仅限支付宝支付,Creem 支付暂未同步折扣,仍按原价结算。

1 周前 · 2026-10-02 19:02

gpt-6.1-sol已上线

1 周前 · 2026-10-01 23:20

claude-sonnet-5-5已上线
coding和claude_normal分组可使用

1 周前 · 2026-09-29 18:20

claude-opus-5-5, gpt-6-sol已上线

2 周前 · 2026-09-23 14:11

grok-4.7上线,grok、default分组可用
支持chat, responses,messages格式

2 周前 · 2026-09-22 13:35

【分组更新通知】
deepseek-sale分组上线,价格5折,支持v1/messages;v1/responses;v1/chat/completions格式请求

deepseek-v4.1-flash同步上线

提示:glm-sale和kimi-sale分组价格5折,接口均服务正常

3 周前 · 2026-09-13 23:10

gpt-image-2.5上线

0 个月前 · 2026-09-10 21:49

因官方下架gpt-5.4模型,平台codex分组已同步下架,需要调用该模型可切换至default/plus分组使用

1 个月前 · 2026-09-06 16:27

gpt-6-astra已上线

1 个月前 · 2026-09-05 14:58

gemini-3.8-flash已上线

1 个月前 · 2026-09-05 04:06

claude-fable-5-1已上线

1 个月前 · 2026-09-03 13:33

【分组更新通知】
1.kimi-sale分组5折
2.glm-sale分组5折
3.grok分组降价为0.7折,资源为grok heavy
以上均可通过v1/chat/completions;v1/responses;v1/messages格式调用

1 个月前 · 2026-09-03 10:50

glm-5.3, glm-5.3-flash
qwen3.8-flash, qwen3.7-flash
均已上线,default分组即可调用

1 个月前 · 2026-08-27 22:46

【公告】关于模型访问受限域名的处理说明
为遵守相关合规要求,平台已对模型访问政府类网站(gov域名)实施限制。
若您在对话过程中遇到提示“内容审计命中风险规则,请调整输入后重试”的报错,烦请移除对话中涉及的gov相关链接后再重新请求。
感谢您的理解与配合。

1 个月前 · 2026-08-22 22:11

最近codex更新后,如果遇到“401 token not provided”这个错误,是因为环境变量失效,重新配置后重启codex即可

1 个月前 · 2026-08-22 00:51

gemini-3.7-flash上线

1 个月前 · 2026-08-15 23:21

grok-4.6
qwen3.8-max
均已上线

1 个月前 · 2026-08-13 15:49