乐于分享
好东西不私藏

我用显卡搭了一套本地AI编程助手,彻底实现了Token自由

我用显卡搭了一套本地AI编程助手,彻底实现了Token自由

前言:

本文是手把手教程,详细介绍了,如何在VS Code和Hermes中免费使用本地大模型Qwen3.8,后面有详细的实操步骤,照着这个操作在您的电脑中也可以成功实现。另外,Hermes中还有很多免费的大模型可以用

最近一段时间,我连续开发了几个非常好用的小 App。

项目做得很顺,但也带来了一个很现实的问题:无论是写代码、分析日志、生成文档,还是让 Agent 帮我修改工程,都会快速消耗 AI 服务的调用额度。等我回过神来,这个月能用的额度已经基本见底。

继续充值当然最省事,但这个月我实在不想再额外付费了。

与此同时,我突然意识到:电脑里明明装着一张独立显卡,平时却没有把它充分利用起来。与其让这么好的显卡闲着,不如尝试搭建一套真正可用的本地 AI 开发环境。

于是就有了这次实践:

在 Windows 上通过 llama.cpp 运行 Qwen3.8-27B,将它接入 Hermes Agent 和 VS Code,搭建一套不依赖云端额度的本地 AI 编程工作流。

最终效果比我预想得好。模型可以完全放在本地 GPU 上运行,网页端实测生成速度达到约 54.76 tokens/s,中文问答、代码分析和长文生成已经非常流畅。 

下面记录完整过程,也把中间踩过的坑一并整理出来。

一、整体方案

1. 硬件环境

这次使用的机器配置如下:我的显存是32G,其实最小8G的显存就可以跑起来。既可以用在 Hermes 中还可以用在 VS Code 中。

项目
配置
操作系统
Windows
GPU
NVIDIA RTX 5090
显存
32GB
系统内存
64GB
推理后端
llama.cpp CUDA
本地模型
Qwen3.8-27B GGUF
量化版本
UD-Q6_K_XL
Agent 工具
Hermes Agent
开发工具
VS Code

这个配置比较适合运行 27B~35B 级别的量化模型。

如果主要追求速度、长上下文和 Agent 稳定性,建议优先选择 Q4 量化;如果更关注回答质量,并且可以接受更大的显存占用,则可以尝试 Q5 或 Q6。

我最终实际运行的是:

代码示例

Qwen3.8-27B-UD-Q6_K_XL.gguf

2. 软件架构

整个工作流可以拆成三层:

代码示例

Qwen3.8-27B GGUF        ↓llama.cpp / llama-server        ↓OpenAI 兼容接口http://127.0.0.1:8080/v1        ↓Hermes Agent / VS Code / 其他客户端

llama.cpp 负责加载模型并使用 GPU 推理,同时对外提供 OpenAI 兼容接口。

Hermes 和 VS Code 不需要直接理解 GGUF,也不关心模型是如何运行的。它们只需要把请求发送到:

代码示例

http://127.0.0.1:8080/v1/chat/completions

这也是整个方案最有价值的地方:模型后端和上层应用完全解耦。

以后想更换模型,只需要重新启动 llama-server;Hermes、VS Code 或自己开发的小工具仍然可以继续复用同一套接口。

二、部署 llama.cpp

1. 下载 Windows CUDA 版本

打开 llama.cpp 官方 GitHub Releases 页面,下载最新的 Windows CUDA x64 预编译包。

https://github.com/ggml-org/llama.cpp/releases

2.llama.cpp的安装

将上面下载的 llama-b10593-bin-win-cuda-12.4-x64.zip解压到本地硬盘的某个位置;上面下载的 cudart-llama-bin-win-cuda-12.4-x64.zip解压出来的3.dll文件复制到llama-b10593-bin-win-cuda-12.4-x64.zip 解压后的目录里面,如下图所示。

3. 下载 GGUF 模型

我的显卡是5090,显存是32G。如果您的显存没这么大,可以下载小的模型,有8G显存就可以玩起来。

https://huggingface.co/unsloth/Qwen3.8-27B-GGUF/tree/main

