Tmax-9B-MLX-6bit工具调用实战:让本地大模型按qwen3_xml格式自动调用函数
【免费下载链接】Tmax-9B-MLX-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Tmax-9B-MLX-6bit
想让本地大模型像云端 API 一样自动调用函数(工具调用 / Function Calling),又不想把数据送出去?Tmax-9B-MLX-6bit 是一个专为 Apple Silicon 优化的开源 9B 本地大模型,它原生支持 qwen3_xml 格式的协议,模型会输出标准 <tool_call> 标签来自动调用函数。本文用一次完整的工具调用实战,带你 10 分钟跑通「本地大模型 + 函数调用」全流程。
Tmax-9B-MLX-6bit是什么:一款为工具调用而生的本地大模型
Tmax-9B-MLX-6bit 是基于 allenai/tmax-9b 的 MLX 量化版本,由社区用 mlx-lm 转换而来,采用 6bit 仿射量化(group_size 64),把约 89.5 亿参数压缩到约 6.8GB,一张消费级 Mac 即可本地推理。它的核心亮点有三个:
| 特性 | 说明 |
|---|---|
| 🧠 架构 | Qwen3.5 风格,32 层混合注意力(24 层线性注意力 + 8 层全注意力) |
| 📏 上下文 | 最高支持 262144 token(256K) |
| 🧰 工具协议 | qwen3_xml 兼容(<tool_call> 包裹的 XML 调用格式) |
| ⚖️ 许可证 | Apache-2.0,可商用 |
仓库核心文件就几个:config.json(模型配置)、chat_template.jinja(对话模板,工具调用核心逻辑就在这里)、tokenizer_config.json(其中 tool_parser_type: "qwen3_coder" 标明了解析器类型),权重则拆分为 model-00001-of-00002.safetensors 与 model-00002-of-00002.safetensors 两个分片。
为什么说 qwen3_xml 格式是函数调用的关键
很多本地模型「能聊天但不能干活」,根因在于缺少稳定的结构化输出协议。qwen3_xml 格式把函数调用编码为 XML 标签,模型输出形如:
<tool_call>
<function=get_weather>
<parameter=city>
北京
</parameter>
</function>
</tool_call>
相比裸 JSON,这种格式容错率高、可多函数并行、参数支持多行文本,配合 <tool_response> 回传机制,能实现完整的多轮工具调用闭环——这正是构建本地 Agent、自动化脚本、智能助手的基石。
本地部署前的准备工作(一键安装步骤)
Tmax-9B-MLX-6bit 需要 Apple Silicon Mac(M 系列芯片)+ Python 3.9+,安装只需两步:
pip install mlx-lm
git clone https://gitcode.com/hf_mirrors/mlx-community/Tmax-9B-MLX-6bit
先做一次冒烟测试,确认模型能正常加载推理:
from mlx_lm import load, generate
model, tokenizer = load("mlx-community/Tmax-9B-MLX-6bit")
print(generate(model, tokenizer, prompt="Hello", max_tokens=32))
💡 加载路径也可以直接指向本地克隆目录,方便离线使用。
工具调用实战:四步让模型自动调用函数
下面以「查询城市天气」为例,演示完整的工具调用闭环。
第一步:定义 JSON Schema 工具清单
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名"}
},
"required": ["city"]
}
}
}]
第二步:用 chat_template.jinja 渲染带工具的提示词
调用 tokenizer.apply_chat_template 并传入 tools 参数,模板会自动在 system 消息中生成 # Tools 与 <tools> 工具清单,并在末尾追加生成提示符:
messages = [{"role": "user", "content": "北京今天适合出门吗?"}]
prompt = tokenizer.apply_chat_template(
messages, tools=tools, add_generation_prompt=True, tokenize=False
)
第三步:解析模型的 <tool_call> 输出并执行
output = generate(model, tokenizer, prompt=prompt, max_tokens=1024)
print(output)
模型会在思考后输出标准工具调用,用正则或 XML 解析器提取 <function> 与 <parameter> 即可拿到函数名和参数,接着在本地执行真实函数。
第四步:把执行结果以 <tool_response> 回传
把工具结果按模板约定的 <tool_response> 格式作为 tool 角色消息追加,再次生成,模型就能基于真实数据给出最终回答:
messages = [
{"role": "user", "content": "北京今天适合出门吗?"},
{"role": "assistant", "content": output},
{"role": "tool",
"content": "<tool_response>\n{\"weather\": \"晴\", \"temp\": 26}\n</tool_response>"},
]
answer = generate(model, tokenizer,
prompt=tokenizer.apply_chat_template(messages, tools=tools,
add_generation_prompt=True,
tokenize=False),
max_tokens=512)
print(answer) # 基于天气结果给出建议
多轮工具调用与思考模式
chat_template.jinja 内置了 multi_step_tool 检测:只要最后一条 user 消息是 <tool_response>,模板就允许继续追加工具调用,天然支持「查完天气再查交通」这类链式任务。同时模型支持 <think> 思考块,若不需要推理过程,渲染时传入 enable_thinking=false 即可让模板输出空的 think 块,加快响应速度。
性能实测:一次工具调用仅需约 814ms
官方在 M3 Ultra Studio(60 核 GPU、256GB 统一内存)上测得的数据非常亮眼:
| 指标 | 数值 |
|---|---|
| 解码速度 | 79.8 tok/s |
| 首 Token 延迟 (TTFT) | 140 ms |
| Prefill 1k / 4k / 16k | 1032 / 1097 / 1064 tok/s |
| 工具调用端到端耗时 | 814 ms(成功) |
意味着在高端 Mac 上,从用户提问到模型输出工具调用,不到 1 秒即可完成,完全具备实时交互体验。
常见问题与避坑指南
- ⚠️ 这是纯文本模型:虽然上游带视觉元数据,但本仓库已剥离 vision 权重,不支持图片输入。
- ⚠️ 版本要对齐:转换基于
mlx-lm 0.31.3,建议安装相同或更新版本。 - ⚠️ 必须使用自带模板:工具调用格式依赖仓库附带的
chat_template.jinja,不要用其他模型的模板替代。 - ⚠️ 结束符注意:对话以
<|im_end|>作为 EOS,解析输出时记得按模板规则截断。
总结
Tmax-9B-MLX-6bit 把「本地大模型自动调用函数」这件事的门槛降到了极低:开箱即用的 qwen3_xml 格式、随仓库附带的工具模板、毫秒级的工具调用延迟,配合 Apache-2.0 协议,非常适合用来构建隐私优先的本地智能体、个人助理或自动化工作流。现在就 clone 下来,让你的本地大模型真正「动手干活」吧!🚀
【免费下载链接】Tmax-9B-MLX-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Tmax-9B-MLX-6bit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



