Qwen3.8-27B 的上下文长度:256K、262144 还是 1M,四处口径
要给一个模型接上长文档管线,第一件事通常是问:它到底能吃多长的上下文。这个问题在 Hugging Face 仓库 Qwen/Qwen3.8-27B 上不太好答——不是因为没写,而是因为写了四处,四处的数还不一样。
我们在 2026-08-16 取了这个仓库的快照(1d4bf0f),只下载了文本类文件(model card、config.json、generation_config.json、两个 preprocessor 配置、tokenizer_config.json、chat_template.jinja、LICENSE),没有下载权重、没有加载模型、没有推理过一个 token。下面全部内容都是这些文件里写着的字,以及它们之间对不对得上。
四个数各自出现在哪一行
| 出处 | 原文(照抄) | 这句在描述什么 |
|---|---|---|
README.md:177、README.md:179、README.md:180 三条评测脚注 | 256K context window | 三个评测集跑分时的上下文窗口设置 |
README.md:53(Model Overview) | Context Length: 262,144 natively and extensible up to 1,000,000 tokens. | 原生长度,以及自述的可扩展上限 |
README.md:514(Best Practices) | natively supports context lengths of up to 262,144 tokens | 原生长度 |
README.md:16(顶部 > [!Tip] callout) | 1M context length by default | 托管版本的默认值,同段还写 The service is coming soon. |
四处描述的根本不是同一个对象:一处是评测设置,一处是模型原生长度,一处是自述的扩展上限,一处是尚未提供的托管服务的特性。数字不一致本身不奇怪,麻烦的是它们混在一份 model card 里,摘出来单独引用时很容易串。
回配置文件核:开箱只有一个数
先看能被文件直接核对的那一层。config.json 里 text_config.max_position_embeddings 的值是 262144(config.json:93);tokenizer_config.json 的 model_max_length 也是 262144。这两处彼此一致,也与 README.md:53 的前半句「262,144 natively」、README.md:514 的「up to 262,144 tokens」一致。
也就是说:在发布的这份快照里,能从配置文件核到的上下文长度只有 262,144 这一个数。 引用「262K」时可以直接指向 config.json:93,读者自己去仓库里翻一眼就能对上。
1,000,000 在发布配置里没有承载字段
README.md:53 后半句写的是 extensible up to 1,000,000 tokens。我们把 config.json 逐键读了一遍,与旋转位置编码相关的是 text_config.rope_parameters 这个子对象(config.json:104-114),它一共只有五个键:
mrope_interleaved: true(config.json:105)mrope_section: [11, 11, 10](config.json:106-110)partial_rotary_factor: 0.25(config.json:111)rope_theta: 10000000(config.json:112)rope_type: "default"(config.json:113)
没有 rope_scaling,没有 factor,没有 original_max_position_embeddings。 config.json 全文也不出现 1000000 这个数。
这里有一个非常容易看串的地方:rope_theta 的值是 10000000,一千万,比一百万多一位。它跟 README 里那个 1,000,000 是两个毫不相干的数。核对时如果只用肉眼扫数位,很容易把它当成「找到了 1M 的出处」。我们在 model card 全文检索 1,000,000 这个写法,只在第 53 行命中一次。
README 自己给了改法,也自己给了限定
「可扩展到 1,000,000」不是一个开箱即得的状态。model card 的 Best Practices 第 3 小节(README.md:514–README.md:558)给的路径是:由使用者自己改 config.json,或者用启动参数覆盖,把 RoPE 换成 YaRN。替换片段里出现的三个键值行是(README.md:530–README.md:534):
"rope_type": "yarn",
"factor": 4.0,
"original_max_position_embeddings": 262144,
这三行与发布配置的差别一目了然:发布值里 rope_type 是 "default",另外两个键根本不存在。
同一小节里,model card 自己给了两条限定,照抄如下:
README.md:516:YaRN is currently supported by several inference frameworks, e.g., vLLM, SGLang, and TokenSpeed.README.md:555–README.md:558的> [!NOTE]:主流开源框架实现的是 static YaRN,缩放系数不随输入长度变化,potentially impacting performance on shorter texts;并写明We advise modifying the rope_parameters configuration only when processing long contexts is required.
顺带记一个书写层面的事实:README.md:534 那行以 "original_max_position_embeddings": 262144, 结尾,紧接着 README.md:535 就是 }——按 JSON 规范,对象最后一个成员后面不允许有逗号。而同一小节 README.md:542、README.md:547、README.md:552 三条命令行里的同一份 JSON 是写在一行里的,那三处没有这个尾随逗号。只陈述这个差异,不推断影响。
256K 那个数属于评测设置,不属于模型
256K context window 在 model card 里只出现三次,全部在表一的评测脚注里,各自绑定一个评测集:
README.md:177,SWE-bench Pro:temp=1.0, top_p=0.95, and a 256K context window,同一条脚注还写了Opus4.6 Max用的是官方公布分、其余模型是本 model card 自评,且Problematic tasks were corrected;README.md:179,DeepSWE 1.1:同样是temp=1.0, top_p=0.95, and a 256K context window;README.md:180,QwenSWEBench:avg@3、8-hour timeout、max_tokens=32,768、temperature=1.0、a 256K context window,且该评测集被脚注自述为In-house coding benchmark。
要注意的是,脚注只覆盖了部分评测集。表一共 12 个评测行,其中 Terminal Bench 2.1 (Terminus)、JobBench、Agents’ Last Exam、IFBench、GPQA Diamond、LiveCodeBench v6 这 6 行完全没有脚注。所以「256K」既不是模型属性,也不是全表统一设置,它只是那三条脚注明写过的跑分条件。引用这几个评测集的数字时必须连脚注一起引——这些数字都是 model card 自述的评测结果,评测方法与环境以官方说明为准,我们没有复现过。
托管服务的 1M:写着 coming soon
第四处在 model card 最靠前的位置。README.md:15–README.md:16 提到官方有一个名为 Qwen Cloud 的 API 服务,并写明 Qwen3.8-27B 将会有一个托管版本,带 1M context length by default, official built-in tools,同段末尾原文是 The service is coming soon. Stay tuned for updates.
这一处最容易被摘错。它描述的是一个尚未提供的托管版本的默认配置,不是你从这个仓库拿到的权重的能力。另外 README.md:507 在讲输出长度建议时也出现了 within the 1M context length 的写法。凡引用「1M」,都要把它绑回具体那一处。
你手上这一份到底是哪一档:一组可执行的判定动作
不需要跑任何东西,读四个位置就能定档:
- 打开仓库根目录的
config.json,看text_config.max_position_embeddings。发布快照里是262144。 - 打开
tokenizer_config.json,看model_max_length。发布快照里同样是262144。两处若不一致,说明你手上的文件与我们核对的这份发布快照(1d4bf0f)对不上,原因我们无从判断。 - 回到
config.json的rope_parameters,看有没有factor与original_max_position_embeddings这两个键。发布快照里这两个键不存在,rope_type是"default"。 - 看你用的推理框架是否在
README.md:516列出的范围内——原文列的是 vLLM、SGLang、TokenSpeed,前面带e.g.,即 model card 自己也没把这份清单写成穷举。
改过配置之后怎么验证?只能验证到文件层:重新读一遍你改过的 config.json,确认那几个键的字面值是你写进去的值。至于运行时是否按这份配置生效,本仓库不含建模与推理代码(它是权重与配置仓,architectures 是 ["Qwen3_5ForConditionalGeneration"],实现不在这里),我们没有依据核对,以你所用框架的文档为准。
什么情况说明问题不在这条线上:如果你打开的 config.json 里 rope_type 已经是 "yarn"、或者出现了 factor 键,那说明你手上的不是我们核对的这份发布快照(1d4bf0f),差异来自别处,本文的对照结论不适用;如果 max_position_embeddings 与 model_max_length 两处对不上,那也不是本文这四处口径的问题,而是文件本身被动过。
一句方法论
这类「同一个指标在四处写四个数」的情况,单看哪一处都不算错:评测脚注说的是跑分条件,Model Overview 说的是原生长度,同一行的后半句说的是需要自己动手的扩展上限,callout 说的是一个还没上线的托管服务的默认值。真正会出事的是摘引——把其中一个数抠出来当作「这个模型的上下文长度」写进自己的文档或选型表。稳妥的写法是每次都带上它的出处与它描述的对象,就像上面那张表一样。
关于这个仓库 config.json 的全部字段、以及 model card 参数表与配置的逐项交叉核对,我们另有一篇专门讲。
延伸阅读
- 从头读起:Qwen3.8-27B 是什么:一个模型仓里有哪些文件、各自负责什么
- 本专题共 35 篇,完整分组目录见专题页
- Qwen3.8-27B 的 Citation:bibtex 标题写的是另一个型号
- Qwen3.8-27B 的 config.json 里全是 qwen3_5:代际关系怎么读
本文依据 Hugging Face 仓库 Qwen/Qwen3.8-27B 的 model card 与随仓配置文件
(config.json、generation_config.json、preprocessor_config.json、chat_template.jinja 等)整理,
核对日 2026-08-16,对应仓库快照 1d4bf0f。
本文内容为 model card 与配置文件口径,我们没有下载权重、没有部署、也没有推理过这个模型,
因此不涉及生成质量、推理速度与显存占用的任何描述;文中所有评测数字均为 model card 自述,我们没有复现。
模型仓库内容随上游更新而变动,请以官方最新说明为准。