写代码的时候最烦什么?不是需求改来改去,是写到一半,Copilot 转圈圈。网络闪一下就断,补全消失,思路跟着断。更别说金融、医疗的项目了——代码不敢往外传,哪怕就几个 token 去云端判断上下文,合规那边直接拒绝。

本地跑个模型,到底图什么

去年底出差坐高铁,进出隧道那几次,网络直接断掉,编辑器里的 Copilot 老老实实转圈——不是工具不好,是条件不允许。后来拿 Ollama 拉了 DeepSeek-Coder 本地跑,模型全放自己电脑上。补全弹出速度反而比预想快,最关键的:代码不经过任何外部 API。坦白讲,很多人对“自己代码先过一道别人服务器”这事一直有点介意,我也一样。

Ollama 像个模型运行器,把模型下载下来,通过命令行启动一个 API 服务。VS Code 那边装个插件,指向这个本地 API,补全和审查就都齐了。DeepSeek-Coder 是专门训练的开源代码模型,参数量从 1.3B 到 33B 都有。普通笔记本跑 7B 或者 14B 就够,配上 GPU 加速,出结果挺快的。不用折腾 Python 环境,不用手动装 PyTorch。Ollama 把模型权重和推理引擎打包在一起,几条命令搞定。

从零开始装过一次就明白了。Windows 上 Ollama 安装包 1.2 GB,下载加安装不到五分钟。拉模型嘛,看网络和硬盘——6.7B 那个大概 4GB。新卡老卡都行,纯 CPU 也能跑。算上 VS Code 插件配置,半小时内就能看到补全弹出来。网络慢的话,模型提前下好,U 盘带着走也行。下面就是把步骤捋清楚,不绕弯路。

pull DeepSeek-Coder model terminal command

先把 ollama 这个命令弄到手

刚才说的“两条命令就跑通”,第一行是 ——但你得先让 ollama 这个命令存在啊。它不是 Python 包,也不是 npm 模块,是一个独立的二进制运行时,类似 Docker Desktop 那种装完就能用的东西。

Windows 用户直接去 Ollama 官网 下安装包(1.2 GB),双击一路下一步,任务栏右下角出现小羊驼图标就算成。macOS 用 Homebrew:。Linux(Ubuntu/Debian 系)一行命令搞定:curl -fsSL https://ollama.com/install.sh | sh。别去 GitHub Releases 找 tar.gz 自己解压——除非你真想折腾 systemd 服务或者改 UID,不然纯属多此一举。

装完立刻终端敲:。必须 ≥ 0.1.30。0.1.29 及更早版本不支持 DeepSeek-Coder 的 llama3 架构 tokenizer 行为,拉模型会卡在 “loading tokenizer” 不动。我上周在一台老 Mac 上踩过这坑,重装才解决。

默认模型存储路径在 %USERPROFILE%\AppData\Local\Programs\Ollama\models(Windows)或 ~/.ollama/models(macOS/Linux)。4GB 的 加上后续可能拉的 14B/33B,C 盘很快告急。改环境变量就行:setx OLLAMA_MODELS "D:\ollama-models"(Windows)或 export OLLAMA_MODELS="/mnt/data/ollama-models"(Linux/macOS),重启终端生效。

拉模型,让它先开口说话

装完 Ollama,先别急着开 VS Code。让模型在终端里开口说话。DeepSeek-Coder 官方目前推两个主力轻量级版本:(推荐,RTX 4060 / M2 Pro 能跑满速)和 (Win10 笔记本核显、8GB 内存也能凑合用)。别试 33B,Ollama 默认不启 GPU offload,那玩意儿在 16GB 内存上会直接卡死在 quantization 阶段。

下载过程没进度条,但终端会打印 chunk hash。实测 6.7b 模型约 4.2GB,千兆宽带 3 分钟内落地。如果卡在 超过 10 分钟,大概率是镜像源抽风——临时切清华源:export OLLAMA_HOST=0.0.0.0:11434 + export OLLAMA_ORIGINS="https://mirrors.tuna.tsinghua.edu.cn/ollama/"(仅限拉取阶段,用完删掉)。拉完立刻验证:

输入一段 Python 片段,比如:

def fibonacci(n):
    if n <= 1:
        return n
    # 这里按 Ctrl+D 提交,看它续写

它应该补出 return fibonacci(n-1) + fibonacci(n-2)。如果返回空行或报 tokenizer.decode() got an unexpected keyword argument 'skip_special_tokens'——说明你还在用 0.1.29 或更旧版,回去重装。

注意

首次拉取模型需下载数GB,建议在良好网络环境下进行,或使用镜像站点加速。
VS Code plugin configuration local API code completion

让显卡动起来,别让 CPU 扛着

模型能跑了,但CPU推理那速度……写一行代码等两秒补全,我试了十分钟就想摔键盘。代码补全这种高频交互,延迟超过 500ms 基本就没法用。是时候让显卡干活了。Ollama 对 NVIDIA GPU 的支持挺省心的——它默认会去抓 CUDA 环境。但你得先确认两件事装好了:NVIDIA 驱动(建议 525.xx 以上)和 CUDA Toolkit 11.8+。别装太新的 CUDA 12.6,我踩过坑,Ollama 0.1.34 对 12.x 支持有问题,启动直接报

