这篇文章记录在本地(macOS)从零搭建一个大语言模型的完整过程:用 llama.cpp 作为推理引擎,下载 GGUF 格式的模型文件,通过一个启动脚本拉起本地服务,最后在浏览器里直接聊天。全程不依赖云端 API,数据不出本机,离线也能用。

核心概念先搞清楚

llama.cpp

llama.cpp 是一个用 C/C++ 实现的大模型推理引擎,也是目前本地部署大模型最主流的方案之一。它的特点是:

  • 跨平台:macOS、Windows、Linux 都能跑,macOS 上自动走 Metal 加速,NVIDIA 显卡走 CUDA;
  • 轻量高效:对内存和显存友好,普通消费级机器也能运行量化后的模型;
  • 配套命令齐全:安装后提供 llama-server(HTTP 服务 + 自带网页聊天界面)、llama-cli(命令行对话)、llama-quantize(量化工具)等命令。

简单理解:llama 是加载大模型的引擎,模型文件本身(GGUF)是燃料,两者配合才能在本地跑起来。

GGUF 格式

GGUF(GPT-Generated Unified Format)是专为大语言模型设计的高效二进制文件格式,用于存储模型权重、元信息和配置,实现快速加载和本地部署。它是 llama.cpp 社区维护的标准格式,也是早期 GGML 格式的继任者,主要优势:

  • 单文件分发:一个 .gguf 文件包含权重、词表、超参数等全部内容,拷走就能用;
  • 原生支持量化:同一条模型可以发布 Q4_K_M、Q8_0 等多个量化版本,按机器配置选;
  • 加载快:二进制布局为快速加载优化,启动速度远快于原始权重。

Hugging Face

Hugging Face 是一个以开源和社区为核心的 AI 平台与生态系统,致力于让机器学习,尤其是自然语言处理(NLP)、计算机视觉(CV)、语音识别等变得更开放、更便捷、更可复用。它的 Model Hub 是目前最大的开源模型仓库,绝大多数开源模型的 GGUF 版本都能在这里找到,页面会列出文件列表、说明文档和使用方式。

Qwen 与 35B-A3B

Qwen(通义千问)是阿里云开源的大模型系列。本文使用的 Qwen3.6-35B-A3B 采用 MoE(Mixture of Experts,混合专家) 架构:总参数量 35B,但每次推理只激活约 3B 参数,兼顾了模型能力和推理速度,本地部署的性价比很高。

文件名里的 Uncensored 表示这是社区作者(HauhauCS)在官方模型基础上微调的版本,移除了部分安全拒答限制(脚本标题里也标注了越狱版);Aggressive 是微调风格的代号。这类变体在合规与内容安全上需要自行评估,日常使用建议优先选择官方版本。

另外这个模型还支持多模态:配套的 mmproj-*.gguf 是视觉投影文件,让模型能看懂图片,启动时用 --mmproj 参数挂载。

量化等级怎么选

GGUF 文件名里的 Q4、Q2 表示权重量化到的比特数,数字越小体积越小、质量损失越大。常见的几档:

档位 含义 适用场景
Q4_K_M K 量化 4 bit,社区常用稳定版 显存/内存中等,追求稳妥
Q4_K_P K 量化 4 bit 的变体,质量优先 显存充足(脚本里标注 4090 推荐)
IQ4_NL i-quant 4 bit,同位数下质量更高 显存中等,想压榨质量
IQ2_M i-quant 2 bit,体积最小 6G/8G 小显存或内存紧张

K 量化(Q4_K_*)是传统 k-quant 方案,i-quant(IQ*)利用重要性矩阵做量化,同比特数下通常质量更好,但加载稍慢。

安装 llama.cpp

macOS 上直接用 Homebrew 安装:

1
brew install llama.cpp

装完后就有了 llama-serverllama-cli 等命令。llama-server 会启动一个 HTTP 服务并自带网页聊天界面,是本地部署最方便的入口。

下载 GGUF 大模型文件

以 Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive 为例,在 Hugging Face 上找到对应的模型仓库,下载主模型 GGUF 和配套的多模态投影文件,放到同一个目录:

  • 主模型:Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf(按你的显存/内存选择量化档位,可下载多个档位随时切换);
  • 视觉投影:mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf

下载链接:

1
https://huggingface.co/HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive

备用下载地址(夸克网盘):

1
https://pan.quark.cn/s/d971b8a8b139#/list/share

编写启动脚本

