最近我把自己一直在用的一个想法落地成了 VSCode 插件:Dspilot(扩展 ID XiaoHanys.deepseek-autocomplete)。它能用 DeepSeek 或任意 OpenAI 兼容模型,在编辑器里提供 AI 内联代码补全——请求直接发往你自己配置的服务端点,不需要订阅 GitHub Copilot。
为什么做这个插件
Copilot 们的补全体验确实好,但有两个绕不开的问题:订阅费和代码去向。而 DeepSeek 的 API 价格便宜、代码能力有口皆碑,本地跑一个 Qwen Coder 之类的补全模型也完全可行。于是我写了这个插件:模型、端点、密钥全部由自己掌控,API 请求直连你配置的地址,中间不经过任何第三方服务器。
功能一览
- 内联补全(FIM):根据光标前后的代码、项目中相似文件与最近编辑构造上下文,以幽灵文本(ghost text)形式给出建议,支持单行和多行补全。
- 少花冤枉钱:请求防抖、过期请求自动取消、本地缓存命中直接复用,重复输入或已经打出来的建议不会浪费一次 API 调用。
- Next-edit 建议(可选):预测你的下一处修改,需要 VS Code 的
inlineCompletionsAdditions提议 API。 - 用量统计:鼠标悬停右下角状态栏图标,即可查看本次会话的请求数、缓存命中数、防抖省下的请求数和 token 用量。
- 默认安全:
.env、私钥、证书等敏感文件永远不参与补全。
快速开始
安装插件后,打开设置搜索 @ext:XiaoHanys.deepseek-autocomplete,或点击 VSCode 右下角的状态栏图标,填好三项配置即可开工:
1 | { |
然后在任意文件里正常打字,建议会以灰色幽灵文本出现,按 Tab 采纳。
留空 model 时插件不会发送任何请求;本地匿名服务(如 Ollama)把 apiKey 留空即可。
不止 DeepSeek:任意 OpenAI 兼容服务
只要服务兼容 OpenAI 接口,都可以接入:OpenAI、Ollama(http://localhost:11434/v1)、vLLM、LM Studio、OpenRouter 等等。两类模型的接法稍有区别:
- 原生代码补全模型(如 Qwen Coder base 模型):把
apiType设为completions,并选择匹配的fimTemplate。 - 对话模型:把
apiType设为chat-completions。
baseUrl 只需要写到版本前缀(如 /v1),插件会自动补上 /completions 或 /chat/completions。
配置项一览
所有设置以 deepseekAutocomplete.completion. 为前缀,改完即时生效,无需重启 VS Code。
| 配置项 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
baseUrl |
https://api.openai.com/v1 |
OpenAI 兼容 API 基础地址 |
apiKey |
空 | API 密钥(明文存于用户设置,切勿提交到仓库) |
model |
空 | 模型 ID |
apiType |
completions |
completions 或 chat-completions |
fimTemplate |
suffix-param |
FIM prompt 格式:suffix-param / fim / codegemma / qwen2.5-coder |
maxTokens |
256 |
单次请求最大输出 token |
candidateCount |
1 |
循环切换建议时的候选数量 |
temperature |
0 |
采样温度 |
timeoutMs |
10000 |
请求超时时间(毫秒) |
debounceMs |
150 |
停止输入后的防抖等待时间,0 为关闭 |
extraHeaders |
{} |
额外 HTTP 头,${APIKEY} 会被替换为密钥 |
extraBody |
{} |
合并进请求体的额外字段 |
disabledGlobs |
[] |
关闭补全的文件匹配规则 |
enabledLanguages |
{"*": true} |
按语言开关,例如 {"markdown": false} |
respectSelectedCompletionInfo |
true |
参考当前选中的 IntelliSense 项 |
nes.enabled |
false |
启用 next-edit 建议 |
nes.model |
空 | next-edit 专用模型,留空沿用 model |
nes.maxTokens |
4096 |
next-edit 最大输出 token |
nes.cursorPrediction |
false |
预测下一步光标位置 |
nes.eagerness |
auto |
主动程度:auto / low / medium / high |
nes.strategy |
copilotNesXtab |
next-edit prompt 格式 |
连接类配置(baseUrl、apiKey、timeoutMs、extraHeaders、extraBody)仅限用户级,工作区无法把携带你密钥的请求重定向到其他地址;apiKey 和 extraHeaders 也被排除在 Settings Sync 之外。
状态栏与用量统计
右下角图标会实时反映插件状态:就绪、已禁用、配置有误、生成中。悬停即可看到当前会话统计。token 用量仅在 API 返回 usage 时显示——流式响应默认不带这个字段,如果你的服务端支持 stream_options,可以通过 extraBody 加上。
开发与构建
源码构建(VSIX) 仓库使用 TypeScript 开发,本地构建 VSIX 只需两条命令。
1 | npm install |
运行环境要求 VS Code 1.115.0 及以上;常规补全只用稳定 API,next-edit 建议需要 inlineCompletionsAdditions 提议 API,不可用时会自动跳过。
最后
插件还在早期阶段,功能与配置项会持续打磨。如果你也想在不依赖 Copilot 的情况下用上 AI 补全,或者手上正好有 DeepSeek / 本地模型的 API,欢迎装上试试。遇到问题或有想法,直接在 GitHub 开 Issue 即可。
又是把「自己想要的功能」造出来的一次小实践——AI 时代写工具的成本,比想象中低得多。