NeoHorse-1-4B 长上下文实战:262K 原生、可扩展 1M 的推理参数配置避坑指南
【免费下载链接】NeoHorse-1-4B项目地址: https://ai.gitcode.com/hf_mirrors/TokenRhythm/NeoHorse-1-4B
NeoHorse-1-4B 是 TokenRhythm 基于 Qwen3.5-4B 后训练的 4B 参数长上下文推理模型,原生支持 262,144(约 262K)token 上下文窗口,官方标注最长可扩展至约 1,010,000 token。它采用混合线性注意力架构与 BF16 权重格式,专为智能体任务、工具调用和长文本推理设计。本文将从部署参数出发,带你一次配齐长上下文推理,并附上高频踩坑清单。
NeoHorse-1-4B 是什么:为什么它能"装下"262K 上下文
NeoHorse-1-4B 不是普通的 4B 小模型,而是一个"Agent-Native 因果语言模型":它由 TokenRhythm 通过路由引导的智能体后训练(routing-guided agentic post-training)改造而来,在十个基准上的宏平均得分 64.87,比基座 Qwen3.5-4B 的 58.94 高出+5.93(详见 README.md 中的评测表)。
长上下文能力的底气来自 config.json 里的两处设计:
| 关键配置 | 取值 | 作用 |
|---|---|---|
max_position_embeddings | 262144 | 原生上下文上限,即 262K token |
layer_types | 32 层中每 4 层一组(linear_attention×3 +full_attention×1) | 混合线性注意力,绝大多数层用低成本线性注意力,KV 缓存占用大幅降低 |
rope_theta | 10000000 | 超大旋转位置编码基频,为向 1M token 扩展预留外推空间 |
num_key_value_heads | 4(注意力头 16) | GQA 分组查询注意力,进一步压缩长序列显存 |
dtype | bfloat16 | BF16 权重,约 8GB 即可载入 4B 权重 |
简单说:全注意力层稀疏化 + 大 rope 基频 + GQA,让它在 4B 规模上就能扛住 262K 原生上下文,并具备向 1M 扩展的架构条件。
⚠️ 注意:本次发布为纯文本模型(语言模型权重重新打包),不包含视觉权重。发送图片请求会导致模板报错(chat_template.jinja 中明确抛出异常),请只走文本输入输出。
SGLang 启动 NeoHorse-1-4B:长上下文参数一次配齐
技术报告使用 SGLang v0.5.17,推荐启动命令如下:
pip install "sglang==0.5.17" MODEL_PATH="/path/to/NeoHorse-1-4B" python3 -m sglang.launch_server \ --model-path "$MODEL_PATH" \ --served-model-name neohorse-1-4b \ --host 0.0.0.0 \ --port 30000 \ --context-length 262144 \ --reasoning-parser qwen3 \ --tool-call-parser qwen3_coder三个参数的含义,缺一不可:
--context-length 262144:与 config.json 的max_position_embeddings严格对齐。这是长上下文推理的第一参数,设小了会被静默截断,设得远超原生值则未经官方验证。--reasoning-parser qwen3:模型开启思考模式(enable_thinking),需要推理解析器把<think>...</think>内容从正式回复中拆出来,否则前端会拿到"混在一起"的输出。--tool-call-parser qwen3_coder:配合智能体后训练,让工具调用以结构化格式返回,而不是纯文本。
服务启动后,通过 OpenAI 兼容接口发请求即可(注意model字段填--served-model-name指定的neohorse-1-4b,不是文件路径):
curl http://localhost:30000/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model":"neohorse-1-4b","messages":[{"role":"user","content":"你好,请介绍你的上下文长度"}],"max_tokens":512}'vLLM 部署 NeoHorse-1-4B:--max-model-len写法
如果你更习惯 vLLM,参数对应关系如下:
pip install -U vllm MODEL_PATH="/path/to/NeoHorse-1-4B" vllm serve "$MODEL_PATH" \ --served-model-name neohorse-1-4b \ --host 0.0.0.0 \ --port 8000 \ --max-model-len 262144 \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder要点:
--max-model-len 262144对应 SGLang 的--context-length,vLLM 用户最常漏的就是这个参数——不显式设置时可能回落到框架默认值(往往只有 32K~8K),长文档直接报错或截断。- 工具调用需要成对配置
--enable-auto-tool-choice+--tool-call-parser qwen3_coder,只配一半会导致工具调用不生效。 - 默认端口 8000,与 SGLang 的 30000 区分开,避免多框架共存时请求串端口。
长上下文 6 大高频踩坑清单
| 坑 | 现象 | 正确做法 |
|---|---|---|
| 上下文参数没对齐 | 长文档被截断、报"prompt 超长" | 显式设置--context-length/--max-model-len为262144 |
| 直接拉满 1M | 显存暴涨甚至 OOM,且超出官方验证范围 | 1M 为"可扩展上限",先按 262K 运行,再按实际显存逐步上调并自行验证效果 |
| 输入 + 输出超限 | 生成中途被硬停 | 预留余量:输入 token + max_tokens ≤ context-length |
| 忘配推理解析器 | 思考内容混进正式回答 | 加--reasoning-parser qwen3 |
| 忘配工具解析器 | 工具调用变成纯文本 | 加--tool-call-parser qwen3_coder(vLLM 再配--enable-auto-tool-choice) |
| 请求模型名写错 | 404 / model not found | model填neohorse-1-4b(即--served-model-name),不是路径 |
官方采样参数:一键复现报告协议
想要复现 README.md 中的评测成绩(SGLang v0.5.17、思考模式开启),采样参数照抄即可:
temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0, enable_thinking=true, force_nonempty_content=true注意presence_penalty=1.5这个偏高的取值——长上下文推理中它能有效抑制长回复里的重复循环,是复现成绩时容易被忽略的一项。
模型文件清单与许可
| 文件 | 说明 |
|---|---|
| config.json | 模型结构与长上下文核心配置 |
| model-00001-of-00002.safetensors、model-00002-of-00002.safetensors | BF16 权重(分片) |
| model.safetensors.index.json | 权重索引 |
| tokenizer.json、vocab.json、merges.txt | 分词器(词表 248,320) |
| chat_template.jinja | 对话模板,内置思考与工具调用格式 |
| LICENSE | Apache-2.0 许可 |
小结
- NeoHorse-1-4B 用混合线性注意力 + 大 rope 基频 + GQA实现 4B 规模的 262K 原生上下文,架构上预留至 1M 的扩展空间。
- 部署时三件套:上下文长度对齐 262144、推理解析器
qwen3、工具解析器qwen3_coder。 - 长上下文 = 长记忆 + 长工具链,把它接入智能体框架时,记得为
max_tokens预留输出余量。
配置一次到位,长上下文推理从此不踩坑 🐴
【免费下载链接】NeoHorse-1-4B项目地址: https://ai.gitcode.com/hf_mirrors/TokenRhythm/NeoHorse-1-4B
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考