1. 本地 llama.cpp 跑代码补全,Continue 插件为什么值得折腾
Vscode Continue 插件是一款开源的 AI 编程助手扩展,能在编辑器里直接做代码补全、对话问答、代码编辑和 apply 变更。llama.cpp 则是把大模型量化后跑在本地 CPU/GPU 上的推理框架,显存够就能全量卸载到显卡。把这两者接起来,你得到的是一个不依赖公网、响应稳定、按 token 计费为零的本地代码补全链路。适合谁?手头有 6G 以上显存、想给团队做内网补全、或者单纯不想每次补全都走云端的人。
但真正动手时,坑往往不在模型本身,而在“Key 和地址怎么填”。Continue 的配置分两层:Vscode 的settings.json负责插件级开关,Continue 自己的config.yaml(新版也支持config.json)负责模型定义。很多人卡在apiBase指向本地 llama-server 后,Continue 却报 401 或连接失败,原因通常是没搞清楚哪些请求走本地、哪些走统一网关。
我的做法是:本地 llama.cpp 负责补全这类高频、低延迟请求;需要更强模型做对话或复杂编辑时,通过 TaoToken 的统一 Key 和 API 通道转发到云端模型。这样一套配置里既有本地补全,又有云端兜底,Key 只维护一份。下面从环境准备讲到可复制的配置骨架,再到补全触发和连通性验证,最后把常见报错逐个拆掉。
2. TaoToken 统一 Key 与本地 llama.cpp 服务的前置准备
先说清楚 TaoToken 在这里的角色。它是一个统一的大模型 API 网关,官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。你可以在它的控制台里创建 API Key,然后用同一个 Key 访问不同厂商的模型。对 Continue 来说,这意味着你不需要为每个 provider 单独配 Key,只要把 Base URL 指向 TaoToken 的 API 地址,再填上模型 ID 就行。
前置准备分三块。
第一块是 llama.cpp 本地服务。你需要先编译或下载 llama.cpp 的可执行文件,拿到llama-server。模型文件建议用 GGUF 量化格式,4B 到 8B 参数、Q4 量化在 6G 显存上比较稳。启动命令参考下面这条,注意端口和上下文长度按自己机器调整:
llama-server --models-dir D:\llama.cpp\models -b 512 --mlock -ngl 99 --port 11444 --models-max 1 -c 65535参数含义:--models-dir指定模型目录,-b 512是批大小,--mlock锁定内存防止换出,-ngl 99表示尽量把所有层卸载到 GPU,--port 11444是服务端口,--models-max 1限制同时加载一个模型,-c 65535是上下文窗口。启动后访问http://127.0.0.1:11444能看到服务在跑。
第二块是 TaoToken 的 Key。登录控制台后进入 API Keys 页面创建,复制出来先存好。这个 Key 后面会填进 Continue 的配置里,用于走云端模型的请求。控制台地址是 https://taotoken.net/console ,创建 Key 的页面是 https://taotoken.net/api-keys 。
第三块是 Vscode 和 Continue 插件。在扩展市场搜 Continue 安装,装完侧边栏会出现 Continue 图标。首次打开会让你选配置方式,先跳过,我们直接改配置文件。
注意:本地 llama-server 和 TaoToken 是两条独立通道。本地补全走
127.0.0.1:11444,云端对话走 TaoToken 的 API 地址。配置里要分别写清楚,别把两者混在一个 provider 下。
3. 可复制的 settings.json 与 config.yaml 配置骨架
这一节是核心,直接给可复制的片段。先看 Vscode 的settings.json,路径在%APPDATA%\Code\User\settings.json(Windows)或~/.config/Code/User/settings.json(Linux/macOS)。Continue 相关的开关主要控制补全触发和遥测:
{ "continue.enableTabAutocomplete": true, "continue.autocompleteTimeout": 3000, "continue.telemetryEnabled": false, "continue.enableConsoleLogs": true, "editor.inlineSuggest.enabled": true, "editor.quickSuggestions": { "other": true, "comments": false, "strings": false } }continue.enableTabAutocomplete打开 Tab 补全,continue.autocompleteTimeout是补全请求超时毫秒数,本地模型慢的话可以调到 5000。editor.inlineSuggest.enabled必须为 true,否则补全不会以灰色内联形式出现。
再看 Continue 的config.yaml,路径在~/.continue/config.yaml(Windows 是C:\Users\你的用户名\.continue\config.yaml)。这是新版推荐格式,旧版是config.json,字段基本对应:
name: Local Config version: 1.0.0 schema: v1 models: - name: Qwen3.5-4B-Q4_0 provider: llama.cpp model: Qwen3.5-4B-Q4_0 apiBase: http://127.0.0.1:11444 roles: - chat - edit - apply - autocomplete - embed - name: tao-cloud-chat provider: openai model: gpt-4o-mini apiKey: sk-你的TaoTokenKey apiBase: https://taotoken.net/api/v1 roles: - chat - edit第一个模型块是本地 llama.cpp,apiBase指向本地服务,roles里包含autocomplete,这样补全请求会走本地。第二个模型块走 TaoToken,apiBase填https://taotoken.net/api/v1,apiKey填你在控制台创建的 Key,model填 TaoToken 支持的模型 ID。这样对话和编辑走云端,补全走本地。
如果你更习惯 JSON 格式,等价的config.json片段如下:
{ "models": [ { "title": "Qwen3.5-4B-Q4_0", "provider": "llama.cpp", "model": "Qwen3.5-4B-Q4_0", "apiBase": "http://127.0.0.1:11444", "roles": ["chat", "edit", "apply", "autocomplete", "embed"] }, { "title": "tao-cloud-chat", "provider": "openai", "model": "gpt-4o-mini", "apiKey": "sk-你的TaoTokenKey", "apiBase": "https://taotoken.net/api/v1", "roles": ["chat", "edit"] } ] }三件套要写全:Base URL、Key、Model ID。本地块没有 Key 是因为 llama-server 默认不校验,云端块三者缺一不可。改完保存,Continue 会自动重载配置,侧边栏模型下拉里能看到两个条目。
4. 补全触发与连通性验证的完整动作
配置写完不代表跑通,得验证。验证分两步:先确认本地 llama-server 活着,再确认 Continue 能拿到补全结果。
第一步,用 curl 直接打本地服务,确认模型加载正常:
curl http://127.0.0.1:11444/v1/models返回里应该能看到你加载的模型名。如果返回空或连接拒绝,说明 llama-server 没起来或端口不对,回去检查启动命令。
第二步,测补全接口。llama.cpp 的 server 兼容 OpenAI 的 completions 格式:
curl http://127.0.0.1:11444/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "Qwen3.5-4B-Q4_0", "prompt": "def add(a, b):\n return", "max_tokens": 32, "temperature": 0.2 }'正常会返回补全的代码片段。这一步通了,说明本地推理链路没问题。
第三步,测 TaoToken 通道。把 Key 换成你自己的:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}] }'返回 200 且有 choices 字段,说明云端通道正常。
第四步,回到 Vscode。打开一个.py或.js文件,输入半行代码比如def calculate_sum(,停一下,看有没有灰色内联补全出现。按 Tab 接受。如果没出现,打开 Continue 侧边栏看日志,或者按Ctrl+Shift+P运行Continue: Focus Continue Input看状态。
实测下来,本地 4B 模型在 6G 显存上补全延迟大概几百毫秒,首次请求会慢一些因为要加载模型。如果超时,把continue.autocompleteTimeout调大,或者换更小的量化模型。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
这一节按真实报错来拆。你大概率会碰到下面几个。
401 Unauthorized。出现在云端模型请求时,说明 Key 不对或没带上。检查apiKey字段是否填了完整的sk-开头字符串,apiBase是否是https://taotoken.net/api/v1。注意末尾的/v1不能少,少了会打到错误路径。如果 Key 是从控制台复制的,确认没有多余空格。
local proxy failed / connection refused。出现在本地补全时,说明 Continue 连不上127.0.0.1:11444。先确认 llama-server 进程还在,再确认端口没被占用。Windows 上用netstat -ano | findstr 11444查。如果 llama-server 崩了,看它的控制台输出,常见是显存不足导致加载失败,把-ngl调小或换更小模型。
Error reading choices / choices 字段为空。这个报错通常出现在响应格式不匹配时。llama.cpp 的 completions 接口返回的是choices数组,但如果你的 prompt 格式和模型训练格式差太多,模型可能返回空。检查max_tokens是否太小,或者 prompt 是否以完整 token 结尾。另一个原因是 Continue 把补全请求发到了 chat 接口,确认本地模型块的roles里确实有autocomplete。
OAuth / 登录相关报错。Continue 某些版本会引导你登录 Continue 官方账号,如果你只想用本地和 TaoToken,可以在设置里关掉账号同步。settings.json里加"continue.telemetryEnabled": false,配置里不要引用需要 OAuth 的 provider。如果侧边栏一直弹登录,检查config.yaml里是否有provider: continue的残留块,删掉。
模型 ID 不匹配。TaoToken 通道报model not found,说明model字段填的 ID 不在可用列表里。去控制台或文档确认模型 ID 的准确写法,大小写和连字符都要对。本地通道报模型找不到,检查--models-dir下的文件名和配置里的model是否一致。
注意:排障时优先看 Continue 的输出面板(View -> Output -> Continue),日志里会打印实际请求的 URL 和状态码,比猜快得多。
6. 把本地补全和统一 Key 固化成日常配置
跑通之后,建议把配置固化下来。本地 llama-server 可以写成开机启动脚本,Windows 用任务计划,Linux 用 systemd。模型文件放在固定目录,启动命令存成.bat或.sh,省得每次手敲。
TaoToken 的 Key 不要硬编码在会提交到 Git 的配置里。Continue 支持从环境变量读 Key,把apiKey写成$TAOTOKEN_API_KEY,然后在系统环境变量里设置。这样配置可以安全分享。
补全体验上,本地小模型适合补全单行和短片段,复杂重构还是走云端对话。你可以在 Continue 侧边栏切换模型,补全固定用本地,对话手动选云端。如果团队多人用,把config.yaml做成模板分发,每人只改自己的 Key。
需要长期跑编码 Agent 或更重的任务,可以看 Coding Plan 相关入口:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。模型对话调试用 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。Key 管理还是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。
最后一步,把config.yaml里的本地块和云端块都保留,日常补全走本地省延迟,遇到本地答不好的再切云端。这套组合我用了几个月,最稳的状态就是本地服务常驻、Key 走环境变量、配置进版本控制但脱敏。