想把通义千问(Qwen)跑在自家机器上,既保护数据隐私又省下 API 费用?本篇手把手教你完成 Qwen 本地部署:用 Ollama 拉起模型,再通过 OpenAI 兼容接口在 Python / Java 里调用,覆盖流式输出、Function Calling 与多模型网关,让开源大模型真正落地到生产。
一、为什么要把 Qwen 本地部署
阿里开源的 Qwen(通义千问)系列是目前中文能力第一梯队的开源大模型,从 0.5B 到 72B 全覆盖。把它们本地部署,主要有三个实实在在的好处:
- 数据不出域:企业知识库、用户对话都在内网,不进第三方云服务,满足合规与隐私要求。
- 成本可控:一次部署、长期免 token 计费,高并发场景比按量调用便宜一个数量级。
- 完全可定制:换尺寸、加系统提示词、接私有工具链,不受公有 API 的限流与功能裁剪约束。
对大多数团队来说,本地部署 Qwen 的最佳入口是 Ollama——它把模型权重、推理运行时和 OpenAI 兼容接口打包好,一行命令即可起服务。
二、环境准备:安装 Ollama
Ollama 支持 macOS、Linux 与 Windows(WSL)。开发机上推荐用包管理器,服务器上用官方一键脚本:
# macOS:用 Homebrew 安装
brew install ollama
# Linux:官方一键脚本(会自动注册 systemd 常驻服务)
curl -fsSL https://ollama.com/install.sh | sh
# 启动并确认服务就绪
ollama serve &
curl -s http://localhost:11434/api/tags
只要 http://localhost:11434 能通,说明本地推理服务已经起来,后面的 API 调用都走这个地址。
三、拉取并运行 Qwen
Ollama 官方模型库已收录 Qwen2.5 全系列,直接 pull 即可。下面以最均衡的 7B 为例:
# 拉取 7B 指令微调版
ollama pull qwen2.5:7b
# 进入交互式对话(Ctrl+D 退出)
ollama run qwen2.5:7b
3.1 该选哪个尺寸
尺寸直接决定显存占用和回答质量。经验选型如下(数值为 FP16 近似显存):
| 模型尺寸 | 显存占用(约) | 适用场景 |
|---|---|---|
| qwen2.5:0.5b | ~0.4 GB | 嵌入式设备、极速原型验证 |
| qwen2.5:3b | ~2.0 GB | 笔记本本地轻量问答 |
| qwen2.5:7b | ~4.5 GB | 开发机主力,质量与速度均衡 |
| qwen2.5:14b | ~9 GB | 复杂推理、代码生成 |
| qwen2.5:32b | ~20 GB | 服务端高质量推理 |
| qwen2.5:72b | ~43 GB | 接近旗舰水平,需多卡 |
显存吃紧时优先降尺寸而不是硬上大模型,体验反而更稳。若要做知识库问答,可参考 Dify + Ollama 本地部署 把 Qwen 接进 RAG 流水线。
四、通过 OpenAI 兼容接口调用
Ollama 在 http://localhost:11434/v1 暴露了与 OpenAI 完全一致的接口,因此现有的 OpenAI SDK 无需改动即可直连本地 Qwen。这正是它比裸 llama.cpp 好用的地方。
from openai import OpenAI
# 指向本地 Ollama 的 OpenAI 兼容端点
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # Ollama 不校验 key,占位即可
)
resp = client.chat.completions.create(
model="qwen2.5:7b",
messages=[
{"role": "system", "content": "你是一个严谨的中文助手,用中文回答。"},
{"role": "user", "content": "用一句话解释什么是向量数据库"},
],
)
print(resp.choices[0].message.content)
4.1 流式输出
生产环境几乎都要流式,避免用户对着转圈。加一个 stream=True 即可逐字返回:
stream = client.chat.completions.create(
model="qwen2.5:7b",
messages=[{"role": "user", "content": "写一个快速排序的 Python 实现"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
print(delta, end="", flush=True)
五、用 Function Calling 让 Qwen 调你的工具
只会对答还不够,真正的智能体需要模型主动调用外部 API。Qwen 通过 Ollama 支持标准工具调用协议,写法与 OpenAI 一致。关于工具调用的完整范式,可看 Function Calling 实战。
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "根据城市名查询当前天气",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string", "description": "城市名"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="qwen2.5:7b",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools,
tool_choice="auto",
)
msg = resp.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0].function
print("模型请求调用:", call.name, call.arguments)
拿到 tool_calls 后,你在业务侧执行真实函数,把结果再喂回模型即可完成一轮工具闭环。想把它升级成多步自主智能体,可参考 从零手写 AI Agent:ReAct 智能体实战。
六、在 Java 项目里接入 Qwen
后端是 Spring Boot 的团队,可以直接复用 Spring AI 的 OpenAI 兼容接入,把 base-url 指到本地 Ollama。完整接入姿势见 Spring AI 实战:Java 项目如何接入大模型。核心配置如下:
spring:
ai:
openai:
base-url: http://localhost:11434/v1
api-key: ollama
chat:
options:
model: qwen2.5:7b
七、用 LiteLLM 统一多模型网关
当本地 Qwen 与多家云端大模型并存时,用 LiteLLM 做一层统一代理最省心:对外暴露同一套接口,内部按成本或可用性路由。部署方式见 LiteLLM 实战:统一代理管理多家大模型。这样你的代码只认 /v1,随时在 Qwen 本地实例和云端模型间切换,零改造。
八、生产落地与排障清单
| 现象 | 常见原因 | 解决办法 |
|---|---|---|
| 404 /v1/models | Ollama 未启动 | 确认 ollama serve 后台常驻 |
| 回答是英文/乱码 | 未限定语言 | system 提示词加”用中文回答” |
| 显存不足 OOM | 模型尺寸过大 | 换小尺寸,或限制 num_gpu 层数 |
| 首字延迟高 | 纯 CPU 推理 | 确认 GPU 层已加载,或减小 num_ctx |
| 并发掉速 | 单实例瓶颈 | 上 vLLM 高吞吐服务或加副本 |
需要高并发吞吐(如对外提供 API 服务)时,可考虑用 vLLM 部署大模型 替换 Ollama 作为推理后端,Qwen 同样有官方 vLLM 支持。若要做检索增强,记得配合 Embedding 模型选型 把私有文档向量化再喂给 Qwen。
十、量化选型:在显存与精度间取舍
本地部署绕不开量化。Ollama 拉取的 Qwen 默认是 Q4_K_M 这类 4-bit 量化权重,体积只有 FP16 的四分之一左右,显存友好但会损失一点点精度。如果你的机器显存充裕、又对回答质量要求极高,可以显式指定更高精度的标签:
# 拉取 8 位量化版本(精度更高、体积更大)
ollama pull qwen2.5:7b-q8_0
# 同一问题对比默认量化版与 q8_0 的输出差异,按需取舍
| 精度 | 7B 体积(约) | 适用建议 |
|---|---|---|
| q4_K_M | ~4.5 GB | 默认推荐,显存与质量平衡 |
| q8_0 | ~8 GB | 显存够、追求更高准确率 |
| fp16 | ~15 GB | 研究/评测场景,吃显存 |
实际体感上,Qwen2.5 在 4-bit 下中文能力依然很强,日常问答、代码补全几乎感知不到差异;只有在数学推理、长链逻辑这类任务上,才值得为更高精度多付出显存。另外别忘了定期 ollama pull 更新到最新小版本,官方会持续修复长上下文与工具调用的稳定性问题。
九、小结
Qwen 本地部署的门槛已经被 Ollama 降到极低:安装、pull、用 OpenAI 兼容接口调用,三步就能把通义千问跑在自家机器上。再叠加 Function Calling、Spring AI 与 LiteLLM 网关,一个私有、可控、可扩展的中文大模型服务就成型了。下一步可以把模型接进 RAG 或智能体,真正让本地 Qwen 替你干活。




