 安裝報(bào) UNABLE_TO_VERIFY_LEAF_SIGNATURE:TaoToken 統(tǒng)一 Key 通道的 settings.js)
1. Windows 10 裝 Qwen Code 卡在證書(shū)校驗(yàn)到底卡在哪如果你在 Windows 10 上敲下npm install -g qwen-code/qwen-codelatest結(jié)果終端刷出一大段紅字最后停在UNABLE_TO_VERIFY_LEAF_SIGNATURE那你不是一個(gè)人。這個(gè)報(bào)錯(cuò)的意思是Node 在發(fā)起 HTTPS 請(qǐng)求時(shí)無(wú)法驗(yàn)證服務(wù)器證書(shū)鏈里的第一張葉子證書(shū)。注意它和CERT_HAS_EXPIRED證書(shū)過(guò)期、SELF_SIGNED_CERT_IN_CHAIN自簽證書(shū)不是一回事UNABLE_TO_VERIFY_LEAF_SIGNATURE特指證書(shū)鏈在中間環(huán)節(jié)斷了Node 找不到能簽發(fā)這張證書(shū)的根 CA。Qwen Code也就是 Qwen Cli本身是個(gè)命令行 AI 編碼工具能讀你的項(xiàng)目、跑命令、改代碼適合習(xí)慣在終端里干活的人。它的安裝包依賴(lài)?yán)飵Я艘粋€(gè)lvce-editor/ripgrep這個(gè)包在postinstall階段會(huì)去 GitHub Releases 下載一個(gè)ripgrep的預(yù)編譯 zip。問(wèn)題就出在這一步Windows 10 上很多環(huán)境公司網(wǎng)絡(luò)、裝了某些安全軟件、或者 npm 的證書(shū)配置被改過(guò)會(huì)讓 Node 的 TLS 握手失敗于是下載中斷整個(gè)安裝回滾。我試過(guò)最直接的思路——加--strict-sslfalse關(guān)掉校驗(yàn)結(jié)果照樣報(bào)錯(cuò)因?yàn)槟莻€(gè)參數(shù)只影響 npm 自己的 registry 請(qǐng)求管不到postinstall腳本里用got庫(kù)發(fā)起的下載。所以真正要解決的是兩件事一是讓 npm 能正常裝包二是讓那個(gè) ripgrep 下載別在證書(shū)上翻車(chē)。下面我把從定位到跑通的完整過(guò)程拆開(kāi)講包括怎么把請(qǐng)求接到 TaoToken 的統(tǒng)一 Key 通道上讓后續(xù)調(diào)用模型時(shí)不用再折騰一堆環(huán)境變量。2. 先搞清楚 npm 的證書(shū)鏈和代理配置在動(dòng)手改配置之前得先確認(rèn)你的 npm 到底在用哪套證書(shū)。Windows 10 上 Node 默認(rèn)會(huì)讀系統(tǒng)證書(shū)store但 npm 有自己的cafile和strict-ssl設(shè)置兩者不一致時(shí)就會(huì)出問(wèn)題。打開(kāi) PowerShell先看幾個(gè)關(guān)鍵值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默認(rèn)cafile為空而你又處在需要走公司代理的網(wǎng)絡(luò)里那 Node 很可能拿不到正確的根證書(shū)。這時(shí)候有兩個(gè)方向要么給 npm 指定一個(gè)包含完整根證書(shū)鏈的cafile要么在確認(rèn)網(wǎng)絡(luò)可信的前提下臨時(shí)關(guān)掉校驗(yàn)。但關(guān)校驗(yàn)只是繞過(guò)不是修復(fù)后面我會(huì)給更穩(wěn)的做法。另外proxy和https-proxy如果指向了一個(gè)會(huì)做 TLS 攔截的中間設(shè)備那證書(shū)鏈斷裂就是必然的。你可以先執(zhí)行npm config delete proxy npm config delete https-proxy把代理配置清掉再試一次安裝。如果清掉后能過(guò)說(shuō)明問(wèn)題出在代理的證書(shū)上如果還是報(bào)UNABLE_TO_VERIFY_LEAF_SIGNATURE那就繼續(xù)往下走離線方案。這里插一句很多人會(huì)去改NODE_TLS_REJECT_UNAUTHORIZED0這個(gè)環(huán)境變量我不建議。它會(huì)讓整個(gè) Node 進(jìn)程放棄所有 TLS 校驗(yàn)包括你后面調(diào)模型 API 的請(qǐng)求等于把安全底線全撤了。我們要的是精準(zhǔn)解決 ripgrep 下載這一個(gè)點(diǎn)而不是把整臺(tái)機(jī)器的 Node 變成不設(shè)防狀態(tài)。3. 離線裝 ripgrep繞開(kāi) postinstall 的證書(shū)坑既然報(bào)錯(cuò)明確指向https://github.com/microsoft/ripgrep-prebuilt/releases/download/v13.0.0-10/ripgrep-v13.0.0-10-x86_64-pc-windows-msvc.zip這個(gè)地址最干脆的辦法就是手動(dòng)把這個(gè) zip 下下來(lái)再讓 npm 跳過(guò)自動(dòng)下載。第一步用瀏覽器或者下載工具把上面那個(gè) URL 的文件保存到本地。注意版本號(hào)v13.0.0-10要和報(bào)錯(cuò)里的一致如果你裝的是別的版本以終端里實(shí)際打印的 URL 為準(zhǔn)。第二步解壓這個(gè) zip里面會(huì)有一個(gè)rg.exe。把它放到 Qwen Code 的 node_modules 下的.bin目錄里。路徑大概是C:\Users\你的用戶名\AppData\Roaming\npm\node_modules\qwen-code\qwen-code\node_modules\.bin\如果.bin目錄不存在自己新建一個(gè)。放進(jìn)去之后這個(gè)rg.exe就是 ripgrep 的可執(zhí)行文件Qwen Code 運(yùn)行時(shí)能找到它。第三步重新執(zhí)行安裝但加上--ignore-scriptsnpm install -g qwen-code/qwen-codelatest --ignore-scripts--ignore-scripts的作用是跳過(guò)所有包的postinstall腳本這樣lvce-editor/ripgrep就不會(huì)再去 GitHub 下載而是直接用你手動(dòng)放好的rg.exe。裝完之后驗(yàn)證一下qwen --version能打印出版本號(hào)說(shuō)明 CLI 本體已經(jīng)就位。這一步實(shí)測(cè)下來(lái)是最穩(wěn)的因?yàn)樗灰蕾?lài)你的網(wǎng)絡(luò)能不能連上 GitHub也不依賴(lài)證書(shū)鏈?zhǔn)欠裢暾?. 把 Qwen Code 接到 TaoToken 統(tǒng)一 Key 通道CLI 裝好了接下來(lái)要讓它能真正調(diào)模型。Qwen Code 支持通過(guò)配置文件指定 API 端點(diǎn)和 Key我們可以把它指向 TaoToken 的統(tǒng)一通道這樣你只需要一個(gè) Key就能在 Qwen Code 里調(diào)用不同的模型不用為每個(gè)模型單獨(dú)配一套環(huán)境變量。先到 TaoToken 控制臺(tái)創(chuàng)建一個(gè) API Key。打開(kāi) https://taotoken.net/api-keys 登錄后新建一個(gè) Key復(fù)制出來(lái)。這個(gè) Key 就是你后面所有請(qǐng)求的憑證。然后找到 Qwen Code 的配置目錄。在 Windows 10 上通常是用戶目錄下的.qwen文件夾C:\Users\你的用戶名\.qwen\如果沒(méi)有這個(gè)目錄就手動(dòng)建一個(gè)。在里面新建settings.json寫(xiě)入下面的骨架{ apiKey: 你的_TaoToken_API_Key, baseUrl: https://taotoken.net/api, model: qwen-max, timeout: 60000 }這里幾個(gè)字段說(shuō)明一下apiKey填你剛復(fù)制的 KeybaseUrl固定用https://taotoken.net/api注意不要加 UTM 參數(shù)API 地址就是干凈的model可以先填qwen-max后面你可以按需換成別的timeout給 60 秒避免長(zhǎng)響應(yīng)被截?cái)?。如果你更?xí)慣用環(huán)境變量也可以這樣設(shè)setx TAOTOKEN_API_KEY 你的_TaoToken_API_Key setx TAOTOKEN_BASE_URL https://taotoken.net/api設(shè)完之后要重開(kāi)一個(gè)終端窗口才會(huì)生效。兩種方式選一種就行配置文件的方式更直觀環(huán)境變量的方式適合多工具共用。5. 發(fā)一個(gè)請(qǐng)求驗(yàn)證通道是否打通配置寫(xiě)好了別急著寫(xiě)代碼先用一個(gè)最小請(qǐng)求確認(rèn)鏈路是通的。Qwen Code 裝好后可以直接在終端里跑qwen 用一句話解釋什么是遞歸如果配置正確你會(huì)看到模型返回的內(nèi)容。如果報(bào) 401說(shuō)明 Key 不對(duì)或者沒(méi)讀到如果報(bào)連接超時(shí)檢查baseUrl是不是寫(xiě)成了帶路徑的地址如果還是報(bào)證書(shū)類(lèi)錯(cuò)誤那說(shuō)明你的 Node 環(huán)境對(duì)taotoken.net的證書(shū)校驗(yàn)也有問(wèn)題這時(shí)候回到第 2 步確認(rèn)strict-ssl和cafile的狀態(tài)。想更直接地驗(yàn)證 API 通道可以用 curl 發(fā)一個(gè)請(qǐng)求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 里用反引號(hào)。返回 JSON 里如果有choices字段和內(nèi)容就說(shuō)明 Key 和端點(diǎn)都沒(méi)問(wèn)題。這一步能過(guò)Qwen Code 里基本也能過(guò)因?yàn)榈讓幼叩氖峭惶?HTTP 請(qǐng)求。如果你打算長(zhǎng)期在終端里用 AI 輔助編碼或者要跑 Agent 類(lèi)的自動(dòng)化任務(wù)可以了解一下 Coding Plan它針對(duì)高頻調(diào)用場(chǎng)景做了額度優(yōu)化比按次計(jì)費(fèi)更適合天天用的開(kāi)發(fā)者。入口在 https://taotoken.net/coding-plan 。6. 本篇常見(jiàn)錯(cuò)排查報(bào)錯(cuò)一npm error code 1后面跟著VError: Failed to download這就是本文的主線問(wèn)題ripgrep 下載被證書(shū)攔了。按第 3 步離線放rg.exe加--ignore-scripts重裝。注意--ignore-scripts會(huì)跳過(guò)所有 postinstall如果你裝的其他包也依賴(lài) postinstall 做原生編譯可能會(huì)受影響所以這個(gè)命令只建議在裝 Qwen Code 時(shí)用。報(bào)錯(cuò)二UNABLE_TO_VERIFY_LEAF_SIGNATURE在調(diào)模型時(shí)也出現(xiàn)說(shuō)明你的 Node 對(duì)taotoken.net的證書(shū)鏈也驗(yàn)不過(guò)。先確認(rèn)系統(tǒng)時(shí)間是否正確時(shí)間偏差過(guò)大會(huì)導(dǎo)致證書(shū)被判無(wú)效。然后檢查有沒(méi)有裝會(huì)做 TLS 攔截的安全軟件臨時(shí)退出再試。如果確認(rèn)網(wǎng)絡(luò)環(huán)境可信可以給 npm 指定一個(gè)完整的cafilenpm config set cafile C:\path\to\ca-bundle.crt這個(gè) crt 文件要包含你所在網(wǎng)絡(luò)環(huán)境的根證書(shū)。不要用NODE_TLS_REJECT_UNAUTHORIZED0來(lái)圖省事。報(bào)錯(cuò)三qwen命令找不到安裝時(shí)如果用了--ignore-scripts全局 bin 的鏈接可能沒(méi)建好。檢查C:\Users\你的用戶名\AppData\Roaming\npm\下有沒(méi)有qwen.cmd。如果沒(méi)有重新跑一次npm install -g qwen-code/qwen-codelatest這次不加--ignore-scripts但前提是 ripgrep 已經(jīng)手動(dòng)放好了postinstall 不會(huì)再觸發(fā)下載。報(bào)錯(cuò)四401 UnauthorizedKey 填錯(cuò)了或者settings.json的路徑不對(duì)。Qwen Code 讀的是用戶目錄下的.qwen/settings.json不是當(dāng)前項(xiàng)目目錄。確認(rèn)文件名是settings.json而不是settings.js雖然標(biāo)題里寫(xiě)的是 settings.js但實(shí)際配置文件是 JSON 格式別搞混。報(bào)錯(cuò)五請(qǐng)求超時(shí)baseUrl寫(xiě)成了https://taotoken.net/api/帶尾斜杠或者寫(xiě)成了帶 UTM 參數(shù)的地址。API 地址就是https://taotoken.net/api干凈利落。另外檢查timeout是不是設(shè)得太短長(zhǎng)回復(fù)需要更長(zhǎng)時(shí)間。把上面這些點(diǎn)過(guò)一遍Windows 10 下 Qwen Code 的安裝和接入基本就通了。核心就兩件事ripgrep 離線放好繞開(kāi)證書(shū)校驗(yàn)settings.json 指向 TaoToken 的統(tǒng)一通道。剩下的就是按你的實(shí)際使用習(xí)慣調(diào)模型和超時(shí)參數(shù)了。