vsc内使用continue+DSV3 等替代copilot,附带很完整的config.json
建议参考知乎文章,因为这里不一定是最新的。
vsc好像是在1.96版本引入了内置的copilot,但是它并不适合我们中国人在大陆内使用。然后,刚好在最近,量化幻方的dsv3出来了,性能不错,我反正觉得是达到了GPT4o的水平,更重要的是它便宜。所以我想使用deepseek V3 chatbot (dsv3)来替代它。经过一大堆踩坑,目前算是比较舒服的走通了,所以写一下文章记录下。
经过本文配置后,你将得到一个类似于copilot赋能的VSC,它的方法完全基于开源以及国产的dsv3搭建,在响应速度,流畅性,性能和准确率上达到了不错的水平,而且总体下来很便宜。
如果你只是想找到continue的参考配置,那么直接跳转到文末。我提供了一个带有注释和参考意见的json配置单,你可以直接使用,并避免踩坑。这个配置也是我踩坑好几天才弄出来的。
此外,如果你使用ollama运行本地LLM,那么你可能需要参考ollama那个章节,关于环境变量设置的配置,那一部分非常重要,决定了推理性能以及显存占用。
简单介绍
受限于我国的互联网环境特性,我们无法直接流畅使用OpenAI或GitHub提供的AI工具(如Copilot)来赋能IDE。但这并不意味着我们无法享受AI带来的开发效率提升。我们可以通过找点插件,自己搞一搞,一样能获得不错的AI集成的开发环境,使AI走深向实。
目前主流的方案是:基于vsc+continue来实现替代copilot功能的方案,不仅用起来是完全够用了,而且如果你使用deepseek v3之类的国产模型,不仅价格还便宜,而且性能也和GPT4o几乎差不多了,写点CRUD代码,帮你节省敲键盘的时间是完全足够了。在美帝国需要花20USD一个月的事情,在冲国只需要一个月20CNY,第一次发现 2000CNY>3000USD 竟然可以成立。
本文介绍的方法基于:
- vscode(作为IDE)
- continue插件(作为copilot替代品)
- deep seek V3 chat(替代GPT等模型,用于对话,代码问答,代码改写等)
- qwen Coder (用于代码ai自动补全,因为可以本地运行)
- ollama(可选的,用于本地部署qwen模型,当然也可以用在线模型)
Visual Studio Code 是微软开发的免费代码编辑器,支持多种编程语言,功能强大且扩展性强。更重要的是它极强的插件市场,以及流畅的性能,几乎可以横扫任何编程语言。这玩意太出名了以至于我觉得可以不介绍。
VSCode 的 Continue 插件是一款基于人工智能的代码辅助工具,旨在提升开发者的编程效率。它通过集成多种大语言模型(LLM),提供智能代码补全、代码生成、代码优化等功能,帮助开发者更高效地编写、调试和维护代码。我个人用下来感觉完全就是copilot的替代品。
deep seek V3 chat 是量化幻方搞出来的一个很便宜的,性能对标GPT4o的模型(但是目前并不是多模态的,只支持文本,不支持图片识别等)。这东西比较离谱的是目前网页端完全免费,api价格非常便宜,性能还挺好,而且是中国的公司,服务器就在本地,用起来非常流畅。
qwen coder是阿里云通义千问团队推出的一款专注于代码生成和理解的开源大型语言模型(LLM),属于Qwen 2.5 系列的一部分。它旨在通过自然语言描述生成高质量代码,支持多种编程语言,并具备代码补全、修复、优化等功能。它有一些低参数量版本,虽然不适合对话,但是用来代码补全刚刚好。令人惊讶的是,使用大于10B参数量的模型用于自动补全并不会获得更好的性能,所以我推荐使用一个跑在本地的ai用来自动补全,因为这个功能虽然不需要多牛逼的模型,但是它很浪费token,用在线模型很不划算(参考)。
Ollama是一个开源的本地大型语言模型(LLM)管理和运行框架,旨在简化大语言模型在本地环境中的部署、管理和使用。它支持多种流行的开源模型(如 Llama、Mistral、Qwen 等),并提供了命令行工具、API 接口以及与其他开发工具的集成能力,使用户能够轻松地在本地运行和实验大语言模型。ollama在本文中的唯一作用是部署qwen,但是你也可以顺便用它玩玩其他的大模型。这东西就是大模型界的pip或者apt。
名词解释完了就开始。
1. 安装 Visual Studio Code (vsc)
默认已经安装好了,并且在vsc内弄好了合适的开发环境,能用来写代码,编译调试。
2. 安装continue插件
在vsc的插件市场安装该插件。