把下面的 start.sh 和下载好的模型文件放在同一个目录。脚本提供了 4 个量化档位的选择菜单,选完后用 llama-server 启动本地服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/bash
# macOS 启动脚本(由 start.bat 转换而来)

# 设置终端窗口标题
printf '\033]0;Qwen3.6-35B-A3B 越狱版\007'

# 切换到脚本所在目录
cd "$(dirname "$0")" || { echo "无法进入脚本目录"; exit 1; }

# 多模态视觉模型(各选项共用)
MMPROJ="mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf"

# 优先使用当前目录下的 llama-server,找不到则尝试 PATH
SERVER="./llama-server"
if [ ! -x "$SERVER" ]; then
SERVER="llama-server"
fi
if ! command -v "$SERVER" >/dev/null 2>&1; then
echo "错误:找不到 llama-server,请确认它与 start.sh 在同一目录,或已加入 PATH。"
read -r -p "按回车键退出..."
exit 1
fi

# 菜单(无效输入会重新显示)
while true; do
clear
cat <<'EOF'
==========================================
Qwen3.6-35B-A3B 越狱版+多模态模型
零度优化版
==========================================

1. Q4_K_P(4090 推荐)
2. Q4_K_M(稳定版)
3. IQ4_NL(高压缩高质量)
4. IQ2_M(6G/8G 显卡)

==========================================
EOF
read -r -p "请输入数字:" choice

case "$choice" in
1) MODEL="Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_P.gguf"; CTX=131072; OUT=8192 ;;
2) MODEL="Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf"; CTX=131072; OUT=8192 ;;
3) MODEL="Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ4_NL.gguf"; CTX=131072; OUT=8192 ;;
4) MODEL="Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-IQ2_M.gguf"; CTX=8192; OUT=4096 ;;
*) echo "无效输入,请重新选择。"; sleep 1; continue ;;
esac

if [ ! -f "$MODEL" ]; then
echo "错误:找不到模型文件 $MODEL"
read -r -p "按回车键返回菜单..."
continue
fi

break
done

"$SERVER" \
-m "$MODEL" \
--mmproj "$MMPROJ" \
-ngl 999 \
-c "$CTX" \
-n "$OUT" \
--host 127.0.0.1 \
--port 8080

echo
read -r -p "服务已退出,按回车键关闭窗口..."

脚本里几个关键参数的含义:

参数 作用
-m 指定主模型 GGUF 文件
--mmproj 挂载多模态视觉投影文件,让模型支持图片输入
-ngl 999 把尽可能多的层放到 GPU(Metal/CUDA),999 约等于全部层
-c 上下文长度,131072 即 128K tokens;IQ2_M 档位降到 8192 以省内存
-n 单次生成的最大 token 数
--host / --port 监听地址和端口,默认 127.0.0.1:8080

执行启动脚本

给脚本加执行权限后运行:

1
./start.sh

看到下面几行输出就说明启动成功,浏览器访问 http://127.0.0.1:8080 即可使用:

1
2
3
4
0.02.185.889 I srv  llama_server: model loaded
0.02.185.895 I srv llama_server: listening on http://127.0.0.1:8080
0.02.185.895 W srv llama_server: NOTICE: server default port will be changed to :9931 in a future release
0.02.185.895 W srv llama_server: ref: https://github.com/ggml-org/llama.cpp/pull/26508

model loaded 表示模型加载完成,listening on http://127.0.0.1:8080 表示服务已就绪;后面两条 W 是版本提示,可以忽略。

使用模型

在浏览器中打开 http://127.0.0.1:8080,就会进入 llama-server 自带的聊天界面,直接输入问题即可和模型对话:

本地模型聊天界面

这个界面和主流 AI 聊天工具类似,支持多轮对话;因为挂载了 --mmproj,部分界面还支持上传图片做多模态理解。服务只监听 127.0.0.1,只有本机能访问,数据不会上传到任何外部服务。

常见问题

  • 找不到 llama-server:确认 llama-serverstart.sh 在同一目录,或者已经通过 brew install llama.cpp 加入 PATH;
  • 提示找不到模型文件:把对应档位的 GGUF 下载到脚本所在目录,文件名必须与脚本中的完全一致;
  • 端口被占用:8080 被其他程序占用时,把脚本里的 --port 8080 改成其他端口,访问地址同步修改;
  • 内存不够:选择 IQ2_M 档位(2 bit 量化),或把 -c 上下文调小(如 8192),能显著降低内存占用;
  • 想要命令行体验:不用网页,直接用 llama-cli -m 模型文件.gguf 进入终端对话。