OpenClaw 多Key轮询配置完全指南(含Tailscale Serve)

 📋 文章概述

本文将详细介绍如何在OpenClaw 3.8中配置多个NVIDIA API Key实现自动轮询,解决API限流(429)问题,并确保Control UI通过Tailscale Serve实现无端口访问。包含完整的脚本和配置说明。


🎯 解决的问题

  1. API限流(429错误):单个API Key有速率限制(NVIDIA 40 RPM)
  2. 多Key自动轮询:5个Key循环使用,提升至200 RPM
  3. Control UI访问:配置主Key让Web界面正常工作
  4. 跨网络访问:通过Tailscale Serve实现优雅的无端口HTTPS访问

📁 文件结构

text

~/.openclaw/
├── openclaw.json              # 主配置文件(包含gateway和默认Key)
└── agents/main/agent/
    ├── auth-profiles.json     # 多Key认证配置(5个Key)
    └── models.json            # 模型配置

🔧 核心配置详解

1. 主配置文件 openclaw.json

json

{
  "gateway": {
    "mode": "local",           // 本地模式
    "port": 18789,             // 网关端口(Tailscale Serve会转发)
    "bind": "0.0.0.0",         // 监听所有接口
    "controlUi": {
      "allowedOrigins": ["*"]   // 允许所有来源
    }
  },
  "models": {
    "providers": {
      "nvidia": {
        "baseUrl": "https://integrate.api.nvidia.com/v1",
        "apiKey": "nvapi-xxxx...",  // 默认Key(用于Control UI)
        "api": "openai-completions",
        "models": [
          { 
            "id": "moonshotai/kimi-k2.5", 
            "name": "Kimi K2.5" 
          }
        ]
      }
    }
  },
  "agents": {
    "main": {
      "model": {
        "primary": "nvidia/moonshotai/kimi-k2.5"  // 默认模型
      }
    }
  }
}

2. 多Key认证配置 auth-profiles.json

json

{
  "profiles": {
    "nvidia": {
      "type": "api_key",
      "provider": "openai",
      "key": "nvapi-key1..."  // Key 1
    },
    "nvidia-key2": {
      "type": "api_key",
      "provider": "openai",
      "key": "nvapi-key2..."  // Key 2
    },
    "nvidia-key3": {
      "type": "api_key",
      "provider": "openai",
      "key": "nvapi-key3..."  // Key 3
    },
    "nvidia-key4": {
      "type": "api_key",
      "provider": "openai",
      "key": "nvapi-key4..."  // Key 4
    },
    "nvidia-key5": {
      "type": "api_key",
      "provider": "openai",
      "key": "nvapi-key5..."  // Key 5
    }
  }
}

🚀 一键安装脚本

nvidia-5key-setup.sh

bash

#!/bin/bash

# ================================================
# NVIDIA 5 Key 一键配置脚本
# 适用版本: OpenClaw 2026.3.8
# 功能: 配置5个Key自动轮询 + Tailscale Serve无端口访问
# ================================================

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 显示Banner
clear
echo -e "${BLUE}┌─────────────────────────────────────────────┐${NC}"
echo -e "${BLUE}│${GREEN}  NVIDIA 5 Key 一键配置脚本${NC}"
echo -e "${BLUE}│${YELLOW}  OpenClaw 2026.3.8 + Tailscale Serve${NC}"
echo -e "${BLUE}└─────────────────────────────────────────────┘${NC}"
echo ""

# ================================================
# 第1步:检查环境
# ================================================
echo -e "${YELLOW}[1/7] 检查环境...${NC}"

if ! command -v openclaw &> /dev/null; then
    echo -e "${RED}❌ OpenClaw未安装${NC}"
    exit 1
fi

if ! command -v tailscale &> /dev/null; then
    echo -e "${YELLOW}⚠️ Tailscale未安装,将只配置基础功能${NC}"
fi

# ================================================
# 第2步:配置Gateway
# ================================================
echo -e "${YELLOW}[2/7] 配置Gateway...${NC}"