安装好之后,就可以右键vsc顶部的copilot图标,把他隐藏了,我们后面不需要它。
此时,你应该会发现comtinue提示你进行初步配置。为了连贯性,你可以先忽略这个,依照本文的配置方法配置即可。
continue插件主要有四种模式:
1. Ctrl+L 对话模式
通过快捷键Ctrl+L,开发者可以与 AI 进行自然语言对话。这种模式适合需要详细讨论或解释的场景,例如:
代码解释:选中一段代码后,AI 可以解释其功能、逻辑或潜在问题。
问题解答:开发者可以提出编程相关问题,AI 会提供详细的回答或建议。
上下文记忆:AI 能够记住之前的对话内容,确保回答的连贯性。
2. Ctrl+I 编辑模式
通过快捷键Ctrl+I,开发者可以通过自然语言描述对代码进行修改或生成。这种模式适合快速生成或调整代码的场景,例如:
代码生成:输入自然语言描述(如“生成一个 Python 函数来计算斐波那契数列”),AI 会生成相应的代码。
代码优化:选中一段代码后,AI 可以提供优化建议或直接生成优化后的代码。
代码重构:开发者可以要求 AI 将代码重构为更高效或更易读的形式。
3. Tab 自动补全模式
在编写代码时,按下Tab键即可触发自动补全功能。AI 会根据代码上下文生成补全建议,适合高频使用的场景,例如:
代码片段补全:自动补全函数、变量名或代码块。
注释生成代码:根据注释内容生成相应的代码实现。
错误修复:检测代码中的语法或逻辑错误,并提供修复建议。
4. 动作模式(Action Mode)
动作模式允许开发者通过预定义的动作(Actions)执行特定任务。这些动作可以通过命令或快捷键触发,适合自动化重复性任务的场景,例如:
代码格式化:自动格式化选中的代码。
注释生成:为代码生成注释或文档。
测试生成:自动生成单元测试代码。
自定义动作:开发者可以创建自己的自动化任务,例如批量处理代码或生成 API 文档。
了解这些大概就知道怎么用了。你可以随便找个代码,选中一下,就会发现有两个快捷键的灰色字符提示。你可以鼠标悬浮在上面,会弹出一个提示框,你可以根据提示将这个消息隐藏(刚开始可以不隐藏,用惯了就能隐藏了)。
另外,continue有一大堆快捷键,不过我用下来感觉就是tab自动补全,以及ctrl+L,ctrl+I这三个。所以其实你只要设置下,保证ctrl+L,ctrl+I不要有冲突即可。
3. 获得deepseek api
首先去官网:
DeepSeek Platformplatform.deepseek.com
注册个账号。然后就会送你10元额度,你后面需要自己充值,这个价格挺低的,感觉用起来其实和不花钱一样。作为中国的企业,大陆手机认证注册,充值的实名认证肯定是必不可少的,同时,你可以直接用蓝绿支付去交钱,很方便。
你如果没体验过dsv3,可以先用网页版玩玩:
通过此处,你可以创建一个你自己的key,用于认证接入dsv3的api到你的vsc里面。