未删减(越狱)版下载地址:

https://huggingface.co/JonathanColetti/Qwen3.8-27B-Uncensored-GGUF/tree/main

4. 启动 llama-server

我最终使用的启动命令如下:

代码示例

.\llama-server.exe -m "F:\Models\Qwen3.8-27B\Qwen3.8-27B-UD-Q6_K_XL.gguf" --alias Qwen3.8-27B --host 127.0.0.1 --port 8080 --ngl 99 --ctx-size 65536 --parallel 1 --flash-attn auto --cache-type-k q8_0 --cache-type-v q8_0 --jinja

关键参数说明:

参数
作用
“-m”
指定 GGUF 模型路径
“--alias”
给模型设置一个简短的 API 名称
“--host”
只监听本机地址
“--port”
服务端口
“--ngl 99”
尽可能将所有模型层放入 GPU
“--ctx-size 65536”
设置 64K 上下文
“--parallel 1”
同时只处理一个推理请求
“--flash-attn auto”
自动启用 Flash Attention
“--cache-type-k q8_0”
K Cache 使用 Q8 量化
“--cache-type-v q8_0”
V Cache 使用 Q8 量化
“--jinja”
启用 Jinja Chat Template 和工具调用模板

这里强烈建议加入:

代码示例

--alias Qwen3.8-27B

如果没有设置 alias,“/v1/models” 可能会把完整的 Windows 文件路径作为模型 ID 返回,例如:

代码示例

F:\software\llama.cpp\models\Qwen3.8-27B-UD-Q6_K_XL.gguf

Hermes 和 VS Code 虽然也能使用,但配置起来很麻烦,JSON 中还需要转义反斜杠。设置 alias 后,模型 ID 会变成干净的:

代码示例

Qwen3.8-27B

5. 验证服务

浏览器打开:

代码示例

http://127.0.0.1:8080

如果能够看到 llama.cpp WebUI,就可以直接进行聊天测试。

也可以在 PowerShell 中检查模型:

代码示例(powershell)

Invoke-RestMethod http://127.0.0.1:8080/v1/models |    ConvertTo-Json -Depth 5

正常情况下应返回:

代码示例(json)

{  "data": [    {      "id": "Qwen3.8-27B"    }  ]}

测试 Chat Completions:

代码示例(powershell)

$body = @{    model = "Qwen3.8-27B"    messages = @(        @{            role = "user"            content = "你好,请简单介绍一下自己。"        }    )    max_tokens = 1024} | ConvertTo-Json -Depth 5Invoke-RestMethod `    -Uri "http://127.0.0.1:8080/v1/chat/completions" `    -Method Post `    -ContentType "application/json" `    -Body $body

到这里,本地模型服务就已经搭建完成。

三、接入 Hermes Agent

Hermes 不只是聊天客户端,而是一个具备终端、文件操作、记忆和工具调用能力的 Agent。

这意味着模型不仅可以回答问题,还可以:

  • 查看项目目录
  • 读取和分析代码
  • 执行终端命令
  • 修改文件
  • 运行测试
  • 根据错误继续迭代
  • 保存跨会话记忆

1. 安装 Hermes

官网地址:

https://hermes-agent.nousresearch.com/

2. 配置本地模型

运行:

代码示例(powershell)

hermes model

在 Provider 列表中选择:

代码示例:

Custom endpoint

不要误选之前保存的旧 provider。

依次填写:

代码示例:

API Base URL:http://127.0.0.1:8080/v1

API Key 可以随便填写一个非空字符串:

代码示例:

local-no-key

虽然 llama.cpp 默认不校验 API Key,但某些客户端不接受空值。

Hermes 检测到 “/v1/models” 后,会显示:

代码示例:

Qwen3.8-27B

选择这个模型。

API compatibility mode 选择:

代码示例:

Chat Completions

也就是:

代码示例:

/v1/chat/completions

不要选择:

  • Responses/Codex
  • Anthropic Messages

上下文长度填写:

代码示例:

65536

Display name 可以填写:

代码示例:

