# Kailoo · OpenClaw 一键配置(把 OpenClaw 的模型后端指向 kailoo.ai 反代) # 用法:irm https://kailoo.ai/install/kailoo-openclaw-setup.ps1 | iex # 干的事:装 OpenClaw(如缺·npm) + 写 ~/.openclaw/openclaw.json 的 kailoo provider + 连通性自测。 # 注:OpenClaw 是通用 AI 助手(连微信/TG/Slack 等),底层走 LLM API,这里把它接到 kailoo。 $ErrorActionPreference = 'Stop' $BASE_URL = 'https://kailoo.ai/v1' function Write-Ok ($m) { Write-Host " [OK] $m" -ForegroundColor Green } function Write-Warn($m) { Write-Host " [!] $m" -ForegroundColor Yellow } function Write-Err ($m) { Write-Host " [X] $m" -ForegroundColor Red } Write-Host '' Write-Host ' ============================================' Write-Host ' Kailoo - OpenClaw 一键配置' Write-Host ' ============================================' Write-Host ' OpenClaw 模型后端 -> kailoo.ai 反代 · 免翻墙' Write-Host '' # 1. Node + OpenClaw if (-not (Get-Command node -ErrorAction SilentlyContinue)) { Write-Warn 'Node.js 未安装,装 LTS(winget)...' try { & winget install -e --id OpenJS.NodeJS.LTS --silent --accept-source-agreements --accept-package-agreements | Out-Null } catch {} $env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User') } if (-not (Get-Command openclaw -ErrorAction SilentlyContinue)) { Write-Host ' 安装 OpenClaw(npm -g openclaw)...' try { & npm install -g openclaw | Out-Null; Write-Ok 'OpenClaw 安装完成' } catch { Write-Warn 'npm 装 OpenClaw 失败——请按官方 https://docs.openclaw.ai/ 装好 OpenClaw 后重跑本脚本(本脚本只负责配 kailoo)' } } else { Write-Ok 'OpenClaw 已装' } # 2. Key Write-Host '' $key = (Read-Host ' 粘贴你的 Kailoo API Key(zk_ 开头)').Trim() if ([string]::IsNullOrWhiteSpace($key)) { Write-Err 'Key 不能为空'; return } # 3. 写 ~/.openclaw/openclaw.json 的 kailoo provider(保留现有配置·合并) $dir = Join-Path $env:USERPROFILE '.openclaw' if (-not (Test-Path $dir)) { New-Item -ItemType Directory -Path $dir -Force | Out-Null } $cfgPath = Join-Path $dir 'openclaw.json' # OpenClaw 的 models 要求「模型描述对象」(含 id / name),不是纯字符串,否则 provider 被忽略。 $kailooProvider = [ordered]@{ baseUrl = $BASE_URL apiKey = $key api = 'openai-completions' models = @( [ordered]@{ id = 'gpt-5.5'; name = 'GPT-5.5' }, [ordered]@{ id = 'claude-opus-4-8'; name = 'Claude Opus 4.8' }, [ordered]@{ id = 'claude-sonnet-4-6'; name = 'Claude Sonnet 4.6' }, [ordered]@{ id = 'gemini-2.5-pro'; name = 'Gemini 2.5 Pro' } ) } if (Test-Path $cfgPath) { Copy-Item $cfgPath "$cfgPath.bak-kailoo" -Force try { $cfg = Get-Content $cfgPath -Raw | ConvertFrom-Json } catch { $cfg = [pscustomobject]@{} } } else { $cfg = [pscustomobject]@{} } if (-not $cfg.models) { $cfg | Add-Member -NotePropertyName models -NotePropertyValue ([pscustomobject]@{}) -Force } if (-not $cfg.models.providers) { $cfg.models | Add-Member -NotePropertyName providers -NotePropertyValue ([pscustomobject]@{}) -Force } $cfg.models.providers | Add-Member -NotePropertyName kailoo -NotePropertyValue $kailooProvider -Force $cfg | ConvertTo-Json -Depth 12 | Set-Content -Path $cfgPath -Encoding UTF8 Write-Ok "已写入 kailoo provider 到 $cfgPath(原配置备份 .bak-kailoo 如有)" # 4. 连通性自测 Write-Host ''; Write-Host ' 连通性自测...' try { $r = Invoke-WebRequest -UseBasicParsing "$BASE_URL/models" -Headers @{ Authorization = "Bearer $key" } -TimeoutSec 20 if ($r.StatusCode -eq 200) { Write-Ok '连通正常,Kailoo OpenClaw 配置完成' } } catch { $c = $_.Exception.Response.StatusCode.value__ if ($c -eq 401) { Write-Err 'Key 无效(401)' } else { Write-Warn "自测异常:$($_.Exception.Message)" } } Write-Host '' Write-Host ' 完成。OpenClaw 里选 provider=kailoo 即可。' -ForegroundColor Cyan Write-Host ' OpenClaw 用法见官方 https://docs.openclaw.ai/ · 遇到问题:support@kailoo.ai' -ForegroundColor DarkGray Write-Host ''