# 停止所有OpenClaw进程
pkill -f openclaw 2>/dev/null
sleep 2

# 创建目录
mkdir -p ~/.openclaw/agents/main/agent

# 备份现有配置
if [ -f ~/.openclaw/openclaw.json ]; then
    cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$(date +%s)
    echo -e "${GREEN}✅ 已备份原有配置${NC}"
fi

# ================================================
# 第3步:输入5个NVIDIA API Key
# ================================================
echo -e "${YELLOW}[3/7] 配置NVIDIA API Keys...${NC}"
echo -e "${CYAN}请准备你的5个NVIDIA API Key${NC}"
echo ""

read -p "输入 Key 1 (nvidia): " KEY1
read -p "输入 Key 2 (nvidia-key2): " KEY2
read -p "输入 Key 3 (nvidia-key3): " KEY3
read -p "输入 Key 4 (nvidia-key4): " KEY4
read -p "输入 Key 5 (nvidia-key5): " KEY5

# 创建auth-profiles.json(5个Key)
cat > ~/.openclaw/agents/main/agent/auth-profiles.json << EOF
{
  "profiles": {
    "nvidia": {
      "type": "api_key",
      "provider": "openai",
      "key": "$KEY1"
    },
    "nvidia-key2": {
      "type": "api_key",
      "provider": "openai",
      "key": "$KEY2"
    },
    "nvidia-key3": {
      "type": "api_key",
      "provider": "openai",
      "key": "$KEY3"
    },
    "nvidia-key4": {
      "type": "api_key",
      "provider": "openai",
      "key": "$KEY4"
    },
    "nvidia-key5": {
      "type": "api_key",
      "provider": "openai",
      "key": "$KEY5"
    }
  }
}
EOF

echo -e "${GREEN}✅ API Keys配置完成${NC}"
echo ""

# ================================================
# 第4步:创建主配置文件(含默认Key)
# ================================================
echo -e "${YELLOW}[4/7] 创建主配置文件...${NC}"

cat > ~/.openclaw/openclaw.json << EOF
{
  "gateway": {
    "mode": "local",
    "port": 18789,
    "bind": "0.0.0.0",
    "controlUi": {
      "allowedOrigins": ["*"]
    }
  },
  "models": {
    "providers": {
      "nvidia": {
        "baseUrl": "https://integrate.api.nvidia.com/v1",
        "apiKey": "$KEY1",
        "api": "openai-completions",
        "models": [
          { "id": "moonshotai/kimi-k2.5", "name": "Kimi K2.5" }
        ]
      }
    }
  },
  "agents": {
    "main": {
      "model": {
        "primary": "nvidia/moonshotai/kimi-k2.5"
      }
    }
  }
}
EOF

echo -e "${GREEN}✅ 主配置文件创建完成${NC}"
echo ""

# ================================================
# 第5步:创建轮询脚本
# ================================================
echo -e "${YELLOW}[5/7] 创建轮询脚本...${NC}"

cat > /usr/local/bin/nvidia-chat << 'EOF'
#!/bin/bash

# NVIDIA 5 Key 轮询脚本
# 使用方法: nvidia-chat "你的问题"

GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