dsv3是开源的,你当然可以自己本地部署一个,而不像用GPT那样必须只能使用api访问(openai可没开源)。但是,dsv3需要8个H200显卡,总共8*141GB的显存才能推理的动,所以作为普通小老百姓,我还是建议你用api。
好的,api的key先放一边,我们先把ollama装了,后面通过config配置文件直接把qwen和dsv3都接入到continue。
4. 安装ollama和qwen
前文说过了:tab自动补全很浪费token,用dsv3可能一天得平均一块钱,但是并没有获得你期望的效果。所以:
- 如果你是土豪,那么直接用dsv3做自动补全即可,没必要本地跑个自动补全模型,无非一天多花几毛钱罢了。
- 如果你的电脑性能很烂,只能用api,那也没必要继续看了。(什么算性能烂呢?显存不到8G,或内存不到32G,就算性能烂。注意,可以没显卡,cpu推理的速度虽然显著慢于显卡,但是它两其实都挺快的,可以接受。但是cpu推理和显卡推理,需要占用的内存/显存是差不多的。另外,ollama经过高度优化,可以自动将模型分散部署在 多个显卡,或者gpu/cpu混合使用,你可以通过
ollama ps查看当前运行的模型有多少部分在哪些部分运行的。比方说你现在要运行一个模型,要用大概 20G 的内存,那么ollama会自动将你的 8G 显存吃满,然后将剩下的 12G 扔到内存里面,同时用 GPU 和 CPU 进行推理。) - 如果你不想让大量购买的token浪费到tab自动补全上面,同时你拥有一个强劲的显卡或者比较大的内存,那么就这么本地部署,是最好的,毕竟写代码的时候也不能让显卡闲下来,我花了钱,就得用!(tab补全功能会非常频繁的调用api,会消耗大量token,然而小模型就能获得不错的性能,没必要折腾dsv3)
- 如果你不想用自动补全?那直接把它关了就好。下文直接完全不用看了,直接跳到最后的continue配置文件即可。
ollama需要先下载:
安装后先别急着启动,因为这玩意默认会把大模型往你c盘安装。你需要配置几个环境变量(没错,这玩意在windows下是通过环境变量来设置它的参数的!)注意,请勿照着截图的更改,应该照着底下给出的代码框内的设置去更改,因为我后来才发现设置需要调整,但是截图懒得换了。


添加这么几条(注意,参考这里,而非上面的截图):
OLLAMA_HOST
127.0.0.1:11434 # 监听的地址,如果不对外提供服务,那么这个就是默认值
OLLAMA_KEEP_ALIVE
-1 # 单位是秒,代表启动任何模型后,默认多久没动静就自动关闭了。-1就是永远后台运行
OLLAMA_MODELS
X:\LLM\ollama_models # 设置模型的存储路径,这玩意默认是C盘,所以其他都可以不改,这个最好还是改一下
OLLAMA_NUM_PARALLEL
1 # 并行数目,默认是4.
# 注意,实际模型拉起后的context size(上下文长度)为你设置的上下文长度乘上并行数目。
# 过大的并行数会导致过大的显存开销,非常划不来,除非你是企业,想给几千人同时提供访问,那么这个东西一般开个1或者2就够了。
# 个人用的话,其实队列等待下是可以忍受的,你应该很难同时使用超过两个并行的请求了。如果想开更大的ctx size,这个建议设置为1
OLLAMA_FLASH_ATTENTION
1 # 开启flash attention 加速。 flash attention 通过优化计算流程,减少数据到显存的搬运从而大概能提升2~4倍效率
OLLAMA_TMPDIR
X:\LLM\ollama_models\temp # 不知道什么缓存用的临时文件路径,为了避免给我C盘拉屎,这个最好改了
注意,OLLAMA_NUM_PARALLEL 这个参数可以设置并行处理的数目,默认是4。不过要注意的是,实际模型运行时的上下文长度(context size)会是你设置的上下文长度乘以并行数目。如果并行数设置得太大,会占用非常多的显存,这样很不划算。除非你是企业用户,需要同时为几千人提供服务,否则一般设置为1或2就够了。对于个人用户来说,稍微等待一下队列是可以接受的,毕竟你不太可能同时发出超过两个并行的请求。如果你想要更大的上下文长度,建议把这个参数设置为1。
现在,再启动ollama。启动后,这玩意应该会在系统托盘看见一个草泥马图标。

