ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

本地vLLM部署Qwen3.6后,Continue在VS Code里401报错怎么排查

本地vLLM部署Qwen3.6后,Continue在VS Code里401报错怎么排查 1. 本地 vLLM 部署 Qwen3.6 后 Continue 报 401 的真实场景你在本地用 vLLM 把 Qwen3.6 跑起来curl测试/v1/models和/v1/completions都正常返回心里正美滋滋结果切到 VS Code 的 Continue 插件里一发消息就弹红字401 Unauthorized。这个场景我太熟了本地服务明明没设鉴权为什么插件还喊没授权先把结论摆出来本地 vLLM 默认不校验 API Key但 Continue 走的是 OpenAI 兼容协议它会在请求头里塞一个Authorization: Bearer apiKey。如果这个字段是空的、写成了占位符没替换、或者插件读到的配置压根不是你以为的那份服务端或中间层就会回 401。更隐蔽的一种情况是你本地端口被别的进程占了Continue 实际打到了另一个需要鉴权的服务上报错却长得一模一样。这篇面向的是已经在本地把 Qwen3.6 跑起来、但卡在 VS Code Continue 接入这一步的开发者。核心检索词就是「本地 vLLM 部署 Qwen3.6 Continue 401 排查」我会把 vLLM 启动参数、Continue 的config.yaml可复制配置、curl 验证 endpoint 与 API Key 的步骤全部给全最后再讲怎么把 Base URL 切到 TaoToken 统一 Key 通道做对照测试——这一步能帮你快速判断到底是本地服务的问题还是插件配置的问题。401 这个错误码本身信息量很少它只说「你没通过鉴权」但不说「哪一层没通过」。所以排查思路必须是分层验证先确认 vLLM 服务本身活着且模型名对再确认 curl 带 Key 能通最后才看 Continue 的配置。很多人一上来就改插件配置改了半天发现是模型名写错了白折腾。我试过最坑的一次是vLLM 启动时--served-model-name写的是Qwen3.6Continue 里model字段填的是Qwen3.6-27B结果请求发过去 vLLM 直接 404但 Continue 的 UI 把它显示成了鉴权失败。所以别信 UI 的报错文案一切以 curl 的原始返回为准。下面按顺序拆先讲 vLLM 怎么起、模型名怎么定再讲 Continue 配置怎么写然后 curl 验证最后排错和对照测试。每一步都给可复制的命令和配置你跟着敲就行。2. TaoToken 前置准备统一 Key 通道与本地服务对照在正式排查之前先花几分钟把 TaoToken 这条对照通道准备好。为什么要在本地部署的排查里引入一个云端通道因为 401 的根因往往在「配置」而不在「服务」你需要一个已知能工作的参照物。当本地 curl 通、Continue 不通时把 Base URL 临时切到 TaoToken如果立刻能通说明问题 100% 在本地配置或插件读取路径上如果切过去也 401那大概率是 Key 本身或网络层的问题。TaoToken 的定位是统一的大模型 API 通道一个 Key 可以调多家模型走的是标准 OpenAI 兼容协议。对 Continue 来说它只认apiBase、apiKey、model这三个字段所以把本地 vLLM 换成 TaoToken配置结构完全不用动只改值就行。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 注意 API 地址后面不加任何 UTM 参数直接拼/v1就是兼容端点。你需要准备的东西很少一个 TaoToken 账号、一个 API Key、以及想对照测试的模型 ID。Key 在控制台的 API Keys 页面生成地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。生成后复制出来形如sk-开头的一串字符先存到本地环境变量里别直接写死在配置文件里提交到 Git。这里有个细节要注意TaoToken 的 Base URL 是https://taotoken.net/api/v1而本地 vLLM 是http://localhost:8818/v1。两者路径结构一致都是{base}/v1所以 Continue 配置里apiBase字段直接替换即可。模型 ID 方面TaoToken 上不同模型的 ID 不一样你可以在模型对话页面先试跑一下确认地址是 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 选一个你熟悉的模型比如 Claude 系列或 GPT 系列记下它的准确 ID。把 Key 写进环境变量的命令Linux/macOSexport TAOTOKEN_API_KEYsk-你的真实Key echo $TAOTOKEN_API_KEY | head -c 8Windows PowerShell$env:TAOTOKEN_API_KEYsk-你的真实Key $env:TAOTOKEN_API_KEY.Substring(0,8)验证环境变量生效后先别急着配 Continue直接用 curl 打一发 TaoToken确认 Key 本身没问题curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 回复ok两个字}], max_tokens: 20 }如果这条返回了正常的 JSON 且choices里有内容说明 Key 和网络都通。这一步是整个对照测试的基线基线不通后面所有排查都是空中楼阁。如果这里就 401那问题在 Key 本身去控制台重新生成一个再试。准备好这条通道后你就有了一个「已知能工作」的参照。接下来所有本地配置的排查都可以通过「切到 TaoToken 是否恢复」来快速二分定位。这个思路比盲目改配置高效得多。3. 可复制配置vLLM 启动参数与 Continue config.yaml这一节是全文的核心把 vLLM 启动和 Continue 配置两块都写成可直接复制的形式。先说 vLLM 启动模型下载用 modelscope命令如下pip install modelscope vllm modelscope download --model cyankiwi/Qwen3.6-27B-AWQ-INT4 \ --local_dir /opt/vllm/models/Qwen3.6-INT4下载完成后启动服务注意--served-model-name这个参数它决定了后续所有请求里model字段该填什么vllm serve /opt/vllm/models/Qwen3.6-INT4 \ --served-model-name Qwen3.6 \ --port 8818 \ --max-model-len 65536 \ --gpu-memory-utilization 0.9 \ --reasoning-parser qwen3 \ --trust-remote-code启动日志里会打印Uvicorn running on http://0.0.0.0:8818看到这行才算起来。如果显存不够把--gpu-memory-utilization降到 0.85 或--max-model-len降到 32768 再试。--served-model-name Qwen3.6这个值请记牢Continue 里的model必须和它逐字符一致大小写都不能差。接下来是 Continue 的配置文件。Continue 新版用的是config.yaml路径在~/.continue/config.yamlLinux/macOS或%USERPROFILE%\.continue\config.yamlWindows。如果你装的是中文汉化版配置入口和字段名可能不一样这也是 401 的高发区建议直接换英文原版。可复制的配置如下name: local-and-cloud version: 0.0.1 schema: v1 models: - name: Qwen3.6 Local provider: openai model: Qwen3.6 apiBase: http://localhost:8818/v1 apiKey: dummy roles: - chat - edit - apply - name: TaoToken Claude provider: openai model: claude-sonnet-4-5 apiBase: https://taotoken.net/api/v1 apiKey: ${TAOTOKEN_API_KEY} roles: - chat - edit - apply几个关键点逐条说。第一provider必须是openai因为 vLLM 和 TaoToken 都走 OpenAI 兼容协议Continue 里没有专门的 vllm provider用 openai 就对了。第二本地那条的apiKey填dummy就行vLLM 默认不校验但字段不能空空字符串在某些 Continue 版本里会触发 401。第三TaoToken 那条用${TAOTOKEN_API_KEY}引用环境变量Continue 支持这种写法避免把 Key 明文写进文件。第四model字段本地填Qwen3.6云端填你实际选的模型 ID两者不能混。如果你更习惯用 JSON 格式老版本 Continue 用config.json等价配置如下{ models: [ { title: Qwen3.6 Local, provider: openai, model: Qwen3.6, apiBase: http://localhost:8818/v1, apiKey: dummy }, { title: TaoToken Claude, provider: openai, model: claude-sonnet-4-5, apiBase: https://taotoken.net/api/v1, apiKey: sk-你的真实Key } ] }JSON 版本不支持环境变量插值所以 Key 只能明文写这也是我推荐 YAML 的原因。改完配置后Continue 一般会自动重载如果没有点插件面板右上角的齿轮手动 reload 一次。配置写完后先别急着在聊天框发消息下一步用 curl 把两个 endpoint 都验证一遍确认服务层没问题再回到插件。4. 验证请求curl 打通 endpoint 与 API Key排查 401 最忌讳的就是跳过 curl 直接看插件。curl 是唯一能给你原始 HTTP 状态码和响应体的工具插件的 UI 会把各种错误都渲染成一句模糊的提示。这一节把本地和云端两条通道的验证命令都给全。先验证本地 vLLM 的模型列表这一步确认服务活着且模型名对curl -s http://localhost:8818/v1/models | python -m json.tool正常返回里data数组会有一个id字段值就是Qwen3.6。如果这里返回空数组或者报连接拒绝说明 vLLM 没起来或端口不对先解决这个再谈 401。如果id和你配置里写的model不一致那就是模型名对不上改配置即可。再发一条对话请求确认模型能正常推理curl -s http://localhost:8818/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer dummy \ -d { model: Qwen3.6, messages: [{role: user, content: 11等于几}], max_tokens: 50 } | python -m json.tool注意这里我特意加了Authorization: Bearer dummy头。vLLM 默认不校验加不加都能通但加上它有两个好处一是模拟 Continue 的真实请求形态二是如果哪天你给 vLLM 加了--api-key参数这条命令能立刻暴露问题。返回里choices[0].message.content有内容就说明本地通道完全正常。然后验证 TaoToken 通道命令和上面结构一样只换 URL、Key 和模型 IDcurl -s https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: claude-sonnet-4-5, messages: [{role: user, content: 11等于几}], max_tokens: 50 } | python -m json.tool两条 curl 都通之后你手里就有了两个「服务层已验证」的 endpoint。此时如果 Continue 里本地那条报 401而云端那条正常基本可以锁定是 Continue 读取的配置和你编辑的文件不是同一份或者本地那条的apiKey字段被写成了空。反过来如果两条都 401那问题在 Continue 的全局配置或插件版本上。再补一个诊断技巧用curl -v看完整的请求头确认Authorization头真的发出去了curl -v http://localhost:8818/v1/models 21 | grep -i authorization如果这行什么都没输出说明你的 curl 没带鉴权头但 vLLM 依然返回 200这恰好证明了本地服务不校验 Key。把这个认知带到 Continue 排查里本地 401 绝不是 vLLM 拒绝了你而是请求根本没打到 vLLM或者打到了别的服务。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节把 Continue 接入本地 vLLM 时最常见的几类报错逐个拆解每条都给现象、根因和修法。这些报错我在不同机器上反复遇到过按这个顺序查基本能覆盖九成情况。报错一401 Unauthorized响应体是{error:{message:Invalid API key}}。这是最典型的。根因通常是 Continue 配置里apiKey字段为空字符串或者你编辑的config.yaml不是插件实际加载的那份。修法先确认文件路径Linux/macOS 下是~/.continue/config.yamlWindows 下是%USERPROFILE%\.continue\config.yaml用cat或type打印出来看内容对不对。然后把本地那条的apiKey明确写成dummy不要留空。改完在 Continue 面板点 reload再发消息。报错二local proxy failed或connect ECONNREFUSED 127.0.0.1:8818。这个不是鉴权问题是连接问题。根因是 vLLM 没起来、端口被占、或者 Continue 跑在容器/WSL 里而 vLLM 跑在宿主机localhost指向的不是同一个网络命名空间。修法先在终端curl http://localhost:8818/v1/models确认服务活着如果 Continue 在 WSL 里而 vLLM 在 Windows 宿主机把apiBase改成宿主机的局域网 IP比如http://192.168.1.100:8818/v1如果端口被占lsof -i:8818查一下换端口重启。报错三Error reading choices或Cannot read properties of undefined (reading choices)。这个报错说明请求发出去了、也返回了但返回体结构不是 OpenAI 标准格式Continue 解析不了。根因通常是模型名写错导致 vLLM 返回了错误 JSON或者你误把apiBase写成了不带/v1的根地址。修法用第 4 节的 curl 命令原样打一发看返回体里有没有choices字段确认apiBase结尾是/v1不是/v1/也不是裸域名。报错四OAuth 相关报错比如OAuth token expired或弹出登录窗口。这个通常出现在你选了 Continue 内置的云端 provider比如官方托管的模型而不是自定义 openai provider 时。根因是 provider 选错了Continue 以为你要走它的账号体系。修法在配置里把provider明确写成openai不要用continue或其它内置值如果 UI 上让你登录直接跳过用自定义配置。把这几类报错和 curl 验证结合起来排查路径就很清晰了先 curl 本地通不通不通查服务通了但 Continue 401查配置文件和 apiKey 字段返回体解析失败查模型名和 apiBase 路径。每一步都有明确的判断依据不用猜。6. 语义一致 CTA把 Base URL 切到 TaoToken 做对照与长期编码排查到最后如果本地那条始终搞不定最快的验证手段就是把 Continue 里的 Base URL 临时切到 TaoToken用统一 Key 通道跑一遍。具体操作把config.yaml里本地那条的apiBase从http://localhost:8818/v1改成https://taotoken.net/api/v1apiKey从dummy改成${TAOTOKEN_API_KEY}model改成你在 TaoToken 上确认过的模型 ID保存后 reload。如果立刻能通说明 Continue 本身没问题问题 100% 在本地服务或本地配置上你可以安心回去继续查 vLLM。这个对照测试的价值在于二分定位。401 这种错误码本身不告诉你哪一层出问题但通过「换一个已知能工作的 endpoint」就能把范围砍一半。我平时排查网络和鉴权问题都用这招比逐行读配置快得多。如果你日常就是长期用 Continue 做编码辅助本地 vLLM 适合离线、隐私敏感的场景TaoToken 适合需要更强模型、又不想自己维护显存的场景。两者可以在config.yaml里并存按需切换。想深入用编码 Agent 能力的可以看 Coding Plan 页面了解长期方案https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。需要生成和管理 Key 的去控制台https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接入细节和字段说明查文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先在网页上试跑模型确认 ID 的用模型对话https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。最后留一个实用习惯每次改完 Continue 配置先curl打一发对应的 endpoint确认服务层没问题再回插件发消息。这样能把「服务问题」和「配置问题」彻底分开省下大量来回试错的时间。本地 vLLM 的 401 九成不是真的鉴权失败而是配置读取或模型名对不上按本文的顺序查基本都能定位到。
返回列表