codecamp

Ollama VS Code

VS Code 内置了 Chat 面板,装个 Ollama 扩展就能在里面选本地模型。这是「编辑器内用自己模型」最省事的一条路——不需要像 Cline 那样另外装代理插件。

版本基线 v0.40.12,官方 docs.ollama.com/integrations/vscode。

一、硬性要求

项 要求
VS Code 1.127 或更新
Ollama 已安装并运行
模型 至少有一个本地或云端模型可用

为什么卡 1.127:更早的版本不能可靠取消来自语言模型提供者的请求。表现是中断对话后请求仍在跑,白烧算力。

另外建议 Ollama 0.17.6 以上,云端模型登录和模型元数据更完整。旧版对本地模型还能用。

二、装扩展并选模型

  1. 从 VS Code Marketplace 安装 Ollama 扩展
  2. 打开 VS Code 的 Chat
  3. 点聊天输入框底部的模型选择器
  4. 在 Ollama 分组里选一个模型

扩展默认从 http://127.0.0.1:11434 发现模型,本地部署不用改配置。

三、添加模型

本地模型:

ollama pull qwen3.6

云端模型(需要登录):

ollama pull kimi-k2.6:cloud
ollama signin

本地模型不需要登录,云端模型必须 signin 才会出现。

四、上下文长度:最容易卡住的地方

这里有个容易误判的现象:VS Code 显示的是模型支持的最大上下文,但 Ollama 运行时可能只分配了更小的值。

结果就是 VS Code 以为有 128k,实际 Ollama 只给 4k,一聊长就出问题。

处理方法(本地模型):

  1. 打开 Ollama Settings,把上下文长度调到至少 64k
  2. 重载 VS Code 窗口(命令面板 → Developer: Reload Window)
  3. 重发提示词

详细机制见 6.1 Ollama 上下文长度。

五、排查:模型不出现

按顺序走:

  1. 确认 Ollama 在运行
  2. ollama list 确认有模型
  3. 命令面板执行 Ollama: Refresh Models
  4. 命令面板执行 Ollama: Diagnose Models,看 Ollama 输出通道

云端模型提示要登录,执行 ollama signin。

六、和其他编辑器集成的区别

集成 形态 上下文门槛 适合
VS Code 原生 + Ollama 扩展 Chat 面板直接选模型 ≥ 64k 只想在 Chat 里用本地模型
Cline 独立代理插件 ≥ 32k 要自主改文件、跑命令
Roo Code 独立代理插件 ≥ 32k Cline 的替代品,配置项更多
JetBrains 内置 AI 助手接本地 视模型 IDEA / PyCharm 用户
Zed 编辑器内置 视模型 追求轻量编辑器

简单说:只想对话用 VS Code 扩展;想让 AI 自己改代码用 Cline / Roo Code。

常见问题

现象 原因 处理
模型选择器没有 Ollama 分组 扩展未装或未启用 装扩展并重启 VS Code
请求无法中断 VS Code 版本太旧 升到 1.127+
长对话被截断 运行时上下文小于显示值 Ollama Settings 调到 64k+ 后重载窗口
云端模型不显示 未登录 ollama signin
扩展装了但不生效 Ollama 服务没跑 启动 Ollama

动手试

## ① 确认 VS Code 版本够
code --version

## ② 确认 Ollama 和模型
ollama list
curl http://127.0.0.1:11434/api/version

然后在 VS Code 里装扩展、打开 Chat、选模型——如果选不到,先跑一次 Ollama: Refresh Models。

Ollama Pool
Ollama Cline
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Ollama Cloud

Ollama CLI 命令行参考

Ollama Modelfile 参考

Ollama 上下文长度

Ollama 导入自定义模型

Ollama 常见问题

Ollama 硬件支持

Ollama 故障排查

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }