ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

NVIDIA Nemotron 3.5 Lightning 30B A3B函数调用实战:基于qwen3_coder解析器的AI Agent工具集成完整教程

NVIDIA Nemotron 3.5 Lightning 30B A3B函数调用实战:基于qwen3_coder解析器的AI Agent工具集成完整教程

【免费下载链接】NVIDIA-Nemotron-3.5-Lightning-30B-A3B-bf16

项目地址:https://ai.gitcode.com/hf_mirrors/mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-bf16
点击查看免费下载

NVIDIA Nemotron 3.5 Lightning 30B A3B 函数调用如何快速落地?本教程带你完成这套 MLX 格式的本地大模型 AI Agent 工具集成:它采用 Mamba-2 + 注意力混合 MoE 架构(约 31B 总参数、每 token 仅激活约 3B),内置qwen3_coder解析器,可稳定输出结构化工具调用,让"闪电级"的本地推理速度真正服务于 Agent 场景。

一、模型速览:为什么 Nemotron 3.5 Lightning 适合本地 AI Agent ⚡️

在动手之前,先了解这个模型的三个关键优势:

特性数值来源
架构NemotronHForCausalLM(Mamba-2 + 注意力混合 MoE)config.json
总参数 / 激活参数31.6B / 约 3Bmodel.safetensors.index.json
精度bfloat16,未量化README.md
上下文长度262,144 tokensconfig.json
工具解析器qwen3_codertokenizer_config.json
词表大小131,072config.json
  • 快:MoE 结构中每个 token 只路由到 6 个专家(num_experts_per_tok: 6,见 config.json),激活计算量小,在 Apple Silicon 上推理速度非常快,这也是 "Lightning" 名字的由来。
  • 省:52 层中有 8 层是全局注意力层(其余为 Mamba 层,见 config.json 的layers_block_type),长上下文显存占用远低于纯注意力模型。
  • 能调工具:tokenizer_config.json 中明确声明了"tool_parser_type": "qwen3_coder",意味着 mlx-lm 等框架能自动识别并解析它的函数调用输出。

💡 内存提示:bf16 权重约 63GB(13 个分片,见下文清单),建议统一内存 ≥ 64GB 的 Mac(如 M4 Max / M3 Ultra 高配机型)运行。

二、仓库文件清单:函数调用能力在哪里 📦

本仓库是mlx-community使用 mlx-lm 0.31.3 从 PyTorch 版转换而来的 MLX 格式权重(README.md),所有文件各司其职:

文件作用
README.md模型说明与快速上手代码
config.json模型架构、MoE 与 Mamba 超参数
generation_config.json官方推荐采样参数:temperature 1.0、top_p 0.95、开启采样
tokenizer.json分词器词表(131,072)
tokenizer_config.json分词器配置,声明 qwen3_coder 工具解析器
chat_template.jinja对话模板:工具声明、工具调用格式、思考块
model-00001-of-00013.safetensors ~ model-00013-of-00013.safetensorsbf16 权重共 13 个分片
model.safetensors.index.json权重分片索引与参数总量

函数调用能力由两部分共同提供:chat_template.jinja 负责"约定格式"(把工具清单写进系统提示、定义调用与回传格式),qwen3_coder解析器负责"按格式切分"(框架据此从模型输出中切出函数名和参数)。

三、最快部署方法:mlx-lm 三步加载模型 🚀

1. 安装 mlx-lm

pip install mlx-lm

2. 加载模型并生成

from mlx_lm import load, generate model, tokenizer = load("mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-bf16") messages = [{"role": "user", "content": "Hello, who are you?"}] prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True) response = generate(model, tokenizer, prompt=prompt, verbose=True)

以上示例直接取自 README.md。首次运行会自动下载 13 个权重分片,请耐心等待。

3. 采用官方采样参数

按 generation_config.json 的推荐值,建议传入temperature=1.0, top_p=0.95并开启采样,这是函数调用格式最稳定的生成配置。

四、qwen3_coder 解析器原理:函数调用格式拆解 🔍

理解了格式,调试 Agent 就轻松了一半。下面三种"文本协议"全部定义在 chat_template.jinja 中:

1. 工具声明(注入系统提示)

提供tools后,模板会在 system 消息中自动插入# Tools段落,用 XML 风格列出每个函数的名称、描述与参数(见 chat_template.jinja):

# Tools You have access to the following functions: <tools> <function> <name>get_weather</name> <description>查询指定城市的实时天气</description> <parameters> <parameter> <name>city</name> <type>string</type> <description>城市名称,如:北京</description> </parameter> </parameters> <required>["city"]</required> </function> </tools>

2. 模型输出工具调用