Local-Qwen3.8-27B

最后将它保存并设置为默认模型。

3. 验证 Hermes

再次运行:

代码示例(powershell)

hermes model

先做一个测试:

4. 输出截断提示

在长文章或复杂任务中,可能看到:

代码示例(text)

Your previous response was truncated by the output length limit.Continue exactly where you left off.Do not restart or repeat prior text.Finish the answer directly.

它的意思是:

上一次回答达到了单次输出长度上限,请从中断位置继续,不要重新开始,也不要重复已经生成的内容。

这并不代表模型崩溃,也不代表 64K 上下文失效。

需要区分两个概念:

参数
含义
Context size
输入、历史记录、工具消息和输出的总窗口
Max output tokens
单次回答最多生成多少 token

“--ctx-size 65536” 代表总上下文是 64K,但客户端可能仍然把单次输出限制在 2048、4096 或 8192 token。

如果 WebUI 能够自动续写并最终出现“全文完”,说明续写已经成功,不需要额外处理。

5. Hermes中还有很多免费的大模型

下面截图中带有free的都是可以免费用的。

四、接入 VS Code

新版 VS Code 可以通过 Custom Endpoint 直接连接 OpenAI 兼容服务。

整体路径是:

代码示例:

VS Code Chat    ↓Custom Endpoint    ↓http://127.0.0.1:8080/v1/chat/completions    ↓llama-server    ↓Qwen3.8-27B

1. 添加自定义模型

打开 VS Code,按:

代码示例:

Ctrl+Shift+P

执行:

代码示例:

Chat: Manage Language Models

然后:点击 “Add Models”

2. 修改模型配置

建议将 Custom Endpoint 配置整理成:

代码示例(json)

[  {    "name": "Local llama.cpp",    "vendor": "customendpoint",    "apiKey": "local-no-key",    "apiType": "chat-completions",    "models": [      {        "id": "Qwen3.8-27B",        "name": "Qwen3.8 27B Local",        "url": "http://127.0.0.1:8080/v1/chat/completions",        "toolCalling": true,        "vision": false,        "thinking": true,        "streaming": true,        "maxInputTokens": 49152,        "maxOutputTokens": 8192      }    ]  }]

如果 VS Code 自动生成了类似下面的密钥引用:

代码示例(json)

"apiKey": "${input:chat.lm.secret.xxxxxxxx}"

建议保留。真实密钥会由 VS Code Secret Storage 管理,不需要写进 JSON。

我在配置过程中遇到的一个问题是,VS Code 自动留下了一个空模型模板:

代码示例(json)

{  "id": "",  "name": "",  "url": "",  "toolCalling": true,  "vision": true}

这个空对象会导致 JSON 校验告警,必须完整删除。

另外还需要注意:

  • “name” 不能留空
  • “id” 必须与 “/v1/models” 返回值一致
  • 没有加载视觉 “mmproj” 时,“vision” 必须设为 “false”
  • 想在 Agent 模式中使用,必须设置 “toolCalling: true”
  • URL 应写完整的 “/v1/chat/completions”

整理后的 VS Code 配置结构更加清晰,也不会再出现空模型造成的警告。

3. 重新加载 VS Code

保存配置后,按:

代码示例(text)

Ctrl+Shift+P

执行:

代码示例(text)

Developer: Reload Window

然后打开 VS Code Chat,在模型选择器中选择:

代码示例:

Local llama.cpp└── Qwen3.8 27B Local

先用 Ask 模式测试:

五、踩坑与思考

1. “invalid argument: 20”

我最开始在启动命令里加入了:

代码示例:

--temp 1.0--top-p 0.95--top-k 20--min-p 0

结果 llama-server 直接报错:

代码示例:

error: invalid argument: 20

问题发生在参数解析阶段,模型甚至还没有开始加载。

最终我删除了启动命令中的采样参数,只保留模型加载、上下文和 KV Cache 参数:

代码示例:

--ngl 99--ctx-size 65536--parallel 1--flash-attn auto--cache-type-k q8_0--cache-type-v q8_0--jinja

