OpenClaw 多Key轮询配置完全指南(含Tailscale Serve)
📋 文章概述
本文将详细介绍如何在OpenClaw 3.8中配置多个NVIDIA API Key实现自动轮询,解决API限流(429)问题,并确保Control UI通过Tailscale Serve实现无端口访问。包含完整的脚本和配置说明。
🎯 解决的问题
- API限流(429错误):单个API Key有速率限制(NVIDIA 40 RPM)
- 多Key自动轮询:5个Key循环使用,提升至200 RPM
- Control UI访问:配置主Key让Web界面正常工作
- 跨网络访问:通过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轮询流程
- 计数器维护:
/tmp/nvidia_key_counter记录当前使用的Key索引 - 轮询算法:每次请求索引+1,5个Key循环使用
- 环境变量覆盖:
OPENCLAW_AUTH_PROFILE指定使用的profile - 失败切换:请求失败自动切换到下一个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 要点
- 首次运行:
tailscale serve --bg 18789需要在VPS上执行一次 - 自动HTTPS:Tailscale会自动申请和续期Let’s Encrypt证书
- 后台运行:
--bg参数让Serve在后台持续运行 - 重启后自动恢复:Tailscale Serve配置会持久化
安全性考虑
- 生产环境:建议设置
gateway.auth.mode token并配置具体allowedOrigins - Tailscale网络:只有加入你的Tailscale网络的设备才能访问
- 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轮询理论值 |
|---|---|---|
| NVIDIA | 40 RPM | 200 RPM |
| Groq | 30 RPM | 150 RPM |
| OpenRouter | 20 RPM | 100 RPM |
| 智谱 | 视套餐而定 | 5倍提升 |
🎯 方案优势总结
通过本方案,你可以获得:
- ✅ 突破API限流:5个Key自动轮询,请求能力提升5倍
- ✅ Control UI正常工作:主配置文件中的默认Key确保Web界面可用
- ✅ 简单易用:
nvidia-chat一键命令,自动处理Key轮换 - ✅ Tailscale Serve集成:实现无端口HTTPS访问,体验完美
- ✅ 自动HTTPS加密:所有流量通过Tailscale加密传输
- ✅ 无需开放防火墙:利用Tailscale安全网络
- ✅ 易于扩展:可轻松修改脚本支持其他服务商(Groq、OpenRouter等)
📚 参考资料
- OpenClaw官方文档:https://docs.openclaw.ai
- NVIDIA API文档:https://build.nvidia.com
- Tailscale文档:https://tailscale.com/kb
- Tailscale Serve介绍:https://tailscale.com/kb/1312/serve