当模型决定调用工具时,会按 qwen3_coder 格式输出(模板渲染规则见 chat_template.jinja):

<|tool_call|begin|> <|tool_call_argument|begin|> <function=get_weather> <parameter=city> 北京 </parameter> </function> <|tool_call|end|>

3. 工具结果回传

执行完工具后,把结果包进tool_call_response标记,再交给模型继续生成:

<|tool_call_response|> {"temp": "22℃", "weather": "晴"} <|tool_call_response|>

另外该模型是"会思考"的模型:助手回复默认带</think>思考块(见 chat_template.jinja 的生成提示)。Agent 场景中建议把历史轮次的思考内容截断(模板默认truncate_history_thinking开启),既省 token 又保持上下文干净。

五、AI Agent 工具集成实战:定义工具 → 解析 → 执行闭环 🧩

完整闭环只有四步:定义工具 → 模型输出调用 → 本地执行函数 → 结果回传并收尾。

第 1 步:定义工具(JSON Schema)

tools = [ { "type": "function", "function": { "name": "get_weather", "description": "查询指定城市的实时天气", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名称,如:北京"} }, "required": ["city"] } } } ]

第 2 步:带工具生成(mlx-lm 自动走 qwen3_coder 解析)

较新版本的 mlx-lm 会根据 tokenizer_config.json 中的tool_parser_type自动选择解析器,直接把tools传给generate即可:

messages = [{"role": "user", "content": "北京今天天气怎么样?"}] response = generate( model, tokenizer, prompt=tokenizer.apply_chat_template(messages, add_generation_prompt=True), tools=tools, temperature=1.0, top_p=0.95, verbose=True, )

第 3 步:解析并执行调用

如果框架没有替你把调用切分出来,可以用十几行正则兜底解析:

import re m = re.search( r"<\|tool_call\|begin\|><\|tool_call_argument\|begin\|>" r"<function=(\w+)>(.*?)</function><\|tool_call\|end\|>", response, re.S, ) if m: func_name = m.group(1) # get_weather params = dict(re.findall(r"<parameter=(\w+)>\n(.*?)\n</parameter>", m.group(2), re.S)) result = TOOL_REGISTRYfunc_name # 调用你自己的函数

执行后把result序列化成 JSON,按第四节的tool_call_response格式追加到对话历史,再次调用generate收尾,模型就会基于真实数据给出自然语言回答。

第 4 步:多轮循环

把上面的"生成 → 解析 → 执行 → 回传"包在while循环里,直到模型不再输出<|tool_call|begin|>,就是一个可跑通多步任务的 Agent 主循环。262K 的超长上下文足以容纳多轮工具交互而不用担心截断。

六、常见问题与调优建议 ❓

问题建议
内存不够,加载失败64GB 统一内存是安全线;权重为 bf16 未量化版,无量化版本可先评估内存需求
输出格式偶尔不合规严格采用 generation_config.json 的temperature=1.0 / top_p=0.95,勿用过低温度
Agent 循环不收敛限制最大工具调用轮数(如 5 轮);在系统提示中写明"无合适工具时直接回答"
长对话变慢开启truncate_history_thinking截断历史思考块,减少 token 消耗
想关思考直接出结果按模板约定传enable_thinking=False(见 chat_template.jinja)

✅调优清单:官方采样参数 → 描述清晰的工具 Schema(description越具体,调用越准)→ 单工具先行验证 → 再逐步加工具。

七、总结:把 Nemotron 3.5 变成你的 Agent 大脑 🎯

回顾本教程的完整路径:

  1. 认识模型:Mamba-2 + 注意力混合 MoE,31B 总量、3B 激活,本地跑得快、上下文长;
  2. 摸清文件:函数调用能力藏在 chat_template.jinja 与 tokenizer_config.json 的qwen3_coder声明中;
  3. 三步部署:pip install mlx-lm→load→ 按官方参数generate;
  4. 跑通闭环:工具声明、调用解析、结果回传三步协议,配合一个 while 循环即是完整 AI Agent。

NVIDIA Nemotron 3.5 Lightning 30B A3B 用"闪电"级的推理速度和现成的函数调用协议,为本地 AI Agent 提供了一条低门槛、可落地的集成路径。接下来不妨给它接上搜索、日历或数据库工具,把闭环扩展成你的第一个本地 Agent 应用。

【免费下载链接】NVIDIA-Nemotron-3.5-Lightning-30B-A3B-bf16

项目地址:https://ai.gitcode.com/hf_mirrors/mlx-community/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-bf16
点击查看免费下载
上一篇:终极Mac光标自定义指南:Mousecape让你的桌面焕然一新
下一篇:ArchWSL系统升级指南:pacman全面更新与内核升级注意事项

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进