注意,每次更改设置后,必须重启ollama(右键这个图标,退出它)
ollama怎么用呢?你现在打开一个PowerShell(如果你不知道怎么打开PowerShell,参考这里)
然后执行
ollama
应该就能看见提示了
比较常用的:
# 查看 Ollama 的版本信息
ollama -v
# 运行指定的模型(例如 qwen2.5-coder:3b),启动模型并进入交互模式
ollama run qwen2.5-coder:3b
# 交互模式下通过 ctrl+d退出,退出后模型并不会退出,而是继续跑在后台,可以通过api调用,例如通过vsc或者本地部署的webUI之类的
# 列出本地已下载和安装的所有模型
ollama list
# 停止正在运行的指定模型(例如 qwen2.5-coder:3b)
ollama stop qwen2.5-coder:3b
# 查看当前正在运行的模型及其状态
ollama ps
# 删除本地已安装的指定模型(例如 name:model)
ollama rm name:model
安装理论上是全自动的,只需要直接运行
ollama run qwen2.5-coder:7b
就会自动帮你下载,还贴心的选择了国内的镜像,所以不必担心网速问题。后面再用就不用下载了,它是自动检测是否存在的。
此处,qwen2.5-coder:7b 应该会默认拉取最新版的base版本的千问coder模型,最适合进行编程使用。根据我的实测(2025年1月20日),这会拉取Qint4km量化的版本。大概5.7G大小,推理时会占用6.5GB的显存,非常适合8G显卡运行(需要预留一定显存空间,以防你摸个鱼啊什么的炸显存了。该测试基于12288的上下文长度设置)
ollama启动模型很快,这东西专门做了优化。
注意:我的显卡是4060@8G显存,基于我后文的配置,实际用下来大概占用6~7G显存。如果你也是8G显存,可以直接抄作业。推荐使用qwen1.5B,3B或者7B模型。对于8G显存的显卡,7B-Qint4量化版本和3B-BF16量化版本消耗差不多,但是我不太清楚怎么让ollama运行模型到Qint4,所以我就用的3B模型。谁知道的话麻烦评论区告诉我
启动后,直接关闭PowerShell,这东西运行在后台就行了。你可以随时启动一个PowerShell,然后用ollama ps查看当前的情况。
注意:ollama默认开机启动,但是只会启动基本的服务(Linux 底下管这叫守护进程),不会启动任何大模型。如果你不想让它自动开机启动,那么你需要在启动 VS code 之前,在 PowerShell里面运行一下ollama ps,让ollama服务启动。
然后没有必要启动任何模型。vsc启动后,continue插件会自己尝试访问配置好的api,如果你配置访问的是本地的模型, 那么ollama会自己拉起模型。这个过程是全自动的,没必要手工启动。
每次运行之后,你需要看一下当前模型是否完全放在显卡里面跑。如果模型被使用 CPU 跑起来了,那么大概率是你参数调的太大了。反正根据个人情况去设置即可,我是强迫症,我想让模型完全跑在显卡里面。你可以通过任务管理器,或者ollama ps查看使用情况。
5. 配置continue
此时,你应该已经有了dsv3的api,以及后台运行的ollama启动的qwen coder。现在万事俱备,只欠配置continue了。
你需要首先打开continue的主面板。插件默认应该在窗口的左侧,使用主侧栏的导航按钮找到它点进去就能看到了。continue的图标是:

你可以将它拖到整个 VSC 的右边辅助侧栏,然后设置一个打开右边的快捷键,就可以很方便的平时去使用了。这玩意默认是ctrl+alt+B太反人类了,我建议设置成ctrl+tab之类的。 你可以通过这里打开辅助侧栏:

之后,点击小齿轮图标,应该会打开配置文件,你可以参考我的配置文件,直接覆盖进去。

