Files
openclaw-setup-cn/configure-aws-bedrock.ps1

247 lines
9.8 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ─────────────────────────────────────────────
# OpenClaw AWS Bedrock 配置脚本 (Windows)
# ─────────────────────────────────────────────
function Write-Info($msg) { Write-Host "[信息] $msg" -ForegroundColor Cyan }
function Write-Ok($msg) { Write-Host "[完成] $msg" -ForegroundColor Green }
function Write-Warn($msg) { Write-Host "[警告] $msg" -ForegroundColor Yellow }
function Write-Err($msg) { Write-Host "[错误] $msg" -ForegroundColor Red; throw $msg }
try {
Write-Host ""
Write-Host "========================================" -ForegroundColor White
Write-Host " OpenClaw AWS Bedrock 配置器 (Windows)" -ForegroundColor White
Write-Host "========================================" -ForegroundColor White
Write-Host ""
# ─────────────────────────────────────────────
# 步骤 1: 检查 OpenClaw
# ─────────────────────────────────────────────
Write-Info "正在检查 OpenClaw 安装..."
try {
$null = Get-Command openclaw -ErrorAction Stop
Write-Ok "已找到 OpenClaw。"
} catch {
Write-Err "未找到 OpenClaw。请先运行安装脚本`niwr -useb https://github.carrydelahaye.work/openclaw/openclaw-setup-cn/raw/branch/main/install-windows.ps1 | iex"
}
# ─────────────────────────────────────────────
# 步骤 2: 获取 AWS 凭证
# ─────────────────────────────────────────────
$openclawDir = Join-Path $env:USERPROFILE ".openclaw"
$envFile = Join-Path $openclawDir ".env"
$configFile = Join-Path $openclawDir "openclaw.json"
$skipInput = $false
if (Test-Path $envFile) {
$envContent = Get-Content $envFile -Raw
if ($envContent -match "AWS_ACCESS_KEY_ID") {
Write-Warn "检测到已存在 AWS 凭证配置"
$useExisting = Read-Host "是否使用现有凭证? [Y/n]"
if ($useExisting -ne "n" -and $useExisting -ne "N") {
$skipInput = $true
# 加载现有凭证
foreach ($line in (Get-Content $envFile)) {
if ($line -match '^\s*export\s+(\w+)="?([^"]*)"?') {
[Environment]::SetEnvironmentVariable($Matches[1], $Matches[2], "Process")
}
}
Write-Ok "使用现有凭证"
}
}
}
if (-not $skipInput) {
Write-Info "请输入你的 AWS Access Key ID"
Write-Host "(从 IAM 控制台获取)" -ForegroundColor Yellow
$accessKey = Read-Host
if ([string]::IsNullOrWhiteSpace($accessKey)) {
Write-Err "AWS Access Key ID 不能为空"
}
Write-Info "请输入你的 AWS Secret Access Key"
$secretKey = Read-Host -AsSecureString
$secretKeyPlain = [Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($secretKey)
)
if ([string]::IsNullOrWhiteSpace($secretKeyPlain)) {
Write-Err "AWS Secret Access Key 不能为空"
}
Write-Info "请输入 AWS 区域 (默认: us-west-2)"
$region = Read-Host
if ([string]::IsNullOrWhiteSpace($region)) {
$region = "us-west-2"
}
$env:AWS_ACCESS_KEY_ID = $accessKey
$env:AWS_SECRET_ACCESS_KEY = $secretKeyPlain
$env:AWS_REGION = $region
Write-Ok "已获取 AWS 凭证"
}
# ─────────────────────────────────────────────
# 步骤 3: 创建环境变量文件
# ─────────────────────────────────────────────
if (-not $skipInput) {
Write-Info "正在创建 $envFile..."
if (-not (Test-Path $openclawDir)) {
New-Item -ItemType Directory -Path $openclawDir -Force | Out-Null
}
# 备份
if (Test-Path $envFile) {
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
Copy-Item $envFile "$envFile.backup.$timestamp"
Write-Warn "已备份现有 .env 文件"
}
$envContent = @"
# AWS Bedrock Credentials
export AWS_ACCESS_KEY_ID="$($env:AWS_ACCESS_KEY_ID)"
export AWS_SECRET_ACCESS_KEY="$($env:AWS_SECRET_ACCESS_KEY)"
export AWS_REGION="$($env:AWS_REGION)"
"@
Set-Content -Path $envFile -Value $envContent -Encoding UTF8
Write-Ok "已创建环境变量文件"
}
# ─────────────────────────────────────────────
# 步骤 4: 配置 openclaw.json
# ─────────────────────────────────────────────
Write-Info "正在配置 $configFile..."
# 备份
if (Test-Path $configFile) {
$timestamp = Get-Date -Format "yyyyMMddHHmmss"
Copy-Item $configFile "$configFile.backup.$timestamp"
Write-Warn "已备份现有 openclaw.json 文件"
}
$awsRegion = if ($env:AWS_REGION) { $env:AWS_REGION } else { "us-west-2" }
$configContent = @"
{
"gateway": {
"mode": "local"
},
"models": {
"providers": {
"amazon-bedrock": {
"baseUrl": "https://bedrock-runtime.$awsRegion.amazonaws.com",
"api": "bedrock-converse-stream",
"auth": "aws-sdk",
"models": [
{
"id": "global.anthropic.claude-opus-4-6-v1",
"name": "Claude Opus 4.6 (Bedrock)",
"reasoning": true,
"input": ["text", "image"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 200000,
"maxTokens": 8192
},
{
"id": "global.anthropic.claude-opus-4-5-20251001-v1:0",
"name": "Claude Opus 4.5 (Bedrock)",
"reasoning": true,
"input": ["text", "image"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 200000,
"maxTokens": 8192
},
{
"id": "global.anthropic.claude-sonnet-4-5-20250929-v1:0",
"name": "Claude Sonnet 4.5 (Bedrock)",
"reasoning": true,
"input": ["text", "image"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 200000,
"maxTokens": 8192
},
{
"id": "global.anthropic.claude-haiku-4-5-20251001-v1:0",
"name": "Claude Haiku 4.5 (Bedrock)",
"reasoning": false,
"input": ["text", "image"],
"cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
"contextWindow": 200000,
"maxTokens": 8192
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "amazon-bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0"
}
}
}
}
"@
Set-Content -Path $configFile -Value $configContent -Encoding UTF8
Write-Ok "已配置 openclaw.json"
# ─────────────────────────────────────────────
# 步骤 5: 设置环境变量到当前会话
# ─────────────────────────────────────────────
Write-Info "正在设置环境变量..."
# 设置为用户级环境变量(持久化)
[Environment]::SetEnvironmentVariable("AWS_ACCESS_KEY_ID", $env:AWS_ACCESS_KEY_ID, "User")
[Environment]::SetEnvironmentVariable("AWS_SECRET_ACCESS_KEY", $env:AWS_SECRET_ACCESS_KEY, "User")
[Environment]::SetEnvironmentVariable("AWS_REGION", $env:AWS_REGION, "User")
Write-Ok "已设置用户环境变量(新 PowerShell 窗口自动生效)"
# ─────────────────────────────────────────────
# 步骤 6: 完成
# ─────────────────────────────────────────────
Write-Host ""
Write-Host "========================================" -ForegroundColor Green
Write-Host " 配置完成!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host ""
Write-Host " 配置摘要:" -ForegroundColor White
Write-Host " Provider: AWS Bedrock" -ForegroundColor Cyan
Write-Host " Region: $awsRegion" -ForegroundColor Cyan
Write-Host " 默认模型: Claude Sonnet 4.5" -ForegroundColor Cyan
Write-Host " 已配置模型:" -ForegroundColor White
Write-Host " * Claude Opus 4.6" -ForegroundColor Cyan
Write-Host " * Claude Opus 4.5" -ForegroundColor Cyan
Write-Host " * Claude Sonnet 4.5" -ForegroundColor Cyan
Write-Host " * Claude Haiku 4.5" -ForegroundColor Cyan
Write-Host ""
Write-Host " 使用方法:" -ForegroundColor White
Write-Host " cd 你的项目路径" -ForegroundColor Gray
Write-Host " openclaw" -ForegroundColor Cyan
Write-Host ""
Write-Host " 测试连接:" -ForegroundColor White
Write-Host " openclaw agent --session-id test --message `"Say OK`" --local" -ForegroundColor Cyan
Write-Host ""
Write-Host " 所需 IAM 权限:" -ForegroundColor White
Write-Host " * bedrock:InvokeModel" -ForegroundColor Yellow
Write-Host " * bedrock:InvokeModelWithResponseStream" -ForegroundColor Yellow
Write-Host " 或使用托管策略AmazonBedrockFullAccess" -ForegroundColor Yellow
Write-Host ""
} catch {
Write-Host ""
Write-Host "[错误] 脚本执行失败: $_" -ForegroundColor Red
Write-Host ""
} finally {
Write-Host ""
Read-Host "按 Enter 键关闭此窗口"
}