个人电脑玩AI-10让5060 Ti给你打工——我让 Claude Code 喝上了本地杂粮:Ternary-Bonsai-27B 部署历险记

by 雪隐_上班了 from juejin.cn/user/143341...

欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可联系授权。
一棵 5.9 GB 的"盆栽",一张 16GB 的显卡,一个有洁癖的聊天模板,以及一个至今待业的小模型。

专栏主旨 :用我那台 RTX 5060 Ti 16G + 64GB 内存 的"丐帮战车",做点不枉费电费的新奇事情。

前几章我们让显卡"听懂人话"(Whisper)、让显卡"画画"(ComfyUI)、让显卡当"翻译官"(QMT API)。这一章来点程序员最对口味的------让 Claude Code 这个云端 AI 程序员,喝上本地酿的粗粮酒。


先介绍主角:Bonsai-27B 是棵什么盆栽

Bonsai-27B 是 PrismML 在 2026 年 7 月放出的一棵"盆栽"------名字起得谦虚,实际上是个 27B 的多模态大模型,只不过用三进制(ternary)权重种在了一个特别小的花盆里:

  • 底座 :基于 Qwen3.6-27B 改造,64 层、262K 上下文,混合注意力(约 75% 线性 + 25% 全注意力),还带一个 0.46B 的视觉塔,能看图
  • 体重 :三进制版有效位宽仅 1.71 bpw,模型本体 5.9 GB 。官方说法是"10 倍于 FP16 的智能密度"------翻译成人话:同样 1GB 显存,它装的智商是别人的十倍。 还有个更极限的 1-bit 版(3.9 GB),那是给手机准备的,咱就不欺负它了。
  • 脑子 :官方跑了 15 项基准(数学、编码、agentic、工具调用、视觉......),三进制版保留了 Qwen3.6-27B 约 95% 的能力,数学和编码几乎无损。
  • 证件 :Apache 2.0,完全开源,Hugging Face 上直接下(prism-ml/Ternary-Bonsai-27B-gguf)。

一句话总结:这是一棵能在 16GB 显卡上撒欢跑的 27B,还能留出席位给 256K 上下文。 这感觉就像你租了个 50 平的房子,结果发现能塞下 200 平的家具------离谱,但香。

于是我的脑子开始不老实了:既然它编码能力"几乎无损",能不能让 Claude Code 直接跑在它上面?

说干就干。


第一幕:备料------先当一回编译民工

三进制权重是个新东西,原版 llama.cpp 不认识它 ,必须用 PrismML 官方的 fork。所以第一步不是双击什么 .bat,而是老老实实打开终端:

bash 复制代码
git clone https://github.com/PrismML-Eng/llama.cpp

然后编译。我的卡是 RTX 5060 Ti,Blackwell 架构,sm_120------新到很多项目的默认配置还不认识它,得显式告诉 CMake 你的显卡是"哪个年代的":

bat 复制代码
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=120
cmake --build build -j 8

配上 VS 2022 BuildTools 和一杯咖啡,等编译跑完,build\bin 里就有了一整套认识三进制的 llama.cpp 全家桶。

50 系显卡的朋友请注意: CMAKE_CUDA_ARCHITECTURES=120 这行是重点,漏了它编译不报错、运行才玄学------到时候你会对着满屏的 CUDA error 怀疑人生。

接着下载模型:

bash 复制代码
hf download prism-ml/Ternary-Bonsai-27B-gguf --include "*-Q2_0.gguf"

主模型 Q2_0 十来 GB,外加一个 Q8_0 的 mmproj(视觉投影,看图用的)。备料完毕,才轮到写启动脚本、双击 start_server.bat


第二幕:--flash-attn 吃掉了 --temp

然后,屏幕一闪:

go 复制代码
error: unknown value for --flash-attn: '--temp'

我对着这行字沉思了十秒钟。--temp 怎么就成了 --flash-attn 的值?

答案很简单:这个参数的现代写法是 --flash-attn on|off|auto必须带值 。我不带值,参数解析器本着"不能浪费粮食"的精神,把排在后面的 --temp 0.7 抓过来吃了。可怜的 --temp,还没上岗就成了别人的盘中餐。

改成 --flash-attn on,搞定。

第一个坑,深度:脚踝。 连崴脚都算不上,就是绊了一下。