// config.json
{
// 全局配置。任何额外的单独配置项可以覆盖全局配置。
"completionOptions": {
"stream": true, // 是否流式输出
"temperature": 0.15, // Transformer的softmax温度参数,越大则模型输出的越具备创意性或者胡言乱语。对于生成高质量的code生成,可以设置为0.3或者更低,以期待更稳定的输出。
"topP": 0.9, // 取预测token累积概率到这里的所有token进行采样。https://blog.csdn.net/u012856866/article/details/140308083
"topK": 50, // 取预测token的概率排序前这么多个进行采样。 topP和topK是"与"的关系。
"presencePenalty": 0.0, // 惩罚模型生成已经出现过的 token,减少重复内容。它通过降低已生成 token 的概率来实现。
"frequencyPenalty": 0.0, // 惩罚频繁出现的 token,减少高频 token 的生成概率,从而增加多样性。
"mirostat": 0, // 一般不管. 如果启用Mirostat采样,控制文本生成过程中的困惑度(默认值:0,0=禁用,1=Mirostat,2=Mirostat2.0)。仅适用于Ollama、LM Studio和llama.cpp提供商
"stop": [], // 一般不管. 用户自定义的停止token
"maxTokens": 8192, // [输出]的最大长度, 8192算很大了, 一般开个1024或者512比较合理
"numThreads": 4, // 一般不用设置. 线程数
"keepAlive": -1, // 保活时间,单位秒, -1就是启动一次永远不退出. 如果模型是本地的, 比如ollama启动的, 那么这么设置可以避免摸鱼去了结果ai自己关了. 如果模型是远程的,比如OpenAI的GPT-4,那么好像没啥用.
"useMmap": false // 这个参数建议参考ollama的说明, 我没看懂是干啥的
},
// "tabAutocompleteModel": {
// "title": "deepseek V3 coder",
// "model": "deepseek-coder",
// "provider": "deepseek",
// "apiKey": "sk-你的 api key"
// "maxTokens": 1024
// },
// tab自动完成 - 模型设置
"tabAutocompleteModel": {
"title": "Qwen 2.5 7b coder", // 模型的标题或名称
"model": "qwen2.5-coder:7b", // 使用的模型标识符, 必须和模型名称完全一样. 如果是ollama部署的本地模型, 可以通过 `ollama list` 查看
"provider": "ollama", // 模型提供者
"apiBase": "http://127.0.0.1:11434/", // API 的基础 URL. 设置本地可以不用指定, 直接默认. 设置远程的话一般需要配置key, 无需配置地址, 因为地址已经默认有了
"maxTokens": 2048, // 最大输出长度(以 token 为单位)
"contextLength": 6144 // 上下文长度
},
// tab自动完成 - 参数
"tabAutocompleteOptions": {
"disable": false, // 是否禁用
"useFileSuffix": true, // 是否增加扩展名于提示词中?
"maxPromptTokens": 4096, // 最大允许的提示词token数目
"debounceDelay": 500, // 等待多少毫秒后发起请求
"maxSuffixPercentage": 0.4, // 光标之前的内容占比多少输入进模型?
"prefixPercentage": 0.6, // 光标之后的内容占比多少输入进模型?
"template": "{{{ prefix }}}\n\n{{{ suffix }}}\n\n{{{ filename }}}\n\n{{{ reponame }}}\n\n{{{ language }}}", // 提示词模板
"multilineCompletions": "auto", // 多行补全模式: never永远仅单行, always总是多行, auto让模型自己判断
"useCache": true, // 是否启用缓存
"onlyMyCode": false, // 是否仅从自己的代码生成, 而不使用任何其他代码
"disableInFiles": [] // 忽略特定后缀的文件, 比如你不喜欢在tex或者md文件内被自动完成了
},
"models": [
{
"title": "deepseek V3 chat",
"provider": "deepseek",
"model": "deepseek-chat",
"contextLength": 65536,
"apiKey": "sk-你的 api key"
},
{
"title": "deepseek V3 coder",
"provider": "deepseek",
"model": "deepseek-coder",
"contextLength": 65536,
"apiKey": "sk-你的 api key"
},
{
"title": "Qwen 2.5 7b coder",
"model": "qwen2.5-coder:7b",
"provider": "ollama",
"contextLength": 6144,
"apiBase": "http://127.0.0.1:11434/",
"completionOptions": {
"maxTokens": 2048 // 单独指定最大输出,覆盖全局配置,否则会导致显存溢出
}
}
],
// @codebase 和 @docs 用的 // 目前我也不太会用,额
// "embeddingsProvider": {
// "provider": "ollama",
// "model": "qwen2.5-coder:7b",
// "apiBase": "http://127.0.0.1:11434/",
// "maxChunkSize": 256,
// "maxBatchSize": 5
// },
// 内部指令,配置参考:https://docs.continue.dev/reference
"contextProviders": [
{
"name": "code",
"params": {}
},
{
"name": "docs",
"params": {}
},
{
"name": "diff",
"params": {}
},
{
"name": "terminal",
"params": {}
},
{
"name": "problems",
"params": {}
},
{
"name": "folder",
"params": {}
},
{
"name": "codebase",
"params": {
"nRetrieve": 25,
"nFinal": 5,
"useReranking": true
}
},
{
"name": "os",
"params": {}
}
],
// 内部的斜杠指令,他们通过内置的代码实现更复杂的功能
"slashCommands": [
{
"name": "share",
"description": "将当前聊天会话导出到markdown"
},
{
"name": "cmd",
"description": "生成shell命令"
},
{
"name": "commit",
"description": "生成git提交消息"
},
{
"name": "edit",
"description": "编辑突出显示的代码"
}
],
// 用户自定义指令,可以理解为提示词自定义模型。我的理解是可以方便的使用斜杠指令作为提示词机器人来应用。使用过 POE 平台的人应该比较清楚.
"customCommands": [
{
"name": "test",
"prompt": "Write a comprehensive set of unit tests for the selected code. It should setup, run tests that check for correctness including important edge cases, and teardown. Ensure that the tests are complete and sophisticated. Give the tests just as chat output, don't edit any file. 所有注释应该尽量使用中文\n\n{{{ input }}}",
"description": "为突出显示的代码编写单元测试"
},
{
"name": "comment",
"prompt": "Generate detailed comments for the selected code. The comments should include the purpose of the function or method, parameter descriptions, return value descriptions, and any important implementation details. Ensure that the comments are clear, concise, and easy to understand. 所有注释应该尽量使用中文\n\n{{{ input }}}",
"description": "为选中的代码自动生成注释"
},
{
"name": "less_say",
"description": "让模型尽量少说一些解释性的东西",
"prompt": "{{{ input }}}\n\n请直接简略的给出结果。只需要给出需要更改的那部分代码的内容,而无需重写整个段落的代码。仅需给关键步骤标记简洁精炼的中文注释,并且无需解释代码。切记,请勿对代码进行大段解释。"
}
]
}
注意一些参数你需要大概改一下。里面的注释我是参考的这里写的:
config.json Reference | Continuedocs.continue.dev/reference
上面的参数需要注意:
- dsv3官网说,api具备64k的上下文长度(ctx size),所以你不应该超过这个设置。至于到底是64000还是65536,其实我也不太清楚。
- dsv3还说了,输出最大8k,所以也不应该超过。
- qwen2.5-coder:7b 模型在拉取的时候,默认ollama会下载那个Qint4_k_m 量化版本的,该模型大概占用5.7GB磁盘空间,同时在上面的设置(ctx size = 12288,OLLAMA_NUM_PARALLEL 设置为 1)下,推理时大概占用6.5GB的显存,适合8G显存使用。你可以自己把ctx size调大一些,如果你的显卡具备更大的显存的话。但是作为代码补全ai来说,其实当前配置肯定是完全足够了。具体的显存消耗可以参考这里,当然这个和实际的占用不一定完全匹配。
- 我目前对大模型不太清楚,但是我的直觉告诉我,同样推理显存消耗下,7B-Qint4量化模型的性能应该好于3B-BF16.
vsc内,配置的时候,如果鼠标悬停在键名称上面,会浮动出提示注释,那么证明你这条配置是有效的。如果没有任何提示,证明你可能把配置放错地方了,一般是嵌套的层数错了,建议好好检查检查。
底下的那些prompt也是我到处找着抄出来的,你可以自己改。有几个prompt在写文档的时候很有用。
保存之后立刻生效,如果你正确配置了api key,并且ollama守护进程在后台挂着,那么应该什么都已经好了。
这里,比较重要的几个参数,是那几个上下文长度以及最大token设置。这个得根据自己电脑性能,使用情况慢慢调。我个人的建议是把api的性能拉满,本地的coder令显卡刚好吃满即可。
注意,配置文件中有几个地方你一定要改:
- 使用的模型型号名称,必须完全对应到你调用的api或者ollama本地模型
- api的key
其他参数可以任意调,或者直接抄作业。另外,不一定非得是dsv3或者qwen,你可以用其他的模型,比如GPT,Claude之类的。
continue的一个bug
这个插件似乎存在一个bug,就是,当你使用ctrl+L选中一部分代码,然后唤起一个对话之后,如果直接使用微软拼音输入中文,那么会非常不正常。
解决方法也很简单,选中代码进入对话之后,先敲一个空格,再输入中文就好了。
<EOL>