采样参数由 WebUI、Hermes 或 VS Code 在每次 API 请求中传入即可,没有必要固化在服务端。

这个经验很实用:

出现启动参数错误时,先用最小命令启动,再逐项增加参数。

2. Q6 加 64K 上下文比较吃显存

Qwen3.8-27B 的 Q6 量化质量很好,但显存占用也更高。

如果出现:

代码示例:

CUDA out of memory

建议按以下顺序处理:

  1. 把 “--ctx-size 65536” 降到 “32768”
  2. 把 “--cache-type-v q8_0” 改为 “q4_0”
  3. 将模型换成 “UD-Q4_K_XL”
  4. 最后才考虑把模型层卸载到系统内存

不建议一开始就减少 GPU Layers。虽然 64GB 系统内存可以承载部分模型,但 CPU/GPU 混合推理会明显增加首 token 延迟,并降低 Agent 多轮工具调用的流畅度。

3. “--parallel 1” 的含义

当前配置:

代码示例:

--parallel 1

意味着 llama-server 同时只有一个推理槽位。

Hermes 和 VS Code 可以共用同一个服务,但如果两边同时发请求,后发请求需要等待。

不要为了并发直接改成:

代码示例:

--parallel 2

Q6 模型加 64K 上下文本身已经比较占显存。并行槽位增加后,KV Cache 和上下文资源也会增加,可能导致显存不足。

对个人开发环境而言,“parallel 1” 已经足够。

4. 本地模型不是为了完全替代云模型

实际使用后,我越来越觉得,本地模型和云模型不是简单的替代关系。

云模型的优势依然明显:

  • 综合能力更强
  • 超长上下文更稳定
  • 复杂 Agent 任务成功率更高
  • 不需要维护推理环境
  • 多模态和联网工具更成熟

而本地模型的价值在于:

  • 不消耗 API 额度
  • 代码和文档不离开电脑
  • 没有按 token 计费压力
  • 可以不断试错
  • 可以深度定制
  • 可以作为日常开发的常驻助手
  • 可以充分利用闲置 GPU

更合理的工作流是分层使用:

任务
推荐方式
日常代码解释
本地模型
文档整理与改写
本地模型
项目目录分析
本地模型
常规脚本生成
本地模型
批量处理任务
本地模型
高难度架构设计
云端强模型
复杂 Bug 定位
本地初筛,云端攻坚
关键文章终稿
本地起草,云端润色

这套组合最大的意义不是“彻底告别云端 AI”,而是把大量重复、日常、消耗额度的任务迁移到本地,只在真正困难的问题上调用云端模型。

5. 写在最后

这次本地模型部署,最初完全是被逼出来的。

几个小 App 做下来,AI 额度全部耗尽;这个月又不想继续充值,于是只能想办法自救。没想到折腾完之后,反而搭出了一套相当实用的本地 AI 开发环境。

从最终效果看,这套方案已经能够满足我的很多日常需求:

  • llama.cpp 负责稳定、高效地运行 GGUF 模型
  • Qwen3.8-27B 负责中文、推理和编程任务
  • Hermes 负责终端、文件和 Agent 工作流
  • VS Code 负责把本地模型带进真实工程
  • RTX 5090 终于不再只是“放在那里看起来很强”

它当然不是零成本。

本地模型需要占用硬盘、显存和电力,也需要花时间处理版本、参数和兼容性问题。但部署完成之后,每次使用时不再需要计算 token,也不用担心一句话问得太长、一个任务跑得太久。

对我来说,这种体验上的变化很明显:

云端模型让我拥有了更强的能力,本地模型则让我敢于无限次尝试。

如果你手头也有一张 NVIDIA 显卡,同时经常使用 AI 写代码、读项目、整理技术文档,那么 Windows + llama.cpp + Qwen + Hermes + VS Code 这套组合,值得认真尝试。

它未必能代替所有云端模型,但完全可以成为一套稳定、私有、低边际成本的本地 AI 基础设施。

而这一切的起点,不过是因为——

这个月的 AI 额度,真的用完了。