本地跑 Gemma 4 替代 Claude Code?M4 Max 实测告诉你为什么行不通

11 阅读5分钟

JeecgBoot AI专题研究 | 谷歌 Gemma 4 本地部署对接 Claude Code 的完整踩坑实录与性能分析

Gemini_Generated_Image_4qnpen4qnpen4qnp.png


起因:Claude Code 的 Token 黑洞事件

2026 年 4 月前后,Claude Code 社区炸了锅。有开发者逆向分析了 Claude Code 的二进制文件,揪出了两个互相独立的 Bug,直接导致 Prompt Cache 静默失效——原本应该被缓存复用的系统提示词,每次请求都在重新计算,Token 消耗凭空膨胀了 10 到 20 倍。

这意味着什么?Max 5x 订阅($100/月)的用户,一个小时就能把配额烧光;Pro 用户一周的额度只够撑 12 天左右。Anthropic 官方随后也承认"用户消耗限额的速度远超预期,正在积极调查"。

正巧赶上 2026 年 3 月 31 日,Google 发布了 Gemma 4 系列模型。一个自然的想法冒了出来:既然云端 Token 在流血,为什么不把模型搬到本地,彻底绕开这个问题?

128GB 统一内存 + 40 核 GPU + MoE 架构的轻量模型——纸面数据堪称完美。但实际跑下来,踩了一路的坑。这篇文章就是完整的踩坑复盘。

关于 Gemma 4 系列:为什么选 26B A4B

Google 这次一口气发布了四个版本:E2B、E4B、31B 和 26B A4B。

其中 26B A4B 之所以成为本地部署的热门选择,核心在于它采用了 MoE(Mixture of Experts,混合专家)架构——虽然总参数量达到 26B,但每次推理实际只激活约 4B 的参数。理论上,这意味着你能用 4B 级别的算力开销,获得接近 26B 的推理质量。

对于 Apple Silicon 设备来说,这简直是量身定制的:统一内存架构省去了 CPU-GPU 数据搬运的瓶颈,Metal 加速又能把 GPU 利用率拉满。

实测环境一览

开始之前,先交代测试平台的硬件和软件配置:

  • 硬件:Mac Studio M4 Max / 128GB 统一内存 / 16 核 CPU / 40 核 GPU
  • 模型:google/gemma-4-26b-a4b(Q4_K_M 量化,17.99 GB)
  • 推理框架:LM Studio 0.4.9(Metal 加速,GPU 卸载 30/30 层满载)

选 LM Studio 的理由很朴素:图形化操作零门槛、内置 Metal 加速、提供 OpenAI 兼容 API、一键就能起服务。

环境搭建:看起来很简单

整个搭建过程四步走:

  1. 下载 LM Studio(v0.4.9)
  2. 搜索并下载 google/gemma-4-26b-a4b 模型
  3. 进入 Developer → Local Server,加载模型
  4. 服务默认监听 http://localhost:1234

Claude Code 原生支持自定义 API 端点,只需要两行环境变量就能对接:

export ANTHROPIC_BASE_URL=http://localhost:1234/v1
export ANTHROPIC_API_KEY=lm-studio

到这里一切看起来都挺顺利。但启动 Claude Code 的那一刻,真正的麻烦才刚刚开始。

第一个大坑:系统提示词直接撑爆上下文

启动 Claude Code 后,终端毫不留情地甩出了一个错误:

The number of tokens to keep from the initial prompt is greater than
the context length (n_keep: 29006 >= n_ctx: 4096)

翻译成人话:Claude Code 光系统提示词就占了 29000+ Token,而模型的上下文窗口才 4096,连提示词都塞不进去,遑论对话了。

打个比方,这相当于拿一个 4 升的水壶去装 29 升的水。

于是开始一轮接一轮地调上下文窗口大小:

上下文长度结果
4,096❌ 系统提示都塞不进去
16,384❌ 依然装不下(n_keep: 29006 >= n_ctx: 16384)
32,768⚠️ 勉强能跑,但留给对话的空间极其有限
40,960✅ 能用,不过 Prompt 处理速度明显变慢

最终折中选了 32768。虽然勉强能启动,但 32K 减去 29K 的系统提示,留给实际对话的窗口只剩不到 3K Token——聊不了几轮就会溢出。

这背后的根本矛盾是:Claude Code 从设计之初就面向云端大模型的超长上下文场景(动辄 100K+),本地 26B 模型的上下文能力完全不在同一个量级。

第二个坑:Prompt 预处理慢到令人窒息

即便上下文窗口调到了 32768 勉强能跑,每次请求的 Prompt 预处理(prefill)阶段都令人焦灼。从日志里能看到进度条在一点一点地往前爬:

Prompt processing progress: 31.7%
Prompt processing progress: 33.5%
Prompt processing progress: 35.2%
...

一个请求光 prefill 就要等几十秒。原因也不难理解:Claude Code 每次请求都会携带完整的系统提示 + 全部对话历史,这对本地模型的长序列处理能力是巨大的考验。

速度对比:差距不是一星半点

实测下来,不同上下文长度场景下的生成速度差异非常明显:

