1. 本地 ollama 跑 deepseek R1 的真实体验与 Continue 插件改造需求
ollama 是一个把大模型权重、推理引擎、模型管理打包成一条命令的本地运行工具,deepseek R1 是当前中文推理与代码补全表现都很能打的模型,VSCode 里的 Continue 插件则是一个可以自由切换模型通道的编程助手。把这三者串起来,你就能在本地跑一个不依赖外部网络的补全与对话环境,同时把 Continue 的模型通道改成 TaoToken 统一 API,兼顾本地推理和云端大模型切换。这套组合适合谁?适合日常写代码想平替 Github Copilot、又不想被单一模型绑死的开发者,尤其是手里有 16GB 以上内存、想先本地试水再决定要不要走 API 通道的人。
我自己的场景是这样的:主力机是 Linux,平时写 Python 和前端,Copilot 的补全确实顺手,但遇到内网项目或者想换模型对比输出时就不太灵活。于是我先用 ollama 把 deepseek R1 拉下来跑通,确认本地推理没问题,再把 Continue 的 config.json 改成双通道——本地 ollama 负责离线补全,TaoToken 的 API 通道负责需要更强模型时的对话和复杂重构。这样一套配置下来,Continue 里既能选本地模型,也能选云端模型,切换只改一个字段。
这里要先说清楚一个边界:ollama 负责的是本地模型运行,Continue 负责的是编辑器里的交互层,TaoToken 负责的是统一 API 通道和 Key 管理。三者职责不重叠,配置时不要混在一起改。很多人第一次配 Continue 失败,就是因为把 ollama 的地址填到了云端通道里,或者把 API Key 填到了本地模型配置里。下面我会按安装、部署、配置、验证、排错的顺序,把每一步的命令和参数都写清楚,你跟着做就能复现。
热词里提到的 Github Copilot 平替,核心不是功能一模一样,而是补全和对话这两个高频动作能不能稳定跑起来。Continue 的补全走的是 inline completion,对话走的是 chat 面板,两者在 config.json 里是分开配置的。你可以在 models 数组里放多个模型,每个模型指定 provider、model、apiBase 等字段。本地 ollama 的 provider 是 ollama,云端 TaoToken 的 provider 用 openai 兼容格式即可。理解这一点,后面的配置就不会乱。
2. TaoToken 前置准备:统一 Key 与 API 通道的 Base URL 填写位置
在改 Continue 的 config.json 之前,先把 TaoToken 这边的 Key 和 Base URL 准备好。TaoToken 的官网是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址后面不加任何 UTM 参数,直接填这个就行。你需要先去控制台创建一个 API Key,控制台入口在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,创建完把 Key 复制出来,后面填到 config.json 的 apiKey 字段里。
模型 ID 这块要特别注意,Continue 的 config.json 里 model 字段填的是模型标识,不是随便写个名字就行。你可以先去模型对话页面确认一下当前可用的模型 ID,入口是 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,页面上会列出模型名称和对应的 ID。如果你打算长期用 Continue 做编码和 Agent 任务,可以看一下 Coding Plan 的说明,入口是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,里面会讲清楚额度、模型范围和适用场景。API Key 的管理页面在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,你可以在这里创建、删除、查看 Key 的使用情况。
接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面会给出 Base URL、鉴权方式、请求格式的完整说明。如果你用的是 Claude Code 这类工具,可以参考 https://taotoken.net/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=ClaudeCodeAnthropic&utm_campaign=rewrite 这个页面,里面有针对 Anthropic 协议的配置说明。不过本篇的重点是 Continue 插件,所以 Claude Code 的部分你按需查看即可。
这里要强调一个常见误区:TaoToken 的 Base URL 是 https://taotoken.net/api ,不是 https://taotoken.net/api/v1 ,也不是带斜杠结尾的地址。Continue 的 config.json 里 apiBase 字段填这个地址,provider 用 openai 兼容格式。如果你填成别的路径,请求会返回 404 或者 401。Key 的格式通常是一串以特定前缀开头的字符串,复制时不要带空格,也不要手动换行。填完之后先别急着重启插件,下一节我会给出完整的 config.json 片段,你对照着改。
另外,TaoToken 的 Key 是统一管理多个模型的,也就是说你不需要为每个模型单独申请 Key。一个 Key 可以在 config.json 里被多个模型条目复用,只要 model 字段不同就行。这一点比某些平台要方便,配置时不用来回切换。如果你之前用过其他平台的 Key,注意不要混用,Base URL 和 Key 要配套,否则会出现鉴权失败。
3. Continue 的 config.json 可复制片段与 ollama 本地模型配置
Continue 插件的配置文件路径在 VSCode 里可以通过命令面板打开,具体操作是:按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入 Continue: Open Config,回车后会打开 config.json。这个文件默认在用户目录下的 .continue 文件夹里,Linux 和 macOS 是 ~/.continue/config.json,Windows 是 C:\Users\你的用户名.continue\config.json。你也可以直接在 VSCode 设置里找到 Continue 的配置入口,点击 Open configuration file 按钮。
下面是一份可以直接参考的 config.json 片段,包含本地 ollama 的 deepseek R1 和 TaoToken 的云端通道两部分。注意 JSON 格式不能有注释,字段名和值都要用双引号。你复制后把 apiKey 换成自己的 Key,model 换成自己确认过的模型 ID。
{ "models": [ { "title": "DeepSeek R1 Local", "provider": "ollama", "model": "deepseek-r1:7b", "apiBase": "http://localhost:11434" }, { "title": "TaoToken GPT", "provider": "openai", "model": "gpt-4o-mini", "apiKey": "你的TaoToken Key", "apiBase": "https://taotoken.net/api" } ], "tabAutocompleteModel": { "title": "DeepSeek R1 Local Autocomplete", "provider": "ollama", "model": "deepseek-r1:7b", "apiBase": "http://localhost:11434" }, "embeddingsProvider": { "provider": "ollama", "model": "nomic-embed-text", "apiBase": "http://localhost:11434" } }这份配置里,models 数组定义了两个模型,第一个是本地 ollama 的 deepseek R1,第二个是 TaoToken 的云端模型。tabAutocompleteModel 单独指定了补全用的模型,这里我用了本地的 deepseek R1,因为补全对延迟敏感,本地跑更快。embeddingsProvider 是代码索引用的嵌入模型,如果你没装 nomic-embed-text,可以先用 ollama pull nomic-embed-text 拉下来,或者暂时删掉这个字段,不影响基本补全和对话。
关于 ollama 的 apiBase,默认是 http://localhost:11434 ,如果你改过 ollama 的监听端口,这里要同步改。Windows 下如果 ollama 装在 C 盘,默认也是这个地址,不需要额外配置。model 字段填的是 ollama 里的模型名,你可以先在终端执行 ollama list 确认一下,输出里 NAME 那一列就是模型名,比如 deepseek-r1:7b 或者 deepseek-r1:1.5b。如果你拉的是其他尺寸,把 model 字段改成对应的名字即可。
TaoToken 的 provider 填 openai,这是 Continue 支持的兼容格式。apiBase 填 https://taotoken.net/api ,apiKey 填你在控制台创建的 Key。model 字段填模型 ID,比如 gpt-4o-mini 或者你在模型对话页面确认过的其他 ID。如果你要用 Claude 系列模型,provider 可以改成 anthropic,apiBase 同样填 https://taotoken.net/api ,具体可以参考接入文档里的说明。配置改完后保存文件,Continue 会自动重载,如果没有重载,手动重启 VSCode 或者执行 Continue: Reload 命令。
这里有一个细节要注意:Continue 的 config.json 里,models 数组的顺序会影响模型选择器里的显示顺序,但不影响功能。tabAutocompleteModel 是独立配置的,如果你想让补全也用云端模型,把 provider 改成 openai,apiBase 和 apiKey 填 TaoToken 的即可。不过补全请求频率高,用云端模型会产生较多调用,建议先用本地模型试,确认效果后再决定要不要切云端。
4. 验证请求与成功结果:补全和对话是否生效的具体动作
配置改完后,先验证本地 ollama 是否正常。打开终端,执行 ollama list,确认 deepseek R1 的模型名和大小写一致。然后执行 ollama run deepseek-r1:7b,进入交互模式后输入一句测试,比如“写一个 Python 快速排序”,看是否能正常输出。如果能输出,说明本地模型没问题。退出交互模式按 Ctrl+D 或者输入 /bye。这一步很关键,因为 Continue 调用 ollama 走的是 HTTP 接口,如果 ollama 服务没起来,Continue 会报连接失败。
接着验证 Continue 的补全。在 VSCode 里新建一个 Python 文件,输入 def 然后停顿一下,看是否有灰色的补全建议出现。如果没有,检查右下角 Continue 的状态图标,点击后看模型选择器里是否选中了 tabAutocompleteModel 对应的模型。你也可以手动触发补全,按 Ctrl+Shift+Space(macOS 是 Cmd+Shift+Space),看是否弹出建议。如果补全出现但内容不对,可能是模型太小,换成 7b 或更大的版本再试。
然后验证对话。按 Ctrl+Shift+P 打开命令面板,输入 Continue: Open Chat,回车后打开对话面板。在输入框里输入“解释一下这段代码”,选中一段代码后发送,看是否返回结果。如果返回的是错误信息,先看错误类型。如果是 401,说明 TaoToken 的 Key 不对或者没填;如果是连接超时,说明 apiBase 填错了或者网络不通;如果是 model not found,说明 model 字段填的模型 ID 不对。你可以对照接入文档里的模型列表确认。
验证 TaoToken 通道时,可以单独在终端用 curl 测试一下。命令如下:
curl -X POST https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer 你的TaoToken Key" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "你好"}] }'如果返回 JSON 里有 choices 字段,说明 Key 和 Base URL 都没问题。如果返回 401,检查 Key 是否复制完整;如果返回 404,检查 Base URL 是否多了或少了路径。这个 curl 测试能帮你快速定位是配置问题还是网络问题。测试通过后,回到 Continue 的对话面板再试一次,应该就能正常返回了。
最后验证模型切换。在 Continue 的对话面板顶部,有一个模型选择下拉框,点击后应该能看到 models 数组里定义的两个模型。切换到本地模型,问一个简单问题,看是否走本地推理;切换到 TaoToken 模型,再问一次,看是否走云端。如果切换后报错,检查对应模型的 provider、apiBase、apiKey 是否填对。这一步验证通过,说明你的 Continue 已经同时支持本地和云端两条通道了。
5. 本篇常见错误排查:401、local proxy failed、reading choices、OAuth
第一个常见错误是 401 Unauthorized。这个错误通常出现在 TaoToken 通道上,原因是 apiKey 填错、Key 被删除、或者 Key 前面多了空格。排查方法是打开 config.json,检查 apiKey 字段的值是否和 TaoToken 控制台里的一致。注意不要手动换行,也不要在 Key 前后加引号以外的字符。如果确认 Key 没问题,再检查 apiBase 是否填成了 https://taotoken.net/api ,不要填成其他路径。改完后保存文件,重启 Continue 再试。
第二个常见错误是 local proxy failed 或者 connection refused。这个错误通常出现在本地 ollama 通道上,原因是 ollama 服务没启动,或者 apiBase 填的端口不对。排查方法是打开终端执行 ollama list,如果报错说明 ollama 没装好或者没启动。Linux 下可以用 systemctl status ollama 查看服务状态,Windows 下检查托盘图标是否在运行。如果 ollama 正常运行,再检查 config.json 里的 apiBase 是否是 http://localhost:11434 ,如果你改过端口,这里要同步改。
第三个常见错误是 reading choices 相关的报错,比如 cannot read property 'choices' of undefined。这个错误通常是因为返回的 JSON 结构不符合预期,原因可能是 model 字段填了一个不存在的模型 ID,或者 provider 和 apiBase 不匹配。排查方法是先用 curl 测试一下,看返回的 JSON 里有没有 choices 字段。如果没有,说明请求本身失败了,看返回的错误信息。如果 curl 正常但 Continue 报错,检查 config.json 里对应模型的 provider 是否填对,TaoToken 通道用 openai,本地 ollama 用 ollama。
第四个常见错误是 OAuth 相关的报错,比如 OAuth token expired 或者 unauthorized client。这个错误通常出现在你之前用过其他插件的 OAuth 登录,残留的凭证和当前配置冲突。排查方法是检查 VSCode 的设置里是否有其他 AI 插件的残留配置,尤其是那些用 OAuth 登录的。你可以先在 VSCode 里禁用其他 AI 插件,只保留 Continue,然后重启 VSCode。如果问题依旧,检查 Continue 的设置里是否有 OAuth 相关的字段,删掉后重新配置。
除了这四个,还有一个容易忽略的问题是模型名大小写。ollama 的模型名是区分大小写的,deepseek-r1:7b 和 DeepSeek-R1:7b 可能被当成两个不同的模型。排查方法是执行 ollama list,把 NAME 那一列的值原样复制到 config.json 的 model 字段里。TaoToken 的模型 ID 同样要区分大小写,建议从模型对话页面直接复制。改完后保存,重启 Continue,再测试补全和对话。
如果以上都排查完还是不行,可以看一下 Continue 的输出日志。在 VSCode 里打开输出面板,选择 Continue 频道,里面会打印请求的详细信息和错误堆栈。根据日志里的 URL 和状态码,能更快定位问题。比如日志里显示请求的是 http://localhost:11434/api/chat,但返回 404,说明 ollama 的接口路径变了,需要升级 ollama 或者改配置。日志是排查问题最直接的依据,建议养成看日志的习惯。
6. 长期使用建议与 TaoToken 通道的接入文档入口
配置跑通之后,日常使用中有几个点可以优化。第一是补全模型的选择,如果你觉得本地 deepseek R1 的补全速度不够快,可以换成更小的模型,比如 deepseek-r1:1.5b,或者用专门的补全模型。第二是对话模型的选择,复杂重构和长上下文任务建议用 TaoToken 通道的云端模型,响应质量和上下文长度都更有保障。第三是定期检查 ollama 和 Continue 的版本,新版本通常会修复一些兼容性问题。
如果你打算把 Continue 用在团队协作或者长期项目里,建议把 config.json 纳入版本管理,但注意不要把 apiKey 明文提交。你可以用环境变量替换 apiKey 字段,Continue 支持从环境变量读取。具体做法是在 config.json 里写 "apiKey": "${TAOTOKEN_API_KEY}",然后在系统环境变量里设置 TAOTOKEN_API_KEY 的值。这样配置文件可以共享,Key 不会泄露。TaoToken 的 API Key 管理页面在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,你可以在这里定期轮换 Key。
接入文档是遇到问题时最应该先看的地方,入口是 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面会给出 Base URL、鉴权方式、请求格式、错误码的完整说明。如果你用的是 Claude Code 或者 Anthropic 协议的工具,可以参考 https://taotoken.net/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=ClaudeCodeAnthropic&utm_campaign=rewrite 。模型对话页面在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite ,你可以在这里快速测试模型是否可用。Coding Plan 的说明在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,适合需要长期编码和 Agent 任务的场景。
最后说一个实际经验:Continue 的 config.json 改动后,有时候不会立即生效,尤其是 tabAutocompleteModel 的改动。这时候可以执行 Continue: Reload 命令,或者直接重启 VSCode。如果补全还是不生效,检查一下 VSCode 的设置里是否禁用了 inline suggestion,有些主题或者插件会冲突。另外,ollama 的模型加载需要时间,第一次请求可能会慢几秒,之后会快很多。如果你用的是机械硬盘,建议把模型放在 SSD 上,加载速度会明显提升。
这套配置的核心思路是把本地推理和云端 API 分开管理,本地负责低延迟补全,云端负责高质量对话。你不需要一次性把所有模型都配好,先跑通一个本地模型和一个云端模型,确认补全和对话都能用,再按需增加。配置过程中遇到报错,优先看 Continue 的输出日志和 TaoToken 的接入文档,大部分问题都能在里面找到答案。