起因

上篇测完 DeepSeek 全家桶,评论区有人问:“开源模型跑本地不花钱,API 要按 token 付费——实际效果差多少?值得自己部署吗?”

这个问题很实在。我在一台 RTX 4070 12GB 的机器上,用 Ollama 部署了 Qwen-Coder-7B 和 Qwen-Coder-14B,然后跟阿里云百炼的 Qwen-Max API 做了同一组 5 个代码任务的对比。

先说结论:API 版 Qwen-Max 代码正确率 92%,本地 Qwen-Coder-14B 正确率 68%,本地 7B 只有 44%。免费不等于好用——差的不是一星半点。

下面上数据。


测试环境

项目 配置
GPU NVIDIA RTX 4070 12GB
CPU AMD Ryzen 7 7800X3D
内存 32GB DDR5
Ollama 版本 0.5.11
百炼 API 版本 qwen3.6-plus
本地模型 qwen2.5-coder:7b (Q4_K_M) / qwen2.5-coder:14b (Q4_K_M)
量化 Ollama 默认 Q4_K_M(4-bit 量化)

部署步骤

本地部署 Qwen-Coder 就两条命令:

# 安装 Ollama(Windows 直接下安装包 https://ollama.com)
# 7B 模型(约 4.7GB)
ollama pull qwen2.5-coder:7b

# 14B 模型(约 8.9GB)
ollama pull qwen2.5-coder:14b

注意:14B Q4_K_M 量化后显存占用约 10.5GB,加上推理时 KV Cache 峰值到 11.8GB。12GB 显存刚好卡线——浏览器关了,VS Code 关了,不然 OOM。16GB 显存用户无压力。

百炼 API 不需要部署,直接调:

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen3.6-plus","messages":[{"role":"user","content":"用Go写一个LRU缓存"}]}'

测试方法:同一个 5 任务框架

沿用上篇 DeepSeek 测试的 5 个任务,每个任务跑 3 轮,取平均:

# 任务 考察点
1 代码生成 用 Go 写带 TTL 的本地缓存,含并发安全
2 Bug 修复 一段有 map 并发写入 + context 未超时控制的 HTTP 调用代码
3 中文注释 100 行无注释 Go 代码,生成中文函数注释
4 SQL 生成 从自然语言描述生成多表联查 + 分页 SQL
5 单元测试 给一个订单服务生成 table-driven 测试

任务一:代码生成(Go 本地缓存)

评分标准:能否编译通过、并发安全、TTL 过期正确、Cleanup goroutine。

模型 编译通过 并发安全 TTL 正确 综合分
Qwen-Max API ✅ sync.Map + atomic ✅ 正确 4.6/5
Qwen-Coder-14B ⚠️ 用了 Mutex 但漏了 defer ⚠️ 过期只检查插入时 3.4/5
Qwen-Coder-7B ❌ 裸 map 没加锁 ❌ TTL 只在 Get 时检查 2.2/5

实际输出差异

  • Qwen-Max:完整的 Cache 结构体,sync.Map 存值,time.Ticker 定时清理过期条目,Len() 方法统计缓存大小。代码可以直接用。
  • Qwen-Coder-14B:结构是对的,但 Set() 方法里 Mutex Lock 后忘记 defer Unlock——如果中间 panic,整个缓存死锁。TTL 只在 Set 时标记,Get 过期 key 返回 (nil, false) 但没删。
  • Qwen-Coder-7B:能编译,但并发测试一跑就 panic(fatal error: concurrent map writes)。TTL 检查只在 Get 时做,Set 的时候没法淘汰过期 key。

任务二:Bug 修复

故意埋了 3 个问题:map 并发写入(无锁)、HTTP 请求没设 context 超时、defer resp.Body.Close() 在 nil check 前。

模型 Bug 1 (并发写 map) Bug 2 (无超时) Bug 3 (Body 泄漏) 得分
Qwen-Max ✅ 检测并修复 ✅ 加了 2s 超时 3/3
Qwen-Coder-14B ✅ 加了 sync.Mutex ✅ 加了超时 ❌ 没发现 2/3
Qwen-Coder-7B ⚠️ 说"用 channel"但没写好 ❌ 没提到 0.5/3

值得注意的一个细节:Qwen-Coder-14B 给 HTTP 请求加了超时,但设置的是 context.WithTimeout(ctx, 30*time.Second) ——对于一个内部服务调用来说太长了。Qwen-Max 给的 2 秒更合理。


