Mac本地跑AI编程助手,这一篇够了
为什么我开始用本地AI写代码
不知道你们有没有经历过这种事儿——正写代码写到嗨,突然断网了。云端AI直接罢工,你只能对着屏幕发呆。
我就是最近遇到这种情况之后,才下定决心研究本地跑AI编程助手。结果发现,只要配置对了,在Apple Silicon上效果还真不错,有时候甚至比那些专门给Mac优化的方案还快。
实际可用的配置
测了一大圈之后,以下是我在M1 Max(64GB统一内存)上跑出来的最优方案:
核心组件:
- llama.cpp + Metal加速
- Gemma 4 26B-A4B,GGUF格式,Q4量化
- MTP(Multi-Token Prediction)draft模型,负责投机解码
- Gemma 4的多模态投影器,用来处理截图
- Pi——一个终端里的编程agent
这个配置肯定不是最强的,但胜在实用。速度要按tokens/秒算,不能按响应分钟算。
关键数据
我用下面这段prompt跑了多组测试:
"写一个Python函数,解析unified diff并返回修改过的文件路径。然后解释两个边界情况。"
每次生成大约128个tokens,便于横向对比生成速度。
基础性能:
直接用llama.cpp跑Metal加速的Gemma 4,速度是58.2 tokens/秒。能用,但说实话真正写代码的时候还是觉得有点拖。
MTP一开就不一样了:
这才是有意思的地方。Multi-Token Prediction让模型可以"预判"多个token,接受正确的预测,回滚错误的部分。打开Q8 MTP draft模型之后,速度直接蹦到72.2 tokens/秒——提升了24%,主模型根本没动。
Prompt处理速度基本不变(大约297-299 tokens/秒),但agent工作流里生成速度才是王道。你又不是一直狂敲新prompt,大部分时间都在等模型回复、做决策、执行工具。
我测试了1到6个draft token数量,对我的M1 Max来说3个最合适。超过4个反而变慢——这也好理解,预测越多,猜错的时候浪费的工作量越大。
llama.cpp vs MLX:意外的结果
这个挺出乎意料的。我原本以为MLX(苹果自己的ML框架)会更强,毕竟它是专门给Apple Silicon优化的。但实际情况恰恰相反:
| 运行时环境 | 生成速度 tok/s | |-----------|----------------| | llama.cpp Metal + MTP | 72.2 | | llama.cpp Metal | 58.2 | | MLX-LM (Unsloth 4-bit) | 45.8 | | MLX-LM (标准 4-bit) | 43.9 | | MLX-LM (OptiQ 4-bit) | 38.1 |
llama.cpp配MTP比最强的MLX配置快了约58%。llama.cpp这么多年积累的优化确实不是盖的——虽然是跨平台项目,但在macOS上跑得非常顺。
加上视觉能力
想让编程agent体验完整,截图支持是少不了的。可能是想让agent看看它写的界面效果,或者检查一下刚改的UI。
问题是:只有Gemma 4 12B本身是多模态的。我们用的26B模型需要额外加载多模态投影器。
加上 --mmproj 投影器之后,llama.cpp正确地向Pi报告了多模态能力,图片工具输出就正常工作了。而且!速度完全没有变慢——还是72.2 tokens/秒。
实际用起来怎么样
整个配置下来,模型文件大约17GB(主模型16GB,加上MTP head和投影器)。对于64GB统一内存来说,完全没压力。
Pi这个agent提供了一个干净的终端界面,连接llama.cpp server模式暴露的OpenAI兼容API。所以只要你用的工具支持OpenAI API格式就能用,不绑死在某个平台上。
最大的好处是什么?断网了继续写。网迟早会断的,而且总是在最要命的时候。本地agent可能比云端稍慢一点,但绝对够快,不会打断你的思路。
怎么配置
首先需要编译支持Metal的llama.cpp。官方文档有macOS编译指南,编译好之后server模式会给你一个OpenAI兼容的端点。
模型方面,Hugging Face上Unsloth的GGUF量化版本优化得不错。主模型选Q4_K_XL量化,再下载对应的Q8 MTP draft模型。
--spec-draft-n-max 这个参数从3开始调,在1到6之间试试不同值。不同Apple Silicon配置的最佳值可能不太一样。
值不值得搞?
如果你经常用AI助手写代码,而且硬件够用(最低16GB,推荐32GB以上),那绝对值得。光是不用依赖网络这一点就值回票价了,再加上MTP把速度拉到真正能用的级别,体验出乎意料地完整。
跟GPT-4级别的智能比不了,但用来代码补全、重构、debug辅助、日常编程任务?比大多数人以为的要强。而且跑在本地,属于你自己,隐私安全,不会有延迟抖动或者服务宕机。
这些工具已经成熟很多了。如果你以前试过本地模型被速度劝退过,再给这个机会试试。MTP改变了游戏规则。