1. Windows 10 装 Qwen Code 卡在证书校验,到底卡在哪
如果你在 Windows 10 上敲下npm install -g @qwen-code/qwen-code@latest,结果终端刷出一大段红字,最后停在UNABLE_TO_VERIFY_LEAF_SIGNATURE,那你不是一个人。这个报错的意思是:Node 在发起 HTTPS 请求时,无法验证服务器证书链里的第一张叶子证书。注意,它和CERT_HAS_EXPIRED(证书过期)、SELF_SIGNED_CERT_IN_CHAIN(自签证书)不是一回事,UNABLE_TO_VERIFY_LEAF_SIGNATURE特指证书链在中间环节断了,Node 找不到能签发这张证书的根 CA。
Qwen Code(也就是 Qwen Cli)本身是个命令行 AI 编码工具,能读你的项目、跑命令、改代码,适合习惯在终端里干活的人。它的安装包依赖里带了一个@lvce-editor/ripgrep,这个包在postinstall阶段会去 GitHub Releases 下载一个ripgrep的预编译 zip。问题就出在这一步:Windows 10 上很多环境(公司网络、装了某些安全软件、或者 npm 的证书配置被改过)会让 Node 的 TLS 握手失败,于是下载中断,整个安装回滚。
我试过最直接的思路——加--strict-ssl=false关掉校验,结果照样报错,因为那个参数只影响 npm 自己的 registry 请求,管不到postinstall脚本里用got库发起的下载。所以真正要解决的是两件事:一是让 npm 能正常装包,二是让那个 ripgrep 下载别在证书上翻车。下面我把从定位到跑通的完整过程拆开讲,包括怎么把请求接到 TaoToken 的统一 Key 通道上,让后续调用模型时不用再折腾一堆环境变量。
2. 先搞清楚 npm 的证书链和代理配置
在动手改配置之前,得先确认你的 npm 到底在用哪套证书。Windows 10 上 Node 默认会读系统证书store,但 npm 有自己的cafile和strict-ssl设置,两者不一致时就会出问题。
打开 PowerShell,先看几个关键值:
npm config get strict-ssl npm config get cafile npm config get proxy npm config get https-proxy npm config get registry如果strict-ssl是true(默认),cafile为空,而你又处在需要走公司代理的网络里,那 Node 很可能拿不到正确的根证书。这时候有两个方向:要么给 npm 指定一个包含完整根证书链的cafile,要么在确认网络可信的前提下临时关掉校验。但关校验只是绕过,不是修复,后面我会给更稳的做法。
另外,proxy和https-proxy如果指向了一个会做 TLS 拦截的中间设备,那证书链断裂就是必然的。你可以先执行:
npm config delete proxy npm config delete https-proxy把代理配置清掉,再试一次安装。如果清掉后能过,说明问题出在代理的证书上;如果还是报UNABLE_TO_VERIFY_LEAF_SIGNATURE,那就继续往下走离线方案。
这里插一句,很多人会去改NODE_TLS_REJECT_UNAUTHORIZED=0这个环境变量,我不建议。它会让整个 Node 进程放弃所有 TLS 校验,包括你后面调模型 API 的请求,等于把安全底线全撤了。我们要的是精准解决 ripgrep 下载这一个点,而不是把整台机器的 Node 变成不设防状态。
3. 离线装 ripgrep,绕开 postinstall 的证书坑
既然报错明确指向https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-10/ripgrep-v13.0.0-10-x86_64-pc-windows-msvc.zip这个地址,最干脆的办法就是手动把这个 zip 下下来,再让 npm 跳过自动下载。
第一步,用浏览器或者下载工具把上面那个 URL 的文件保存到本地。注意版本号v13.0.0-10要和报错里的一致,如果你装的是别的版本,以终端里实际打印的 URL 为准。
第二步,解压这个 zip,里面会有一个rg.exe。把它放到 Qwen Code 的 node_modules 下的.bin目录里。路径大概是:
C:\Users\你的用户名\AppData\Roaming\npm\node_modules\@qwen-code\qwen-code\node_modules\.bin\如果.bin目录不存在,自己新建一个。放进去之后,这个rg.exe就是 ripgrep 的可执行文件,Qwen Code 运行时能找到它。
第三步,重新执行安装,但加上--ignore-scripts:
npm install -g @qwen-code/qwen-code@latest --ignore-scripts--ignore-scripts的作用是跳过所有包的postinstall脚本,这样@lvce-editor/ripgrep就不会再去 GitHub 下载,而是直接用你手动放好的rg.exe。装完之后验证一下:
qwen --version能打印出版本号,说明 CLI 本体已经就位。这一步实测下来是最稳的,因为它不依赖你的网络能不能连上 GitHub,也不依赖证书链是否完整。
4. 把 Qwen Code 接到 TaoToken 统一 Key 通道
CLI 装好了,接下来要让它能真正调模型。Qwen Code 支持通过配置文件指定 API 端点和 Key,我们可以把它指向 TaoToken 的统一通道,这样你只需要一个 Key,就能在 Qwen Code 里调用不同的模型,不用为每个模型单独配一套环境变量。
先到 TaoToken 控制台创建一个 API Key。打开 https://taotoken.net/api-keys ,登录后新建一个 Key,复制出来。这个 Key 就是你后面所有请求的凭证。
然后找到 Qwen Code 的配置目录。在 Windows 10 上,通常是用户目录下的.qwen文件夹:
C:\Users\你的用户名\.qwen\如果没有这个目录就手动建一个。在里面新建settings.json,写入下面的骨架:
{ "apiKey": "你的_TaoToken_API_Key", "baseUrl": "https://taotoken.net/api", "model": "qwen-max", "timeout": 60000 }这里几个字段说明一下:apiKey填你刚复制的 Key;baseUrl固定用https://taotoken.net/api,注意不要加 UTM 参数,API 地址就是干净的;model可以先填qwen-max,后面你可以按需换成别的;timeout给 60 秒,避免长响应被截断。
如果你更习惯用环境变量,也可以这样设:
setx TAOTOKEN_API_KEY "你的_TaoToken_API_Key" setx TAOTOKEN_BASE_URL "https://taotoken.net/api"设完之后要重开一个终端窗口才会生效。两种方式选一种就行,配置文件的方式更直观,环境变量的方式适合多工具共用。
5. 发一个请求验证通道是否打通
配置写好了,别急着写代码,先用一个最小请求确认链路是通的。Qwen Code 装好后可以直接在终端里跑:
qwen "用一句话解释什么是递归"如果配置正确,你会看到模型返回的内容。如果报 401,说明 Key 不对或者没读到;如果报连接超时,检查baseUrl是不是写成了带路径的地址;如果还是报证书类错误,那说明你的 Node 环境对taotoken.net的证书校验也有问题,这时候回到第 2 步,确认strict-ssl和cafile的状态。
想更直接地验证 API 通道,可以用 curl 发一个请求:
curl https://taotoken.net/api/v1/chat/completions ^ -H "Content-Type: application/json" ^ -H "Authorization: Bearer 你的_TaoToken_API_Key" ^ -d "{\"model\":\"qwen-max\",\"messages\":[{\"role\":\"user\",\"content\":\"你好\"}]}"Windows 的 cmd 里换行用^,PowerShell 里用反引号。返回 JSON 里如果有choices字段和内容,就说明 Key 和端点都没问题。这一步能过,Qwen Code 里基本也能过,因为底层走的是同一套 HTTP 请求。
如果你打算长期在终端里用 AI 辅助编码,或者要跑 Agent 类的自动化任务,可以了解一下 Coding Plan,它针对高频调用场景做了额度优化,比按次计费更适合天天用的开发者。入口在 https://taotoken.net/coding-plan 。
6. 本篇常见错排查
报错一:npm error code 1后面跟着VError: Failed to download
这就是本文的主线问题,ripgrep 下载被证书拦了。按第 3 步离线放rg.exe,加--ignore-scripts重装。注意--ignore-scripts会跳过所有 postinstall,如果你装的其他包也依赖 postinstall 做原生编译,可能会受影响,所以这个命令只建议在装 Qwen Code 时用。
报错二:UNABLE_TO_VERIFY_LEAF_SIGNATURE在调模型时也出现
说明你的 Node 对taotoken.net的证书链也验不过。先确认系统时间是否正确,时间偏差过大会导致证书被判无效。然后检查有没有装会做 TLS 拦截的安全软件,临时退出再试。如果确认网络环境可信,可以给 npm 指定一个完整的cafile:
npm config set cafile "C:\path\to\ca-bundle.crt"这个 crt 文件要包含你所在网络环境的根证书。不要用NODE_TLS_REJECT_UNAUTHORIZED=0来图省事。
报错三:qwen命令找不到
安装时如果用了--ignore-scripts,全局 bin 的链接可能没建好。检查C:\Users\你的用户名\AppData\Roaming\npm\下有没有qwen.cmd。如果没有,重新跑一次npm install -g @qwen-code/qwen-code@latest,这次不加--ignore-scripts,但前提是 ripgrep 已经手动放好了,postinstall 不会再触发下载。
报错四:401 Unauthorized
Key 填错了,或者settings.json的路径不对。Qwen Code 读的是用户目录下的.qwen/settings.json,不是当前项目目录。确认文件名是settings.json而不是settings.js,虽然标题里写的是 settings.js,但实际配置文件是 JSON 格式,别搞混。
报错五:请求超时
baseUrl写成了https://taotoken.net/api/带尾斜杠,或者写成了带 UTM 参数的地址。API 地址就是https://taotoken.net/api,干净利落。另外检查timeout是不是设得太短,长回复需要更长时间。
把上面这些点过一遍,Windows 10 下 Qwen Code 的安装和接入基本就通了。核心就两件事:ripgrep 离线放好绕开证书校验,settings.json 指向 TaoToken 的统一通道。剩下的就是按你的实际使用习惯调模型和超时参数了。