PROFILES=("nvidia" "nvidia-key2" "nvidia-key3" "nvidia-key4" "nvidia-key5")
TOTAL_KEYS=${#PROFILES[@]}

# 计数器文件
COUNTER_FILE="/tmp/nvidia_key_counter"

# 初始化计数器
if [ ! -f "$COUNTER_FILE" ]; then
    echo "0" > "$COUNTER_FILE"
fi

# 读取当前计数
COUNT=$(cat "$COUNTER_FILE" 2>/dev/null || echo "0")
INDEX=$((COUNT % TOTAL_KEYS))
NEXT_COUNT=$((COUNT + 1))
echo "$NEXT_COUNT" > "$COUNTER_FILE"

# 选择的profile
SELECTED_PROFILE="${PROFILES[$INDEX]}"

# 显示信息
echo -e "${BLUE}┌────────────────────────────────────┐${NC}"
echo -e "${BLUE}│${GREEN}  NVIDIA 5 Key 轮询${NC}"
echo -e "${BLUE}├────────────────────────────────────┤${NC}"
echo -e "${BLUE}│${YELLOW}  🔑 Key $((INDEX+1))/$TOTAL_KEYS: $SELECTED_PROFILE${NC}"
echo -e "${BLUE}│${YELLOW}  📝 问题: $*${NC}"
echo -e "${BLUE}└────────────────────────────────────┘${NC}"
echo ""

# 调用OpenClaw
OPENCLAW_AUTH_PROFILE="$SELECTED_PROFILE" openclaw agent --agent main --message "$*"

# 失败时自动切换
if [ $? -ne 0 ]; then
    COUNT=$(cat "$COUNTER_FILE")
    echo "$((COUNT + 1))" > "$COUNTER_FILE"
fi
EOF

chmod +x /usr/local/bin/nvidia-chat
echo -e "${GREEN}✅ 创建: /usr/local/bin/nvidia-chat${NC}"

# ================================================
# 第6步:配置Tailscale Serve(关键步骤)
# ================================================
echo -e "${YELLOW}[6/7] 配置Tailscale Serve...${NC}"

if command -v tailscale &> /dev/null; then
    # 后台运行Tailscale Serve,将18789端口转发到标准HTTPS端口
    tailscale serve --bg 18789
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}✅ Tailscale Serve配置成功${NC}"
        
        # 获取Tailscale域名
        TS_DOMAIN=$(tailscale status --json 2>/dev/null | grep -o '"Domain":"[^"]*"' | head -1 | cut -d'"' -f4)
        if [ -z "$TS_DOMAIN" ]; then
            TS_DOMAIN=$(hostname -f 2>/dev/null)
        fi
    else
        echo -e "${RED}❌ Tailscale Serve配置失败${NC}"
    fi
else
    echo -e "${YELLOW}⚠️ Tailscale未安装,跳过Serve配置${NC}"
fi
echo ""

# ================================================
# 第7步:创建测试脚本
# ================================================
echo -e "${YELLOW}[7/7] 创建测试脚本...${NC}"

cat > ~/test-nvidia-keys.sh << 'EOF'
#!/bin/bash

GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}   NVIDIA 5 Key 测试脚本${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""

PROFILES=("nvidia" "nvidia-key2" "nvidia-key3" "nvidia-key4" "nvidia-key5")
SUCCESS=0
FAIL=0

for i in "${!PROFILES[@]}"; do
    profile="${PROFILES[$i]}"
    echo -e "${YELLOW}测试 Key $((i+1)): $profile${NC}"
    echo "------------------------"
    
    response=$(OPENCLAW_AUTH_PROFILE="$profile" openclaw agent --agent main --message "Hello, respond with OK" 2>&1)
    
    if [[ "$response" == *"OK"* ]] || [[ "$response" != *"Error"* ]]; then
        echo -e "${GREEN}✅ 成功${NC}"
        SUCCESS=$((SUCCESS + 1))
    else
        echo -e "${RED}❌ 失败${NC}"
        FAIL=$((FAIL + 1))
    fi
    echo "------------------------"
    echo ""
done

echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}测试结果: 成功 $SUCCESS, 失败 $FAIL${NC}"
echo -e "${BLUE}========================================${NC}"
EOF

chmod +x ~/test-nvidia-keys.sh
echo -e "${GREEN}✅ 创建: ~/test-nvidia-keys.sh${NC}"
echo ""

# ================================================
# 启动Gateway
# ================================================
echo -e "${YELLOW}启动Gateway...${NC}"
openclaw gateway > /tmp/gateway.log 2>&1 &
sleep 3

# ================================================
# 添加别名到bashrc
# ================================================
cat >> ~/.bashrc << 'EOF'