顺便一提,启动参数里的 --temp 0.7 --top-p 0.95 --top-k 20 不是拍脑袋,是官方模型卡给的推荐值,照抄就行。抄作业不丢人,丢人的是抄错了还跑不起来。


第三幕:CC Switch 牵线搭桥

服务器起来了,下一步是让 Claude Code 认这个本地后端。

这个 fork 的 llama-server 原生支持 Anthropic 的 /v1/messages 协议,连转换层都不用搭。理论链路:

css 复制代码
Claude Code → CC Switch → llama-server → Bonsai 盆栽

一气呵成。

最省事的连接方式是 CC Switch ------一个图形化的 provider 切换工具,本质上帮你往 ~/.claude/settings.json 里写环境变量。添加一个自定义供应商:

json 复制代码
{
  "env": {
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:8080",
    "ANTHROPIC_AUTH_TOKEN": "sk-local",
    "ANTHROPIC_MODEL": "Ternary-Bonsai-27B",
    "ANTHROPIC_SMALL_FAST_MODEL": "Ternary-Bonsai-27B"
  }
}

几个小秘密:

  • ANTHROPIC_AUTH_TOKEN 随便填,llama-server 不查户口本,写 sk-i-love-my-pet 也行
  • ANTHROPIC_MODEL 也随便填,server 只服务已加载的那一个模型,你叫它"旺财"它也答应

保存,切换,重启终端,运行 claude------

然后现实就扇了我一巴掌。


第四幕:一个有洁癖的模板

Claude Code 启动后,还没来得及高兴,就看到了这行:

javascript 复制代码
API Error: 400 Unable to generate parser for this template.
...
Error: Jinja Exception: System message must be at the beginning.

翻译成人话:模型 GGUF 内置的 chat template(Qwen 系)有一条铁律------system 消息必须站在队伍最前面,否则原地爆炸raise_exception,宁可错杀不可放过)。

而 llama-server 这边,收到带 tools 的请求后会自动生成工具调用解析器(autoparser),生成过程中要拿模板反复试探渲染。一边爱试探,一边有洁癖,两边一碰------

嘭,400。

Anthropic 转换层其实是无辜的------它把 Claude Code 的 system 块规规矩矩合成了一个消息放在最前面。但模板在执行过程中就是会碰到"非开头的 system"这种场面,然后它选择了殉爆

这个模板的内心戏大概是:

"什么?你不是第一个?那我死了算了。"

------然后它就真的死了。


第五幕:给模板做心理疏导

既然模板有洁癖,那就给它做脱敏治疗

把模板从 GGUF 里完整导出,做两处小手术:

  1. 非开头的 system 消息 :不再抛异常,就地渲染成 <|im_start|>system...<|im_end|>,让它学会"随缘"
  2. "No user query found" 异常:同样软化为默认行为,不再殉爆

存成 bonsai-chat.jinja,启动参数加上:

bat 复制代码
--chat-template-file "F:\workspace\python\Bonsai-27B\bonsai-chat.jinja"

然后模拟 Claude Code 发了两轮请求实测:

  • 首轮带 tools :返回 200,模型正确产出 thinking + tool_use 块,调用 get_weather(city=Beijing)stop_reason: tool_use
  • 把工具结果("晴天,26°C")喂回去:返回 200,正常给出最终回答

协议链路全通。

那一刻的心情,大概相当于看着自家阳台上的盆栽终于开出了花------虽然不是牡丹,但能开花就是胜利。


实际体验:真香警告

跑通之后实际用了一段时间,说实话,超出预期

  • 编程能力:确实不错。 官方说"数学和编码几乎无损",本来我持保留态度,实际让 Claude Code 挂着它写代码、改 bug、重构,大部分任务完成度都相当可以,工具调用的格式也很稳。当然,跟云端那几个旗舰比还有差距,但"本地免费无限量"这个前提摆在这儿,香得很

  • 速度:稳定 40+ tokens/s。 在 RTX 5060 Ti 16GB 上,生成速度实测约 43 t/s------对一棵本地 27B 来说,这是相当能打的成绩(官方在 RTX 5090 上跑到 134 t/s,咱这卡有这速度知足了)。Prefill 约 500 t/s,Claude Code 几千 token 的系统提示也就几秒钟的事。

    43 t/s 什么概念?人类阅读速度 ≈ 3-4 t/s,说话 ≈ 2-3 t/s。你看一眼,它写一段。 以前是我等 AI,现在是 AI 等我,这感觉......有点不习惯。

  • 上下文:每会话 262144 token(256K)拉满,服务器 4 个并发槽,Q2_0 + q4_0 KV 全塞进 16GB 显存毫无压力。