场景生成速度Prompt 处理耗时体验评价
短对话(< 2K Token)~30-40 tok/s1-2 秒✅ 流畅
中等对话(~8K Token)~20-30 tok/s5-10 秒⚠️ 尚可接受
Claude Code 场景(29K+ Token)~14 tok/s30-60 秒❌ 完全不可用

如果拿来跟 Anthropic 云端 API 做对比,差距就更触目惊心了:

对比维度本地 Gemma 26BClaude Sonnet(API)
生成速度14 tok/s80-120 tok/s
上下文窗口32K(已捉襟见肘)200K
系统提示兼容性❌ 29K 勉强塞入✅ 游刃有余
首 Token 延迟30-60 秒1-3 秒
使用成本免费~$3-5/天

速度差 6-8 倍,上下文差距更是天壤之别。 唯一的优势就是不花钱——但体验上的落差实在太大。

优化尝试:能救多少救多少

虽然基本面不乐观,但还是尝试了一系列优化手段,看看能不能把体验拉到可用线:

有明显效果的调整
优化项具体操作实际效果
Flash AttentionLM Studio 右侧面板开启Prefill 阶段有一定提速
Unified KV Cache开启内存利用效率提升
模型常驻内存开启避免每次请求重新加载模型
CPU 线程数从 12 调到 14略有改善
评估批处理大小从 512 调到 2048Prefill 阶段提速明显
/compact 命令在 Claude Code 中定期使用压缩对话上下文,延缓溢出
收效甚微的调整
优化项原因
GPU 卸载层数已经拉满到 30,没有提升空间
更激进的量化(Q4_K_S)速度略有提升,但不解决上下文容量的根本问题

总的来说,这些优化能让短对话场景下的体验更流畅,但对 Claude Code 这种 29K+ Token 的重型场景,属于杯水车薪。

四个核心矛盾,一个都绕不开

把所有问题归纳一下,本地 Gemma 4 跑 Claude Code 面临的核心瓶颈其实就四条:

  1. 系统提示溢出:Claude Code 的系统提示词高达 29000+ Token,直接逼近甚至超出本地模型的上下文上限,模型在有些配置下连启动都启动不了
  2. 生成速度不达标:即便勉强跑起来,14 tok/s 的输出速度意味着一个简单的函数重构可能要等好几分钟
  3. Prefill 成为瓶颈:每次请求都携带完整的系统提示和对话历史,本地模型处理这些长输入动辄几十秒
  4. 上下文空间严重不足:32K 窗口减去 29K 系统提示,实际可用的对话空间不到 3K,写不了几轮就爆

一句话总结:Claude Code 天生就是为云端大模型的超长上下文量身打造的,26B 级别的本地模型在现阶段根本接不住。

M4 Max 128GB 跑 Gemma 4 26B:硬件性能参考

虽然结论不太乐观,但硬件性能数据本身还是有参考价值的:

指标数值
模型体积17.99 GB(Q4_K_M 量化后)
GPU 卸载层数30/30(满载)
生成速度(短上下文)~30-40 tok/s
生成速度(长上下文)~14 tok/s
Prompt 处理(29K Token)数十秒
内存占用~18-25 GB

Apple Silicon 的统一内存架构确实让本地大模型部署成为可能——128GB 内存跑 26B 模型毫无显存压力。但**"能跑"和"好用"之间,隔着的不止是一条鸿沟**。

那什么场景适合本地模型?

虽然跑 Claude Code 不太现实,但本地 Gemma 4 在以下场景下表现完全合格:

  • 轻量级 AI 对话工具(如 OpenClaw 等):系统提示短小、上下文可控,本地模型游刃有余
  • 单轮问答和代码片段生成:不涉及长上下文累积,响应速度在可接受范围内
  • 隐私敏感项目:代码完全不出本机,对安全合规有硬性要求的团队可以考虑

更务实的方案:省 Token 而非换模型

对于 Claude Code 用户来说,与其折腾本地部署,不如从"节流"入手:

  1. 继续使用 Anthropic API,Sonnet 的性价比在同级模型中依然突出
  2. 安装 RTK(Rust Token Killer) 压缩命令行输出,实测可省 60-90% 的 Token 消耗
  3. 本地模型留给聊天场景,跑 OpenClaw 或其他轻量对话工具
  4. 善用 /compact 和 /model 切换,在 Opus 和 Sonnet 之间按需灵活调度

写在最后

这次实测最大的收获,不是验证了"本地模型能不能替代 Claude Code",而是更清晰地看到了云端大模型和本地推理之间的真实差距——尤其是在上下文容量和处理速度这两个维度上。

Claude Code 的产品设计从一开始就深度绑定了云端超长上下文的能力,光系统提示就接近 3 万 Token。这不是当前任何 26B 级别的本地模型能优雅承载的。也许等本地模型的上下文窗口和推理速度再跨上一个台阶,这条路才会真正走通。

在那一天到来之前,把云端和本地各自放在最擅长的赛道上,才是最理性的选择。


本文为 JeecgBoot AI 专题研究系列文章。