验证很简单:终端敲 nvidia-smi,看到显卡列表和显存占用就说明驱动正常。然后跑 ,随便输入一段代码,观察显存变化——6.7b 模型量化后大概占 4.8GB 显存,如果你的卡只有 8GB,开个浏览器再加 VS Code 差不多就满负荷了。别硬跑 33B,除非你的是 RTX 4090 24GB。如果显存没变化、CPU 占用飙升,说明 GPU 没生效。这时候手动 export 一下环境变量:

# Linux/macOS
export OLLAMA_CUDA=1
# Windows (PowerShell)
$env:OLLAMA_CUDA="1"
# 然后重启 Ollama 服务
ollama serve

再跑一遍,nvidia-smi 里应该能看到 进程占着显存了。如果还不行,检查 CUDA 版本—— 输出低于 11.8 的话,去 NVIDIA 官网下载 CUDA Toolkit 11.8 重装。还有个小坑:双显卡笔记本(集显+独显)可能默认走核显。Win 用户去「图形设置」把 ollama.exe 手动指定为「高性能 NVIDIA 处理器」。Linux 用户要确认 切换到了 nvidia 模式。显存够用的话,补全延迟能从 CPU 的 2~3 秒降到 200~400ms,这才算真正可用的代码助手。

让 VS Code 认识本地模型

GPU 加速跑通了,但 VS Code 还是哑巴——它不认识你本地那个正在显存里喘气的 。别急,Ollama 默认不自动暴露 API;得手动喊它一声:。终端执行这行命令(别加 & 后台运行,先盯着日志看):

看到 就算成功。这个端口是硬编码的,改不了,也别想换——Ollama 的 REST 接口就认这口锅。如果提示端口被占,netstat -ano | findstr :11434 查进程,杀掉再试。

VS Code 插件选 Continue,不是 CodeGPT。CodeGPT 配置太糙,模型下拉列表里压根不显示本地 Ollama 模型。Continue(v1.0.59+)才是目前唯一能自动识别 并列出 ollama 模型的插件。装完进设置 → Extensions → Continue → Configuration,填三处:API base 设为 ModelCompletions 打开。别碰 Temperature,默认 0.2 就够稳。

新建一个 main.py,敲 def parse_,光标停住——不是按 Ctrl+Space 才触发,是实时飘出建议。第一次延迟略高(约 300ms),后续基本贴着键盘节奏走。如果卡住不动,检查 VS Code 是否用了 Remote-SSH 或 WSL:Ollama 服务必须和插件在同一个系统上下文里,跨环境会连不上 localhost。补全能动了,审查还没上线——那是下一章的事。现在,你手边的 IDE 已经有了自己的副驾驶,只是它还不会主动提醒你 os.system() 有多危险。

自己定审查规则,比等别人 CR 舒服

补全终于能跟手了,但代码审查才是本地大模型真正拉开差距的地方。云端 Copilot 不敢让你写自定义审查规则——你没法让它“别光看语法,帮我查查这个 SQL 拼接是不是有注入风险”。本地跑 DeepSeek-Coder 就不一样了,Prompt 怎么写,它就怎么审。我是在一次 CR 被怼之后才认真搞这事的。同事指着我的 exec(raw_input) 说“你这是在给黑客开后门”,我才意识到——IDE 的静态检查根本抓不住这种动态执行的危险。于是我把这个场景塞进了 Continue 的 Slash Command。

Continue 插件支持自定义 Slash Command,配置文件在 .continue/config.json。加这么一段:

{
  "slashCommands": [
    {
      "name": "review",
      "description": "审查当前文件,找 bug、性能坑、安全隐患",
      "prompt": "请以资深代码审查员的身份审查以下代码。列出所有潜在 bug、性能问题、安全漏洞,以及可读性改进。每条问题附带行号和建议修复代码。代码:\n\n{{selectedCode}}"
    }
  ]
}

在编辑器里选中代码段,按 Ctrl+Shift+R 然后输入 /review,模型就会按你的 Prompt 输出。实测对 Python 的 os.system()、JavaScript 的 eval() 都能精准警告。C++ 的裸指针越界也能抓到七成左右。比 Clang-Tidy 的静态分析多了一层语义理解。默认的 DeepSeek-Coder 审查风格偏保守,经常说“这段代码可以改进”,但不告诉你具体怎么改。我调了 Ollama 的 Modelfile:

FROM deepseek-coder:6.7b
PARAMETER temperature 0.1
PARAMETER top_p 0.9
SYSTEM """
你是一个严格的代码审查员。只输出明确的问题和建议,不要写“总体来说”这类废话。每条问题必须附带行号和修正方案。
"""

然后 ,把 Continue 的 Model 换成 my-coder。再跑 /review,输出直接变成了“第23行:SQL 使用 f-string 拼接,有注入风险,建议改用参数化查询”。这才是审查该有的样子。有个小坑:审查大文件(300+ 行)时上下文窗口容易超,我一般只选中怀疑的片段而不是全文件扔进去。DeepSeek-Coder 的 4096 token 上下文对付单函数绰绰有余,但整个模块塞进去它会走神。本地审查的质量上限取决于你写 Prompt 的认真程度。我试过让模型审查自己刚才生成的代码,它会自我批评得特别狠——甚至把没问题的写法也挑出来说“风格不一致”。所以审查命令最好单独配一个低 Temperature 的模型副本,别和补全混用同一个。写代码这么多年,第一次觉得 IDE 真的在“看”我写的东西,而不只是帮我补括号。把审查规则握在自己手里,比等别人 CR 时被怼要舒服得多——至少被怼也是被自己的模型怼,面子上过得去。