# NVIDIA 5 Key 别名
alias nvidia-chat='/usr/local/bin/nvidia-chat'
alias nvidia-test='~/test-nvidia-keys.sh'
alias nvidia-status='openclaw models list && echo "" && curl -s http://127.0.0.1:18789/health'
alias nvidia-serve='tailscale serve --bg 18789'
alias nvidia-serve-status='tailscale serve status'
EOF

# ================================================
# 显示完成信息
# ================================================
echo ""
echo -e "${BLUE}┌─────────────────────────────────────────────┐${NC}"
echo -e "${BLUE}│${GREEN}  ✅ 安装完成!${NC}"
echo -e "${BLUE}├─────────────────────────────────────────────┤${NC}"
echo -e "${BLUE}│${YELLOW}  可用命令:${NC}"
echo -e "${BLUE}│${NC}  nvidia-chat '你的问题'   ${GREEN}# 轮询使用5个Key${NC}"
echo -e "${BLUE}│${NC}  nvidia-test              ${GREEN}# 测试所有Key${NC}"
echo -e "${BLUE}│${NC}  nvidia-status            ${GREEN}# 查看状态${NC}"
echo -e "${BLUE}│${NC}  nvidia-serve             ${GREEN}# 配置Tailscale Serve${NC}"
echo -e "${BLUE}│${NC}  nvidia-serve-status      ${GREEN}# 查看Serve状态${NC}"
echo -e "${BLUE}├─────────────────────────────────────────────┤${NC}"
echo -e "${BLUE}│${YELLOW}  🌐 Control UI 访问(无需端口):${NC}"
if [ -n "$TS_DOMAIN" ]; then
    echo -e "${BLUE}│${GREEN}  https://$TS_DOMAIN${NC}"
else
    TS_IP=$(tailscale ip 2>/dev/null | head -1)
    if [ -n "$TS_IP" ]; then
        echo -e "${BLUE}│${GREEN}  https://$TS_IP${NC}"
    else
        echo -e "${BLUE}│${YELLOW}  请运行: tailscale serve --bg 18789${NC}"
    fi
fi
echo -e "${BLUE}├─────────────────────────────────────────────┤${NC}"
echo -e "${BLUE}│${YELLOW}  使用前刷新: source ~/.bashrc${NC}"
echo -e "${BLUE}└─────────────────────────────────────────────┘${NC}"

📖 使用说明

1. 运行安装脚本

bash

# 创建脚本
nano nvidia-5key-setup.sh
# 粘贴上面的脚本内容

# 给执行权限
chmod +x nvidia-5key-setup.sh

# 运行
./nvidia-5key-setup.sh

2. 日常使用命令

bash

# 刷新环境变量
source ~/.bashrc

# 轮询聊天(自动切换5个Key)
nvidia-chat "你好,请介绍一下自己"

# 测试所有Key
nvidia-test

# 查看状态
nvidia-status

# 手动指定使用某个Key
OPENCLAW_AUTH_PROFILE=nvidia-key3 openclaw agent --agent main --message "你的问题"

# 查看当前计数
cat /tmp/nvidia_key_counter

# 重置计数器
echo "0" > /tmp/nvidia_key_counter

3. Tailscale Serve 管理

bash

# 配置Tailscale Serve(如果脚本未自动配置)
nvidia-serve

# 查看Serve状态
nvidia-serve-status

# 停止Serve
tailscale serve --bg=false 18789

# 查看所有Serve配置
tailscale serve status --all

4. Control UI 访问(无需端口号)

配置好Tailscale Serve后,在任何Tailscale网络内的设备上,直接访问:

text

https://你的VPS_Tailscale域名

例如:

text

https://x162-43-92-249.tail9c4209.ts.net

无需加端口号! Tailscale Serve会自动将HTTPS流量转发到VPS的18789端口。


🔍 工作原理详解