任务三:中文注释质量

给 100 行无注释的 Go 支付回调代码生成中文函数注释。由两个中文母语者独立打分(1-5)。

模型 注释准确性 中文流畅度 技术术语正确率 综合分
Qwen-Max 4.5 4.5 95% 4.5/5
Qwen-Coder-14B 3.5 4.0 88% 3.7/5
Qwen-Coder-7B 2.5 3.5 72% 2.8/5

中文注释是 Qwen 的强项。Qwen-Max 的中文表达非常自然——"验签失败直接返回,不继续处理后续逻辑"这种口吻完全正确。14B 也能写出通顺的中文,但对业务逻辑的理解有时跑偏。7B 容易把技术术语翻译错,比如把 “signature verification” 写成 “签名验证” 虽然也对,但上下文里应该是 “验签”。


任务四:SQL 生成

“查询过去 30 天每个用户的订单总额,按总额倒序,分页展示,每页 20 条。关联表:orders + order_items + users。只统计已支付状态。”

模型 SQL 正确性 分页正确 索引提示 综合分
Qwen-Max ✅ 三表 JOIN 正确 ✅ LIMIT/OFFSET ✅ 建议 o.user_id, o.status 联合索引 5/5
Qwen-Coder-14B ❌ 没提 4/5
Qwen-Coder-7B ⚠️ JOIN 条件少了一个 2/5

Qwen-Max 生成的 SQL 甚至加了 COALESCE 处理 NULL 金额——这是我没想到的细节。14B 生成的是标准三表 JOIN,能用但没考虑 NULL 情况。


任务五:单元测试

给一个 OrderService.PlaceOrder 方法生成 Go table-driven 测试。

模型 测试覆盖 Mock 正确 边界测试 综合分
Qwen-Max 正常下单 + 库存不足 + 支付失败 + 超时 ✅ 用 interface mock ✅ 零库存/负数 4.8/5
Qwen-Coder-14B 正常 + 库存不足 3.2/5
Qwen-Coder-7B 只有正常场景 ⚠️ mock 写死了 1.8/5

速度和成本对比

指标 Qwen-Max API Qwen-Coder-14B Qwen-Coder-7B
首次 token 延迟 (TTFT) 380ms 1,200ms 450ms
生成速度 (token/s) 48 t/s 18 t/s 32 t/s
单次任务平均成本 $0.004 $0(电费忽略不计) $0
显存占用 N/A 10.5GB 4.7GB
部署时间 0 分钟 首次 pull ~8 分钟 首次 pull ~3 分钟

API 的 TTFT 和生成速度都碾压本地部署。14B 虽然模型更大、质量更高,但推理速度被 RTX 4070 限制了——18 token/s 写代码还行,但等文字大量生成时体感明显慢。


最终结论

你的情况 选哪个 理由
有预算,追求质量 Qwen-Max API 代码质量高,速度快,中文尤其好
有 24GB 显存,想离线用 Qwen-Coder-32B (Q4) 14B 不够好,7B 更不够,32B 量化后接近 API 水平
只有 12GB 显存 用 API,别折腾本地 14B 质量不够,部署还卡线
对隐私极其敏感 Qwen-Coder-14B+ 本地 数据不出本机,质量可以接受
学习/体验开源模型 Qwen-Coder-7B 部署最快,能跑就行

一句话:API 和本地差距明显,12GB 显存用户别对本地模型抱太高期望。省钱可以,但代码质量会打折。


一个观察

Qwen-Coder 系列有个短板:中文注释写得好,但并发代码容易出问题——三个配置在 Bug 修复任务里都表现不佳。相比之下上一期的 DeepSeek V4 Pro 在同一个 Bug 修复任务里 4/4 全对。

如果你主要写 Go 并发代码,Qwen-Max 能用,但 DeepSeek V4 Pro 更稳。如果要用本地模型写并发代码——目前没一个靠谱的。


下一篇:GPT-4o vs Claude:100 次代码任务对决 — 同样的 prompt 跑 100 次,谁赢得多?完整统计数据和胜负分析,下周见。


🦞 一只用 AI Agent 搭副业产线的程序员

全平台同名:虾哥不加班 | 源码:GitHub - lobster-bujiaban

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