一API接入)
1. 為什么要在 GCP Compute Engine 上跑 OpenClawOpenClaw 是一個(gè)開源的自動(dòng)化任務(wù)執(zhí)行工具你可以把它理解成一個(gè)「能自己拆解任務(wù)、調(diào)用模型、執(zhí)行腳本」的智能代理框架。它本身不綁定任何一家模型服務(wù)而是通過配置文件里的 API 通道去請(qǐng)求大模型。這就帶來一個(gè)很現(xiàn)實(shí)的問題如果你在本地電腦上跑機(jī)器一關(guān)任務(wù)就斷如果你把模型 Key 硬編碼在代碼里換模型、換 Key、團(tuán)隊(duì)協(xié)作都會(huì)很痛苦。把 OpenClaw 放到 GCP Compute Engine 上解決的正是「長期在線」和「算力彈性」這兩件事。Compute Engine 的實(shí)例可以 7×24 小時(shí)運(yùn)行按秒計(jì)費(fèi)需要更強(qiáng)算力時(shí)直接改 machine-type 重啟即可不用重新裝環(huán)境。而模型接入這一層我用 TaoToken 的統(tǒng)一 API 通道來處理——一個(gè) Key 走通多家模型Base URL 固定OpenClaw 的 config.toml 里只寫一份配置后面換模型只改 Model ID不動(dòng)其他代碼。這篇內(nèi)容適合三類人一是已經(jīng)在本地跑過 OpenClaw、想搬到云上的開發(fā)者二是剛接觸 GCP、想找一個(gè)完整部署案例練手的運(yùn)維或后端三是團(tuán)隊(duì)里需要統(tǒng)一模型出口、不想每個(gè)人各自管 Key 的技術(shù)負(fù)責(zé)人。整篇會(huì)從創(chuàng)建實(shí)例開始一路寫到用 curl 驗(yàn)證 API 連通性中間所有命令和配置都可以直接復(fù)制。核心檢索詞先明確GCP Compute Engine 部署 OpenClaw、OpenClaw 接入統(tǒng)一 API、config.toml 配置模型通道。下面按實(shí)際操作順序展開每一步都給出可復(fù)制的命令和預(yù)期結(jié)果。2. 前置準(zhǔn)備TaoToken 統(tǒng)一 API 通道與 GCP 環(huán)境在動(dòng) Compute Engine 之前先把兩件事準(zhǔn)備好GCP 側(cè)的賬號(hào)與 gcloud 工具以及 TaoToken 側(cè)的 API Key。這兩件事都不復(fù)雜但順序別搞反否則后面驗(yàn)證請(qǐng)求時(shí)會(huì)來回折騰。先說 TaoToken。它的定位是統(tǒng)一模型 API 通道官網(wǎng)入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 請(qǐng)求地址固定為 https://taotoken.net/api 。你需要在控制臺(tái)創(chuàng)建一個(gè) API Key這個(gè) Key 就是 OpenClaw 訪問模型的憑證。創(chuàng)建入口在 API Keys 頁面登錄后點(diǎn)新建即可。拿到 Key 之后先別急著寫進(jìn)配置記下來后面 config.toml 和 curl 驗(yàn)證都要用。這里要強(qiáng)調(diào)一個(gè)概念TaoToken 的 Base URL 是 https://taotoken.net/api OpenClaw 里配置的 base_url 要寫成這個(gè)而不是帶具體路徑的完整 URL。Model ID 則按你實(shí)際要用的模型填比如 claude 系列或 gpt 系列的標(biāo)識(shí)。Key、Base URL、Model ID 這三件套是后面所有配置的核心缺一不可。再說 GCP 側(cè)。你需要一個(gè) GCP 項(xiàng)目并且本地裝好 Google Cloud SDKgcloud。驗(yàn)證是否裝好執(zhí)行g(shù)cloud version如果能看到版本號(hào)輸出說明 SDK 就緒。接著登錄并設(shè)置默認(rèn)項(xiàng)目gcloud auth login gcloud config set project 你的項(xiàng)目ID項(xiàng)目 ID 在 GCP 控制臺(tái)頂部能看到是一串帶連字符的字符串。設(shè)置完成后用gcloud config list確認(rèn)當(dāng)前項(xiàng)目正確。這一步如果項(xiàng)目設(shè)錯(cuò)后面創(chuàng)建的實(shí)例會(huì)跑到別的項(xiàng)目里排查起來很煩。另外建議提前確認(rèn) Compute Engine API 已啟用。新項(xiàng)目默認(rèn)可能沒開執(zhí)行g(shù)cloud services enable compute.googleapis.com這條命令會(huì)啟用 Compute Engine API返回成功后就可以創(chuàng)建實(shí)例了。整個(gè)過程不需要任何特殊網(wǎng)絡(luò)工具gcloud 走的是官方通道正常網(wǎng)絡(luò)環(huán)境即可完成。3. 可復(fù)制配置Compute Engine 實(shí)例 OpenClaw config.toml 骨架這一節(jié)是整篇的核心分兩部分先用 gcloud 創(chuàng)建實(shí)例再在實(shí)例里寫 OpenClaw 的配置文件。所有片段都可以直接復(fù)制路徑和原文保持一致。3.1 創(chuàng)建 Compute Engine 實(shí)例用下面這條命令創(chuàng)建一臺(tái) Ubuntu 實(shí)例。機(jī)器類型選 n1-standard-22 vCPU / 7.5GB 內(nèi)存對(duì) OpenClaw 這種要跑 Python 依賴和并發(fā)請(qǐng)求的場(chǎng)景夠用磁盤 50GB系統(tǒng)盤用 ubuntu-2004-ltsgcloud compute instances create openclaw-instance \ --machine-typen1-standard-2 \ --image-familyubuntu-2004-lts \ --image-projectubuntu-os-cloud \ --zoneus-central1-a \ --boot-disk-size50GB執(zhí)行后會(huì)輸出實(shí)例名稱、內(nèi)外網(wǎng) IP、狀態(tài)等信息??吹絪tatus: RUNNING就說明創(chuàng)建成功。如果報(bào)配額不足換一個(gè) zone比如 us-central1-b或者把 machine-type 降到 e2-medium 先跑通。創(chuàng)建完成后 SSH 進(jìn)去gcloud compute ssh openclaw-instance --zoneus-central1-a首次連接會(huì)提示生成 SSH 密鑰一路回車即可。進(jìn)去之后先裝依賴sudo apt update sudo apt install -y python3 python3-pip git然后克隆 OpenClaw 倉庫并安裝 Python 依賴git clone https://github.com/openclaw/openclaw.git cd openclaw pip3 install -r requirements.txt如果 pip 安裝慢可以加國內(nèi)鏡像源但這不是必須的取決于你的網(wǎng)絡(luò)環(huán)境。3.2 OpenClaw config.toml 骨架OpenClaw 的配置文件放在項(xiàng)目根目錄命名為 config.toml。下面是一份可直接用的骨架重點(diǎn)是把 TaoToken 的三件套填進(jìn)去[model] provider openai-compatible base_url https://taotoken.net/api api_key 你的TaoToken_API_Key model_id claude-3-5-sonnet timeout 60 [agent] max_steps 20 log_level INFO workspace /home/你的用戶名/openclaw/workspace [server] host 0.0.0.0 port 8080幾個(gè)關(guān)鍵點(diǎn)說明。base_url 必須是 https://taotoken.net/api 不要加/v1之類的后綴OpenClaw 內(nèi)部會(huì)拼接具體路徑。api_key 填你在 TaoToken 控制臺(tái)創(chuàng)建的那串 Key。model_id 按你實(shí)際要用的模型填換模型只改這一行。timeout 設(shè) 60 秒模型響應(yīng)慢時(shí)不容易斷。如果你用的是 JSON 格式的配置部分版本支持等價(jià)寫法是{ model: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key: 你的TaoToken_API_Key, model_id: claude-3-5-sonnet, timeout: 60 }, agent: { max_steps: 20, log_level: INFO }, server: { host: 0.0.0.0, port: 8080 } }兩種格式選一種即可TOML 更常見。寫完后用cat config.toml確認(rèn)內(nèi)容無誤特別注意 api_key 不要有多余空格或換行。3.3 防火墻與 systemd 服務(wù)OpenClaw 默認(rèn)監(jiān)聽 8080 端口需要放行g(shù)cloud compute firewall-rules create openclaw-allow \ --allowtcp:8080 \ --descriptionAllow OpenClaw traffic \ --directionINGRESS然后用 systemd 托管避免 SSH 斷開后進(jìn)程被殺。創(chuàng)建服務(wù)文件sudo nano /etc/systemd/system/openclaw.service寫入以下內(nèi)容注意 WorkingDirectory 和 ExecStart 里的用戶名要換成你自己的[Unit] DescriptionOpenClaw Service Afternetwork.target [Service] Userroot WorkingDirectory/home/你的用戶名/openclaw ExecStart/usr/bin/python3 /home/你的用戶名/openclaw/main.py --config /home/你的用戶名/openclaw/config.toml Restartalways [Install] WantedBymulti-user.target保存后啟用并啟動(dòng)sudo systemctl enable openclaw sudo systemctl start openclaw sudo systemctl status openclaw看到active (running)就說明服務(wù)起來了。如果失敗用journalctl -u openclaw -f看日志常見原因是路徑寫錯(cuò)或依賴沒裝全。4. 驗(yàn)證請(qǐng)求用 curl 打通 TaoToken API 與 OpenClaw配置寫完不代表通道通了必須實(shí)際發(fā)一次請(qǐng)求驗(yàn)證。這一步分兩層先用 curl 直接打 TaoToken 的 API確認(rèn) Key 和 Base URL 沒問題再通過 OpenClaw 觸發(fā)一次任務(wù)確認(rèn)它真的能調(diào)通模型。4.1 curl 驗(yàn)證 TaoToken API 連通性在實(shí)例里執(zhí)行下面這條命令。注意把你的TaoToken_API_Key換成真實(shí) Keymodel 字段換成你 config.toml 里寫的 model_idcurl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的TaoToken_API_Key \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: 回復(fù)ok兩個(gè)字}], max_tokens: 20 }預(yù)期返回是一段 JSON結(jié)構(gòu)里包含choices數(shù)組choices[0].message.content就是模型回復(fù)。如果看到content: ok之類的內(nèi)容說明 Key、Base URL、Model ID 三件套全部正確通道打通。如果返回 401說明 Key 錯(cuò)了或沒帶 Authorization 頭如果返回 404多半是路徑寫錯(cuò)檢查是不是漏了/v1/chat/completions如果返回local proxy failed之類的錯(cuò)誤說明請(qǐng)求根本沒出去檢查實(shí)例的出網(wǎng)規(guī)則。這些錯(cuò)誤下一節(jié)會(huì)詳細(xì)對(duì)照。4.2 通過 OpenClaw 觸發(fā)任務(wù)驗(yàn)證curl 通了之后再驗(yàn)證 OpenClaw 本身。重啟服務(wù)讓新配置生效sudo systemctl restart openclaw然后看日志確認(rèn)啟動(dòng)無報(bào)錯(cuò)sudo journalctl -u openclaw -n 50日志里應(yīng)該能看到模型配置加載成功、服務(wù)監(jiān)聽 8080 的信息。接著在實(shí)例內(nèi)部發(fā)一個(gè)本地請(qǐng)求觸發(fā)任務(wù)curl -X POST http://localhost:8080/run \ -H Content-Type: application/json \ -d {task: 列出當(dāng)前目錄下的文件}如果 OpenClaw 正常會(huì)返回任務(wù)執(zhí)行結(jié)果日志里也能看到它調(diào)用模型的記錄。這一步成功說明從 Compute Engine 到 TaoToken 再到模型服務(wù)的整條鏈路全部跑通。4.3 成功結(jié)果的判斷標(biāo)準(zhǔn)判斷部署是否成功看三個(gè)信號(hào)一是systemctl status openclaw顯示 active二是 curl 打 TaoToken 返回帶 choices 的 JSON三是 OpenClaw 日志里出現(xiàn)模型請(qǐng)求和響應(yīng)記錄。三個(gè)都滿足就可以把實(shí)例當(dāng)成長期在線的 OpenClaw 節(jié)點(diǎn)用了。后續(xù)要換模型只改 config.toml 里的 model_id重啟服務(wù)即可Key 和 Base URL 都不用動(dòng)。5. 常見報(bào)錯(cuò)排查401、local proxy failed、reading choices、OAuth部署過程中最容易卡在幾個(gè)固定報(bào)錯(cuò)上。這一節(jié)按真實(shí)錯(cuò)誤信息對(duì)照排查每條都給出原因和動(dòng)作。5.1 401 Unauthorized報(bào)錯(cuò)長這樣{error: {message: Invalid API key, type: authentication_error}}原因通常是三種Key 復(fù)制時(shí)帶了空格或換行Authorization 頭格式寫錯(cuò)必須是Bearer 空格 Key或者 Key 本身在 TaoToken 控制臺(tái)被刪除或禁用。排查動(dòng)作重新在控制臺(tái)復(fù)制一次 Key用echo -n 你的Key | wc -c看長度是否和預(yù)期一致確認(rèn)沒有隱藏字符。然后重跑 curl注意Bearer和 Key 之間是一個(gè)空格。5.2 local proxy failed報(bào)錯(cuò)類似local proxy failed: dial tcp: connection refused這個(gè)錯(cuò)誤說明請(qǐng)求在實(shí)例內(nèi)部就沒發(fā)出去通常是實(shí)例沒有外網(wǎng)訪問權(quán)限或者出網(wǎng)被安全組攔了。排查動(dòng)作在實(shí)例里執(zhí)行curl -I https://taotoken.net/api如果連這個(gè)都失敗說明出網(wǎng)有問題。檢查實(shí)例是否綁定了外部 IP或者所在子網(wǎng)的 Cloud NAT 是否配置。Compute Engine 默認(rèn)實(shí)例帶外部 IP 時(shí)可以直接出網(wǎng)如果你創(chuàng)建時(shí)用了--no-address就需要額外配 NAT。5.3 reading choices 相關(guān)報(bào)錯(cuò)報(bào)錯(cuò)類似KeyError: choices 或 reading choices failed這說明請(qǐng)求發(fā)出去了但返回的 JSON 結(jié)構(gòu)里沒有 choices 字段。常見原因是 Base URL 寫錯(cuò)比如寫成了https://taotoken.net/api/v1導(dǎo)致路徑重復(fù)拼接或者 model_id 填了一個(gè)不存在的模型服務(wù)返回了錯(cuò)誤結(jié)構(gòu)。排查動(dòng)作先用 4.1 的 curl 命令單獨(dú)驗(yàn)證確認(rèn)返回結(jié)構(gòu)正常再檢查 config.toml 里 base_url 是否嚴(yán)格等于https://taotoken.net/api不要多加路徑。5.4 OAuth 相關(guān)報(bào)錯(cuò)報(bào)錯(cuò)類似OAuth token expired 或 unauthorized_client如果你在 OpenClaw 里配置了需要 OAuth 的模型通道而 Token 過期就會(huì)報(bào)這個(gè)。但用 TaoToken 的 API Key 模式不會(huì)走 OAuth所以出現(xiàn)這個(gè)錯(cuò)誤通常是配置里混入了其他 provider 的字段。排查動(dòng)作檢查 config.toml 的 provider 是否寫成openai-compatible刪掉任何 oauth、refresh_token 之類的字段只保留 base_url、api_key、model_id 三件套。5.5 服務(wù)啟動(dòng)失敗但無明確報(bào)錯(cuò)如果systemctl status顯示 failed 但日志信息很少多半是 WorkingDirectory 或 ExecStart 路徑寫錯(cuò)。用ls /home/你的用戶名/openclaw/main.py確認(rèn)文件存在再檢查 service 文件里的用戶名是否和實(shí)際一致。改完執(zhí)行sudo systemctl daemon-reload再重啟。排查完這些基本能覆蓋 90% 的部署問題。核心原則是分層驗(yàn)證先 curl 打 TaoToken再 curl 打本地 OpenClaw一層層縮小范圍不要一上來就懷疑模型服務(wù)。6. 長期運(yùn)行與統(tǒng)一接入的實(shí)踐建議跑通之后有幾件事值得順手做掉能讓這套部署更省心。第一把 config.toml 里的 Key 換成環(huán)境變量引用。OpenClaw 支持從環(huán)境變量讀 Key這樣配置文件可以進(jìn)版本庫而不泄露憑證。在 systemd 服務(wù)里加一行EnvironmentTAOTOKEN_API_KEY你的Keyconfig.toml 里寫api_key ${TAOTOKEN_API_KEY}。這樣換 Key 只改服務(wù)文件不動(dòng)配置。第二用 TaoToken 的統(tǒng)一通道做模型切換。因?yàn)?Base URL 固定你可以在 config.toml 里準(zhǔn)備多份 model 段落需要時(shí)改 model_id 重啟即可。團(tuán)隊(duì)協(xié)作時(shí)大家共用同一個(gè) Key 出口用量和權(quán)限在控制臺(tái)統(tǒng)一管理比每人各自申請(qǐng) Key 清晰得多。第三監(jiān)控和日志。journalctl -u openclaw -f適合實(shí)時(shí)看長期運(yùn)行建議把日志落到文件配合 GCP 的 Cloud Logging 做告警。實(shí)例層面可以設(shè)一個(gè)開機(jī)自啟的檢查腳本服務(wù)掛了自動(dòng)拉起。第四成本控制。n1-standard-2 按需計(jì)費(fèi)如果任務(wù)不密集可以設(shè)一個(gè)定時(shí)開關(guān)機(jī)策略或者改用搶占式實(shí)例降低成本。磁盤 50GB 對(duì)大多數(shù)任務(wù)夠用日志多了記得清理。如果你后面要做更復(fù)雜的 Agent 編排或者需要長期跑編碼類任務(wù)可以了解 TaoToken 的 Coding Plan它在統(tǒng)一通道基礎(chǔ)上針對(duì)編碼場(chǎng)景做了優(yōu)化。模型對(duì)話入口可以用來快速試不同模型的效果接入文檔里有各語言的調(diào)用示例。API Keys 頁面管理你的憑證控制臺(tái)看用量。這些入口都在官網(wǎng) https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 上能找到。最后說一個(gè)我踩過的坑一開始我把 base_url 寫成了帶/v1的完整路徑結(jié)果 OpenClaw 內(nèi)部又拼了一次請(qǐng)求打到錯(cuò)誤地址報(bào)的就是 reading choices 那個(gè)錯(cuò)。后來嚴(yán)格按https://taotoken.net/api寫問題消失。配置這東西寧可少寫一個(gè)后綴也不要多寫。