/openclaw-llm 命令用于自动测试可用的 ModelScope 模型并配置 OpenClaw 使用第一个可用的模型,解决模型频率限制或不可用的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
---
description: 自动测试并配置 OpenClaw 的默认 ModelScope 模型
---

# 任务: 自动配置 OpenClaw 的 ModelScope 模型

你需要自动测试可用的 ModelScope 模型,并配置 OpenClaw 使用第一个可用的模型。

**第一步: 测试可用模型**

1. 执行脚本 `bash ~/bash_scripts/test_ms_llm.sh` 测试所有 ModelScope 模型
2. 查看脚本输出,找到"可用模型配置信息"部分
3. 从输出中提取:
- `base_url` 的值
- `api_key` 的值
- 第一个可用的 `MODEL_NAME`
4. 如果没有可用模型,提示用户并终止任务

**第二步: 读取当前配置**

1. 读取 `~/.openclaw/openclaw.json` 文件
2. 解析 JSON 内容,检查当前的 modelscope 配置

**第三步: 更新配置**

根据 OpenClaw 的实际配置结构,更新以下部分:

1. 更新 `models.providers.modelscope` 部分:
- `models.providers.modelscope.baseUrl`: (从测试脚本输出提取的 base_url)
- `models.providers.modelscope.apiKey`: (从测试脚本输出提取的 api_key)
- 保持 `models.providers.modelscope.api` 为 "openai-completions"
- 保持 `models.providers.modelscope.models` 数组不变

2. 更新 `agents.defaults.model.primary` 字段:
- 设置为 `"modelscope/第一个可用模型名称"`
- 例如:如果第一个可用模型是 `Qwen/Qwen3.5-122B-A10B`,则设置为 `"modelscope/Qwen/Qwen3.5-122B-A10B"`

**第四步: 保存配置**

1. 将更新后的配置写回 `~/.openclaw/openclaw.json`
2. 确保 JSON 格式正确,使用 2 空格缩进

**第五步: 重启网关**

1. 执行 `openclaw gateway restart` 重启 OpenClaw Gateway
2. 等待重启完成

**第六步: 确认完成**

1. 向用户展示更新后的 modelscope 配置部分
2. 显示选择的模型名称
3. 确认网关已重启

请开始执行。

测试脚本

该命令依赖 ~/bash_scripts/test_ms_llm.sh 脚本来测试模型可用性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/bash

# API配置
BASE_URL="https://api-inference.modelscope.cn/v1/chat/completions"
API_KEY="ms-************************************"

# 模型列表(按性能从强到弱排序)
MODELS=(
"Qwen/Qwen3.5-397B-A17B" # Qwen 最强 MoE 模型 (397B)
"deepseek-ai/DeepSeek-V3.2" # DeepSeek V3.2
"Qwen/Qwen3.5-122B-A10B" # Qwen 中等 MoE 模型 (122B)
"ZhipuAI/GLM-5" # 智谱 GLM-5
"moonshotai/Kimi-K2.5" # Kimi K2.5
"MiniMax/MiniMax-M2.5" # MiniMax M2.5
"Qwen/Qwen3-Coder-Next" # Qwen 代码专用模型
)

echo "开始测试模型可用性..."

# 存储可用的模型
AVAILABLE_MODELS=()

# 测试每个模型
for MODEL in "${MODELS[@]}"; do
echo -n "${MODEL}:"

# 发送请求(设置30秒超时)
RESPONSE=$(curl -s -w "\n%{http_code}" --max-time 30 -X POST "${BASE_URL}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_KEY}" \
-d "{
\"model\": \"${MODEL}\",
\"messages\": [
{
\"role\": \"user\",
\"content\": \"请只回复:我能用!\"
}
],
\"max_tokens\": 30
}" 2>&1)

# 检查curl是否成功执行
if [ $? -ne 0 ]; then
echo "请求失败(超时或网络错误)"
continue
fi

# 分离响应体和状态码
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
BODY=$(echo "$RESPONSE" | sed '$d')

# 检查HTTP状态码
if [ "$HTTP_CODE" -eq 200 ]; then
# 尝试提取模型回复内容
if command -v jq &> /dev/null; then
# 如果有jq,使用jq解析
CONTENT=$(echo "$BODY" | jq -r '.choices[0].message.content // empty' 2>/dev/null)
else
# 否则使用grep和sed
CONTENT=$(echo "$BODY" | grep -o '"content":"[^"]*"' | head -1 | sed 's/"content":"//;s/"$//' | sed 's/\\n//g')
fi

if [ -n "$CONTENT" ]; then
echo "$CONTENT"
AVAILABLE_MODELS+=("$MODEL")
else
echo "响应成功但内容为空"
fi
elif [ "$HTTP_CODE" -eq 400 ]; then
echo "HTTP 400 (Bad Request) - 请求格式错误"
elif [ "$HTTP_CODE" -eq 429 ]; then
echo "HTTP 429 (Too Many Requests) - 请求频率限制"
else
# 提取错误信息
if command -v jq &> /dev/null; then
ERROR=$(echo "$BODY" | jq -r '.message // .error // .error.message // empty' 2>/dev/null)
else
ERROR=$(echo "$BODY" | grep -o '"message":"[^"]*"' | head -1 | sed 's/"message":"//;s/"$//')
if [ -z "$ERROR" ]; then
ERROR=$(echo "$BODY" | grep -o '"error":"[^"]*"' | head -1 | sed 's/"error":"//;s/"$//')
fi
fi

if [ -z "$ERROR" ]; then
echo "HTTP ${HTTP_CODE}"
else
echo "$ERROR"
fi
fi
done

echo "测试完成!"
echo ""

# 打印可用模型的配置信息
if [ ${#AVAILABLE_MODELS[@]} -gt 0 ]; then
echo "可用模型配置信息:"
echo "base_url=\"https://api-inference.modelscope.cn/v1/\""
echo "api_key=\"${API_KEY}\""
echo ""
echo "可用的模型:"
for MODEL in "${AVAILABLE_MODELS[@]}"; do
echo "MODEL_NAME=\"${MODEL}\""
done
else
echo "没有可用的模型"
fi

使用场景

  • OpenClaw 当前配置的模型遇到频率限制(HTTP 429)
  • 需要快速切换到可用的备用模型
  • 初次配置 OpenClaw 的 ModelScope 集成
  • 定期检查和更新可用模型配置