1. 为什么要在 VSCode 里同时挂 ollama 和 DeepSeek
很多人第一次配 Continue 的时候,都会遇到一个尴尬局面:本地 ollama 跑着deepseek-r1:8b,补全速度还行,但一遇到复杂重构就明显吃力;想切到云端 DeepSeek 吧,又得单独去官网开 Key、改配置、重启插件,来回折腾。更麻烦的是,Continue 的config.json里每个模型都要写一遍apiKey和provider,模型一多,配置文件就变成一坨复制粘贴。
我自己的做法是:把 Continue 当成一个「模型路由器」,本地 ollama 负责日常 Tab 补全和轻量问答,云端 DeepSeek 负责长上下文重构和代码解释,而所有云端请求统一走一个兼容 OpenAI 协议的通道。这样配置文件里只需要维护一份 Base URL 和一份 Key,换模型只改model字段,不用动其他东西。
这篇就按这个思路来:先装 Continue,再配 ollama 本地模型,然后把云端 DeepSeek 的 Base URL 改到 TaoToken 统一通道,最后用一次补全请求验证连通性和生成效果。全程在 VSCode 里完成,不需要额外装客户端。
适合谁看:已经在用 VSCode 写代码、想低成本搭一套「本地+云端」双模型代码编辑器的人;或者你之前配过 Continue,但被config.json里一堆 provider 搞晕了,想找个更省事的接法。
核心检索词先摆出来:VSCode + ollama + DeepSeek + Continue 低成本代码编辑器,本质就是用 Continue 插件把本地模型和云端模型串起来,本地负责快、云端负责强,Base URL 统一后维护成本最低。
2. 前置准备:ollama 拉模型与 TaoToken 通道
2.1 先把 ollama 跑起来
ollama 的安装不复杂,官网下载对应系统版本,装完在终端确认一下:
ollama --version然后拉两个常用尺寸的 DeepSeek 蒸馏模型。8B 适合补全,14B 适合问答,显存够就都拉:
ollama pull deepseek-r1:8b ollama pull deepseek-r1:14b拉完用ollama list看一眼,模型名要和后面config.json里的model字段完全一致,大小写、冒号都不能错。这一步踩过的坑是:有人写deepseek-r1但实际拉的是deepseek-r1:8b,Continue 会报模型找不到。
ollama 默认监听http://localhost:11434,Continue 的 ollama provider 会自动识别这个地址,一般不用手动填。如果你改过端口,记得在配置里补apiBase。
2.2 TaoToken 通道准备
云端这部分,我用 TaoToken 作为统一入口。它兼容 OpenAI 的/v1/chat/completions协议,所以 Continue 里可以直接用openai这个 provider,把apiBase指过去就行。
先去控制台拿 Key:
https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console创建完 Key 复制保存,页面关掉就不再显示。然后确认一下你要用的模型 ID,DeepSeek 系列在模型列表里能看到,比如deepseek-chat、deepseek-coder这类。模型对话页面可以先手动发一条消息,确认通道本身是通的:
https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model_chatAPI 文档在这里,配置字段有疑问可以对照:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc如果你后面要长期跑 Agent 或大量补全,可以看下 Coding Plan,比按量更省心:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_planKey 管理页在这里,方便你随时轮换:
https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keysBase URL 统一用https://taotoken.net/api,注意这个地址不带任何查询参数,直接填在 Continue 的apiBase里。
3. Continue 的 config.json 可复制配置
3.1 装插件并打开配置文件
VSCode 扩展面板搜Continue,安装后侧边栏会出现 Continue 图标。点开,右上角齿轮进入设置,或者直接点「Add Chat model」它会引导你生成config.json。
配置文件路径一般在:
~/.continue/config.jsonWindows 下是C:\Users\你的用户名\.continue\config.json。这个文件是 Continue 的核心,所有模型、补全、上下文提供者都在这里定义。
3.2 完整可复制片段
下面这份是我实测能跑的配置,本地 ollama 两个模型 + 云端 DeepSeek 走 TaoToken 通道。把apiKey换成你自己的:
{ "models": [ { "title": "本地 DeepSeek R1 8B", "model": "deepseek-r1:8b", "provider": "ollama", "apiBase": "http://localhost:11434" }, { "title": "本地 DeepSeek R1 14B", "model": "deepseek-r1:14b", "provider": "ollama", "apiBase": "http://localhost:11434" }, { "title": "DeepSeek 云端 Coder", "model": "deepseek-coder", "provider": "openai", "apiBase": "https://taotoken.net/api", "apiKey": "你的 TaoToken Key", "contextLength": 128000 } ], "tabAutocompleteModel": { "title": "本地 DeepSeek R1 8B 补全", "model": "deepseek-r1:8b", "provider": "ollama", "apiBase": "http://localhost:11434" }, "contextProviders": [ { "name": "code", "params": {} }, { "name": "docs", "params": {} }, { "name": "diff", "params": {} }, { "name": "terminal", "params": {} }, { "name": "problems", "params": {} }, { "name": "folder", "params": {} }, { "name": "codebase", "params": {} } ], "slashCommands": [ { "name": "share", "description": "导出当前会话为 markdown" }, { "name": "cmd", "description": "生成 shell 命令" }, { "name": "commit", "description": "生成 git commit message" } ], "allowAnonymousTelemetry": false }几个关键点解释一下。
provider写openai而不是deepseek,是因为 TaoToken 兼容 OpenAI 协议,用openaiprovider 最稳,字段名也统一。apiBase填https://taotoken.net/api,Continue 会自动拼/v1/chat/completions。
tabAutocompleteModel我单独抽出来指向本地 8B,因为补全请求频率高,走本地不消耗云端额度,延迟也低。如果你机器性能一般,可以把补全也指到云端,但那样每次敲键盘都会发请求,成本会上去。
contextLength给云端模型设 128000,Continue 会按这个长度做上下文裁剪。本地模型不用设,ollama 自己管。
3.3 模型 ID 对照
| 用途 | provider | model | apiBase |
|---|---|---|---|
| 本地补全 | ollama | deepseek-r1:8b | http://localhost:11434 |
| 本地问答 | ollama | deepseek-r1:14b | http://localhost:11434 |
| 云端重构 | openai | deepseek-coder | https://taotoken.net/api |
改完保存,Continue 会自动重载配置。侧边栏模型下拉里应该能看到三个选项,切换即可。
4. 验证请求:一次补全看连通与生成
4.1 先验证云端通道
打开 Continue 对话框,模型选「DeepSeek 云端 Coder」,输入一句:
用 Python 写一个快速排序,要求带类型注解和单元测试如果配置正确,几秒内会返回完整代码。这一步验证的是 Base URL、Key、模型 ID 三件套是否对齐。返回内容里应该有def quick_sort(arr: list[int]) -> list[int]:这样的签名。
如果没返回,先看 Continue 输出面板的日志,常见的是 401 或 model not found。
4.2 验证本地补全
新建一个.py文件,输入:
def fibonacci(n):停一下,等 Continue 的 Tab 补全触发。本地 8B 应该会补出递归或迭代实现。按 Tab 接受。这一步验证 ollama 是否在跑、模型名是否匹配。
如果补全不出来,终端执行ollama list确认模型存在,再curl http://localhost:11434/api/tags看服务是否响应。
4.3 验证上下文引用
在对话框里输入@codebase然后问:
@codebase 这个项目里有哪些地方用了 requests 库?Continue 会扫描工作区,把相关文件片段拼进上下文再发给模型。云端模型上下文长,适合这种跨文件检索。本地模型也能做,但 8B 在长上下文下容易丢信息。
实测下来,云端 DeepSeek 在 128k 上下文下回答跨文件问题比较稳,本地 14B 适合单文件内的解释和重构。
5. 常见报错排查
5.1 401 Unauthorized
日志里出现:
Error: 401 Unauthorized原因通常是 Key 没填、填错,或者apiBase写成了带/v1的地址导致路径重复。检查config.json里apiKey字段,确认没有多余空格。TaoToken 的 Base URL 就是https://taotoken.net/api,不要再加/v1。
5.2 local proxy failed / connection refused
Error: local proxy failed: dial tcp 127.0.0.1:11434: connect: connection refused这是 ollama 没启动。终端执行ollama serve或确认 ollama 后台进程在跑。Windows 下 ollama 装完一般自启,Mac 下需要手动开一次。
5.3 reading choices: unexpected end of JSON
Error: reading choices: unexpected end of JSON input这个多半是模型返回了空响应或流式中断。先确认模型 ID 在 TaoToken 模型列表里存在,再检查contextLength是否设得过大导致请求被截断。把contextLength降到 64000 试试。
5.4 OAuth / 登录态问题
如果你之前用 Continue 登录过官方账号,配置里可能残留 OAuth 相关字段,和自定义apiBase冲突。解决办法是清掉~/.continue下的缓存,重新生成config.json,只保留上面那份手动配置。
5.5 模型名不匹配
Error: model "deepseek-r1" not foundollama 的模型名必须和ollama list输出完全一致。deepseek-r1:8b和deepseek-r1是两个不同 tag,写错就找不到。
6. 后续怎么用更顺手
配置跑通之后,日常使用有几个小技巧。
补全走本地,问答走云端,这是成本最低的分工。你可以在 Continue 设置里把tabAutocompleteModel固定成本地 8B,对话框默认选云端 Coder,需要离线时再手动切回本地 14B。
@codebase和@docs这两个上下文提供者很实用。前者扫工作区,后者可以挂官方文档 URL,比如把 Python 官方文档挂上去,问 API 用法时模型会优先引用。
如果你要接 Claude Code 或做更重的 Agent 任务,TaoToken 的接入文档里有对应说明:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=docClaude Code 相关入口:
https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=claude_code最后提醒一句:config.json改完一定要保存并等 Continue 重载,有时候 VSCode 窗口需要重新聚焦才会触发。如果模型下拉没更新,命令面板执行Continue: Reload Config强制刷新。