多Key轮询流程

  1. 计数器维护/tmp/nvidia_key_counter 记录当前使用的Key索引
  2. 轮询算法:每次请求索引+1,5个Key循环使用
  3. 环境变量覆盖OPENCLAW_AUTH_PROFILE 指定使用的profile
  4. 失败切换:请求失败自动切换到下一个Key

Tailscale Serve 工作原理

text

用户访问 https://x162-43-92-249.tail9c4209.ts.net
                    ↓
        Tailscale 网络(加密隧道)
                    ↓
        VPS 上的 Tailscale Serve 服务
                    ↓
        转发到本地 18789 端口(OpenClaw)
                    ↓
        OpenClaw Gateway 处理请求

优势

  • ✅ 自动HTTPS:Tailscale提供免费SSL证书
  • ✅ 无需端口号:使用标准443端口
  • ✅ 安全加密:所有流量经过Tailscale加密
  • ✅ 无需开放防火墙:通过Tailscale网络传输

配置优先级

text

OPENCLAW_AUTH_PROFILE 环境变量  >  auth-profiles.json  >  openclaw.json 默认Key

✅ 验证轮询效果

bash

# 连续发送10次请求,观察Key轮换
for i in {1..10}; do
    echo "=== 请求 $i ==="
    nvidia-chat "OK" | grep "Key"
    sleep 1
done

预期输出:

text

=== 请求 1 ===
│  🔑 Key 1/5: nvidia
=== 请求 2 ===
│  🔑 Key 2/5: nvidia-key2
=== 请求 3 ===
│  🔑 Key 3/5: nvidia-key3
...
=== 请求 6 ===
│  🔑 Key 1/5: nvidia  (循环回来)

✅ 验证Tailscale Serve

bash

# 在VPS上查看Serve状态
tailscale serve status

# 预期输出:
# https://x162-43-92-249.tail9c4209.ts.net/ -> http://127.0.0.1:18789

# 在另一台电脑上测试访问(无需端口)
curl -v https://x162-43-92-249.tail9c4209.ts.net/health
# 应该返回 200 OK

⚠️ 注意事项

Tailscale Serve 要点

  1. 首次运行tailscale serve --bg 18789 需要在VPS上执行一次
  2. 自动HTTPS:Tailscale会自动申请和续期Let’s Encrypt证书
  3. 后台运行--bg 参数让Serve在后台持续运行
  4. 重启后自动恢复:Tailscale Serve配置会持久化

安全性考虑

  1. 生产环境:建议设置 gateway.auth.mode token 并配置具体 allowedOrigins
  2. Tailscale网络:只有加入你的Tailscale网络的设备才能访问
  3. API Key安全:不要将包含真实Key的配置文件提交到代码仓库

故障排除

问题解决方案
403错误检查 allowedOrigins 是否包含 * 或具体域名
Gateway启动失败openclaw doctor --fix 修复配置
Key测试失败检查API Key是否有效、余额是否充足
Tailscale Serve无效tailscale serve status 查看状态,重新运行 tailscale serve --bg 18789
HTTPS证书问题Tailscale自动处理,等待几分钟或重启tailscale

各服务商速率限制

服务商单Key限制5 Key轮询理论值
NVIDIA40 RPM200 RPM
Groq30 RPM150 RPM
OpenRouter20 RPM100 RPM
智谱视套餐而定5倍提升

🎯 方案优势总结

通过本方案,你可以获得:

  1. ✅ 突破API限流:5个Key自动轮询,请求能力提升5倍
  2. ✅ Control UI正常工作:主配置文件中的默认Key确保Web界面可用
  3. ✅ 简单易用nvidia-chat 一键命令,自动处理Key轮换
  4. ✅ Tailscale Serve集成:实现无端口HTTPS访问,体验完美
  5. ✅ 自动HTTPS加密:所有流量通过Tailscale加密传输
  6. ✅ 无需开放防火墙:利用Tailscale安全网络
  7. ✅ 易于扩展:可轻松修改脚本支持其他服务商(Groq、OpenRouter等)

📚 参考资料

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注