一个小插曲:日志里藏着一条无声的抗议--------fit on 因为我显式写了 -ngl 99 直接罢工("n_gpu_layers already set by user, abort")。好在模型够苗条,硬装也装下了,这条警告就当是 fit 功能递的请假条:

"老板,我今天不加班了,反正也没我啥事。"

------ --fit on


番外:待业青年 dspark

模型目录里还躺着一位兄弟:Ternary-Bonsai-27B-dspark-Q4_1.gguf

这是配套的 drafter 小模型------推测解码(speculative decoding)里负责"打草稿"的那位。理想分工是:

  1. 小模型先飞速猜一串 token(跑得快,猜得不一定对)
  2. 大模型负责验收(跑得慢,但准)
  3. 猜对了就跳过,生成速度直接起飞

简历很亮眼,Q4_1 的身子骨也轻快,理论上是个好搭档。

但现实是:这个 fork 的 server 路径还没把它接进来。

启动脚本里特意写着:"do NOT add -md ...dspark..."

于是这位小同志只能躺在 D 盘里,每天看着 27B 的大哥以 43 t/s 的速度一步一个脚印地干活,自己连个面试机会都没有。

dspark 的内心独白:

"我 Q4_1,我轻快,我能打草稿,我能加速......为什么不让我上班? "

我:"等 fork 更新,再忍忍。"

等哪天 fork 把它接上了,40+ t/s 变 60+ t/s 不是梦。

小模型,别急,你的时代会来的。


结尾:几句大实话

如果你也想复现,几个忠告:

  1. 50 系显卡编译时别忘了 CMAKE_CUDA_ARCHITECTURES=120,漏了你就等着玄学报错吧。
  2. --flash-attn 记得带值 ,别让它乱吃东西。参数解析器饿起来连 --temp 都吃。
  3. 模板报错别慌 ,导出、脱敏、--chat-template-file 三连。给有洁癖的模板做心理疏导,是每个本地部署工程师的必修课。
  4. 想切回官方或第三方 API? CC Switch 点一下就换,配置不冲突,方便得很。
  5. 长会话后半段如果感觉模型开始"思考人生" (准确率下降、重复输出),开新会话比硬撑更有效------这是所有本地模型的通病,不是盆栽的问题。就当它需要"换换脑子"。

写在最后

总的来说:一棵 5.9 GB 的盆栽,让 Claude Code 在本地跑出了 40+ t/s 和不错的编程能力,还不用花一分 API 钱。

你的代码,你的模型,你的显卡,你的电费。

没有 API 账单,没有数据上传,没有"你已超出今日调用额度"。

这波不亏。

至于 dspark------等你转正那天,我再写一篇《待业青年翻身记》。


如果这篇文章让你对自己的 5060 Ti 多了几分信心,或者让你也想折腾一下本地 Claude Code,点赞、评论、转发都行。

谢谢大家 🙏

祝你们的模板永不报错,dspark 早日转正,生成速度永远跑在阅读速度前面。

相关推荐
新知图书18 小时前
6.3 详细实现与核心配置(双语绘本速记单词智能体开发)
人工智能·agent·ai agent·智能体·扣子
云上小朱18 小时前
Intel SGX相关软件部署
后端
码农学院18 小时前
建筑机械行业AI搜索优化技术方案:基于Spring Cloud微服务架构的文件管理与智能化内容推荐系统
人工智能·spring cloud·架构
Bigger18 小时前
我受够了每天问“今天吃什么”,于是做了个 AI 菜单工具
前端·人工智能·agent
kp0000018 小时前
AI大模型,如何区分善意提问与Prompt注入攻击
人工智能·网络安全·信息安全·prompt·ai安全
Reart18 小时前
Leetcode 1143.最长公共子序列(720)
后端·算法
掘金者阿豪18 小时前
一条SQL能执行成功,不代表它真的安全:一次生产环境数据库迁移事故复盘
后端
Patrick在香港18 小时前
Python实战:用数据分析拆解一场AI大会——WAIC 2026参展企业画像、议题演变与城市格局
人工智能·python·数据挖掘·数据分析·ai编程
另一种生命里18 小时前
你的 Agent 流程还是一团黑盒?这个开源引擎把每一步都画成了可回放的 DAG 图
人工智能·agent