【免费下载链接】NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit项目地址https://ai.gitcode.com/hf_mirrors/mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit点击查看免费下载本仓库是 mlx-community 将 NVIDIA Nemotron 3.5 Lightning 30BMamba-2 Attention 混合 MoE 架构约 31B 总参数、每 token 仅激活约 3B8-bit 量化后约 30GB 级体积转换为 MLX 格式的模型。这篇文章带你逐行精读chat_template.jinja 这份 Chat TemplateJinja2 对话模板搞懂它的思考模式enable_thinking与函数调用Tool Calling究竟是怎么设计的适合刚接触 LLM 推理的新手与普通用户。 一、项目文件速览先认识这些零件文件作用chat_template.jinja对话模板把 messages/tools 渲染成模型真正看到的文本本文主角config.json模型架构与量化配置8-bit、group_size 64、256K 上下文generation_config.json采样参数temperature 1.0、top_p 0.95tokenizer_config.json分词器配置含工具解析器类型tokenizer.json词表vocab_size 131072model.safetensors.index.json7 个权重分片的索引表README.md使用说明mlx-lm 加载示例模型本身有几个与模板设计直接相关的特性见 config.json#L22-L75 与 config.json#L8152 层 Mamba-2 / MoE / Attention 交错堆叠layers_block_type中mamba、moe占绝大多数每 5 层插入一个attention层兼顾长序列效率与全局注意力128 个路由专家、每 token 激活 6 个n_routed_experts: 128、num_experts_per_tok: 6所以30B 总参数、3B 激活262144 token 上下文max_position_embeddings: 262144超长对话意味着历史 token 的开销必须精打细算——这正是模板里截断历史思考设计的动机。 一句话理解 Chat Template 的价值你发给模型的用户消息和模型读到的 token 之间隔着一份 Jinja2 模板。思考模式开关、工具声明格式、历史消息压缩全都写在这份模板里改模板即改模型行为。️ 二、模板总览6 步执行流程把 chat_template.jinja 的 190 行代码抽象出来执行流程只有 6 步设默认开关L12-L13enable_thinking、truncate_history_thinking默认均为True定位最后一个用户轮次L31-L36记录last_user_idx后面所有历史/当前的判断都靠它切出 system 消息L21-L27若首条是system角色单独取出其余进入消息循环渲染工具声明区L44-L89把 OpenAI 风格的 tools 数组转成toolsfunction…的 XML 描述逐条渲染对话L97-L183assistant / user / tool 三种角色走三条分支生成提示L184-L189决定模型边想边答还是直接快答。下面按这条主线逐段精读。 三、思考模式enable_thinking逐行拆解3.1 默认开关两行代码定基调chat_template.jinja#L12-L13{%- set enable_thinking enable_thinking if enable_thinking is defined else True %} {%- set truncate_history_thinking truncate_history_thinking if truncate_history_thinking is defined else True %}两个开关都有默认值调用方不传就按思考打开 历史思考截断处理。对新手最实用的一条经验想要省 token、要低延迟就显式传enable_thinkingFalse。3.2 铁律每个 assistant 轮次都必须带 标签看 chat_template.jinja#L98-L110 的 assistant 分支它做了两件事如果消息里带了reasoning_content字段就把思考内容与正文分离包装⚠️ 这条铁律意味着即使你关闭思考模型也会先过一遍空思考再回答——这是模型训练时养成的输出习惯模板必须保证历史与当前轮次的格式完全一致否则会污染后续生成。3.3 历史思考截断长对话的瘦身魔法chat_template.jinja#L148-L161 对历史轮次loop.index0 last_user_idx即非最后一轮的 assistant 消息做瘦身{%- if /think in c and /think 前缀输出正文见 [chat_template.jinja#L152-L154](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L152-L154)。 效果很直观 text 截断前历史 assistant 轮次 assistant 我们来分析一下……2000 token 推理过程 最终答案是 42。 截断后 assistant 最终答案是 42。对 256K 上下文的模型来说多轮对话里每轮省下几百到几千 token 的内心戏累积下来能多聊好几轮也更省 KV/状态显存。当前轮次最后一次 user 之后的 assistant则完整保留思考内容保证模型记得自己刚想过的东西。3.4 收尾生成提示决定想还是快模板最后 6 行chat_template.jinja#L184-L189{%- if add_generation_prompt %} {%- if enable_thinking %} {{- assistant /think - enable_thinkingTrue默认→ 生成提示是 assistant /think /think /think /think /think | 参数 | 默认 | 位置 | 作用 | | --- | --- | --- | --- | | enable_thinking | True | [L12](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L12) | 生成提示是否打开思考块 | | truncate_history_thinking | True | [L13](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L13) | 是否截断历史轮次思考内容 | | tools | [] | [L28-L30](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L28-L30) | 工具声明列表 | | add_generation_prompt | — | [L184](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L184) | 是否追加生成提示 | | message.reasoning_content | 可选 | [L99](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L99) | 独立携带思考内容 | | message.tool_calls | 可选 | [L111](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L111) | 携带工具调用记录 | ### 4.1 为什么选 XML 而不是 JSON 描述工具 工具声明区从 [chat_template.jinja#L44](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d#L44) 开始。模板把 OpenAI 风格的标准 schemafunction.name/description/parameters渲染成 text # Tools You have access to the following functions: tools function nameget_weather/name description查询天气/description parameters parameter namecity/name typestring/type description城市名/description /parameter /parameters required[city]/required /function /tools配套的是 tokenizer_config.json#L16 里的tool_parser_type: qwen3_coder——模型侧用一个专门训练的解析器识别这种 XML 结构。相比 JSON function callXML 标签边界清晰、转义简单在流式输出时更容易被增量解析这也是 Qwen3、Nemotron 3.5 一代模型集体转向 XML 工具协议的原因。4.2 参数展开连计划外字段都不放过L51-L53兼容{type: function, function: {...}}包裹写法自动剥出内层functionL59-L76遍历parameters.properties逐参数输出name/type/description/enumL72-L74参数 schema 里的其他字段如default、minimum、items交给顶部的render_extra_keys宏兜底渲染成key…/key标签宏定义见 L1-L11嵌套对象自动tojson序列化。这套已知字段显式处理 未知字段兜底的写法保证了任意合法的工具 schema 都不会渲染报错——这是模板工程化程度的体现。4.3 格式军规一段写给模型的考纲L88 在工具声明末尾嵌了一段固定指令IMPORTANT 块核心要求四条只允许按 parameter… 格式回复**不允许任何后缀** 2. 必填参数必须给出 3. 允许在调用**之前**写自然语言推理调用之后不许再写 4. 无可用工具时正常回答不要向用户透露工具机制。模型侧的应答格式在 L132-L145 渲染历史工具调用参数值如果是对象/数组会自动tojsonL140与工具声明区的序列化方式严格一致形成声明 ⇄ 调用的对称契约。4.4 工具结果折叠进 user 角色执行完工具后结果以tool角色消息传回。L168-L179 的处理很巧妙{%- elif message.role tool %} {%- if loop.previtem and loop.previtem.role ! tool %} {{- user /think 结尾 2. **工具声明区**有 tools 时# Tools 标题 toolsfunction… XML 描述 格式军规 IMPORTANT 块 3. **对话区**assistant 轮次恒带 /think 前缀历史轮次的思考内容默认截断 4. **收尾**enable_thinking 决定 /think /think ## 六、实战建议与注意事项 - **低延迟场景**在 apply_chat_template 时传 enable_thinkingFalse模型跳过深度推理适合简单问答 - **省上下文场景**保持默认的 truncate_history_thinkingTrue多数框架自动生效多轮对话 token 消耗显著下降 - **工具调用**tools 直接传标准 OpenAI 格式即可模板自动完成 XML 化解析回传用 qwen3_coder 风格的 parameter… 解析器 - **采样参数**按 [generation_config.json](https://link.gitcode.com/i/e67b1329e798d85f03d02e7254c7a2ff) 使用 temperature1.0、top_p0.95、do_sampletrueeos_token_id 为 2 与 11见 [config.json#L11-L14](https://link.gitcode.com/i/9b223d3b7492260026fe63aaf92b46da#L11-L14) - **运行入口**pip install mlx-lm 后用 mlx_lm.load(mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit) 加载完整示例见 [README.md](https://link.gitcode.com/i/dd6e7ba4808b34ac5f8270fbe6320777)。 核心文件索引模板本体 [chat_template.jinja](https://link.gitcode.com/i/6e18a406bb8ef532aefb53de137d5e1d) 架构配置 [config.json](https://link.gitcode.com/i/9b223d3b7492260026fe63aaf92b46da) 采样配置 [generation_config.json](https://link.gitcode.com/i/e67b1329e798d85f03d02e7254c7a2ff) 分词器配置 [tokenizer_config.json](https://link.gitcode.com/i/8bf8f904482dc74c129fd76cfb1738fe) 权重索引 [model.safetensors.index.json](https://link.gitcode.com/i/d905486dc2f7cefa499750e65d0dfd68) --- **总结**NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit 的 Chat Template 用不到 200 行 Jinja2完整实现了思考/快答双模式 历史思考瘦身 XML 工具协议三件套。读懂这份模板你就掌握了控制这个 30B MoE 模型行为的全部旋钮——思考深度、上下文开销、工具协议都在你手里。赞分享【免费下载链接】NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit项目地址https://ai.gitcode.com/hf_mirrors/mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit点击查看免费下载相关推荐解码52层结构NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit中Mamba-2/Attention/MoE混合层设计深度剖析解码52层结构NVIDIA Nemotron 3.5 Lightning 30B A3B 8bit中Mamba 2/Attention/MoE混合层设计深度剖8bit量化为何够用NVIDIA-Nemotron-3.5-Lightning-30B-A3B-8bit的affine量化与group_size64原理详解8bit量化为何够用NVIDIA Nemotron 3.5 Lightning 30B A3B 8bit的affine量化与group_size64原理详解NVIDIA Nemotron 3.5 Lightning 30B A3B 架构深潜52层Mamba 与 GQA 注意力交错设计全解析NVIDIA Nemotron 3.5 Lightning 30B A3B 架构深潜52层Mamba 与 GQA 注意力交错设计全解析 NVIDIA Nemo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考