| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- #!/bin/bash
- # SGLang 多模型 curl 测试脚本
- # 移除 set -e,避免遇到错误就终止
- # 颜色定义
- GREEN='\033[0;32m'
- RED='\033[0;31m'
- YELLOW='\033[1;33m'
- NC='\033[0m'
- # 模型配置(按顺序定义)
- MODEL_NAMES=("qwen3-8b" "qwen3.5-35b" "qwen3.5-122b" "qwen3-embedding-8b" "qwen3-reranker-8b")
- declare -A MODEL_PORTS=(
- ["qwen3-8b"]="25424"
- ["qwen3.5-35b"]="25427"
- ["qwen3.5-122b"]="25423"
- ["qwen3-embedding-8b"]="25425"
- ["qwen3-reranker-8b"]="25426"
- )
- declare -A MODEL_PATHS=(
- ["qwen3-8b"]="/model/Qwen3-8B"
- ["qwen3.5-35b"]="/model/Qwen3.5-35B"
- ["qwen3.5-122b"]="/model/Qwen3.5-122B-A10B"
- ["qwen3-embedding-8b"]="/model/Qwen3-Embedding-8B"
- ["qwen3-reranker-8b"]="/model/Qwen3-Reranker-8B"
- )
- declare -A MODEL_TYPES=(
- ["qwen3-8b"]="chat"
- ["qwen3.5-35b"]="chat"
- ["qwen3.5-122b"]="chat"
- ["qwen3-embedding-8b"]="embedding"
- ["qwen3-reranker-8b"]="rerank"
- )
- API_KEY="lq123456"
- TIMEOUT=30
- echo "========================================"
- echo "SGLang 多模型健康检查 (curl)"
- echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
- echo "========================================"
- TOTAL=0
- SUCCESS=0
- # 测试对话模型
- test_chat_model() {
- local name=$1
- local port=$2
- local model_path=$3
-
- echo ""
- echo "----------------------------------------"
- echo "测试模型: $name (对话模型)"
- echo "端口: $port"
- echo "----------------------------------------"
-
- local response
- local body
- local code
-
- response=$(curl -s -w "\n%{http_code}" \
- --max-time $TIMEOUT \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $API_KEY" \
- -d "{
- \"model\": \"$model_path\",
- \"messages\": [{\"role\": \"user\", \"content\": \"你好,请用一句话介绍自己\"}],
- \"temperature\": 0.7,
- \"max_tokens\": 50
- }" \
- "http://localhost:$port/v1/chat/completions" 2>/dev/null || echo -e "\n000")
-
- body=$(echo "$response" | head -n -1)
- code=$(echo "$response" | tail -n 1)
-
- if [ "$code" = "200" ]; then
- local content=$(echo "$body" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4)
- echo -e "${GREEN}✅ 成功${NC} HTTP $code"
- echo "回复: ${content:0:100}..."
- ((SUCCESS++))
- else
- echo -e "${RED}❌ 失败${NC} HTTP $code"
- echo "响应: ${body:0:200}"
- fi
- ((TOTAL++))
- }
- # 测试嵌入模型
- test_embedding_model() {
- local name=$1
- local port=$2
- local model_path=$3
-
- echo ""
- echo "----------------------------------------"
- echo "测试模型: $name (嵌入模型)"
- echo "端口: $port"
- echo "----------------------------------------"
-
- local response
- local body
- local code
-
- response=$(curl -s -w "\n%{http_code}" \
- --max-time $TIMEOUT \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $API_KEY" \
- -d "{
- \"model\": \"$model_path\",
- \"input\": [\"你好,这是一个测试句子\", \"Hello world\"]
- }" \
- "http://localhost:$port/v1/embeddings" 2>/dev/null || echo -e "\n000")
-
- body=$(echo "$response" | head -n -1)
- code=$(echo "$response" | tail -n 1)
-
- if [ "$code" = "200" ]; then
- local dims=$(echo "$body" | grep -o '"embedding":\[[^]]*\]' | head -1 | grep -o ',' | wc -l)
- dims=$((dims + 1))
- echo -e "${GREEN}✅ 成功${NC} HTTP $code"
- echo "向量维度: $dims"
- ((SUCCESS++))
- else
- echo -e "${YELLOW}⚠️ Embedding 接口失败,尝试 Rerank 接口...${NC}"
- response=$(curl -s -w "\n%{http_code}" \
- --max-time $TIMEOUT \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $API_KEY" \
- -d "{
- \"model\": \"$model_path\",
- \"query\": \"测试查询\",
- \"documents\": [\"文档1\", \"文档2\"]
- }" \
- "http://localhost:$port/v1/rerank" 2>/dev/null || echo -e "\n000")
-
- code=$(echo "$response" | tail -n 1)
- if [ "$code" = "200" ]; then
- echo -e "${GREEN}✅ 成功${NC} (Rerank 接口可用)"
- ((SUCCESS++))
- else
- echo -e "${RED}❌ 失败${NC} HTTP $code"
- fi
- fi
- ((TOTAL++))
- }
- # 测试重排序模型
- test_rerank_model() {
- local name=$1
- local port=$2
- local model_path=$3
-
- echo ""
- echo "----------------------------------------"
- echo "测试模型: $name (重排序模型)"
- echo "端口: $port"
- echo "----------------------------------------"
-
- local response
- local body
- local code
-
- response=$(curl -s -w "\n%{http_code}" \
- --max-time $TIMEOUT \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $API_KEY" \
- -d "{
- \"model\": \"$model_path\",
- \"query\": \"什么是机器学习\",
- \"documents\": [\"机器学习是AI的分支\", \"Python是编程语言\", \"深度学习使用神经网络\"],
- \"top_n\": 2
- }" \
- "http://localhost:$port/v1/rerank" 2>/dev/null || echo -e "\n000")
-
- body=$(echo "$response" | head -n -1)
- code=$(echo "$response" | tail -n 1)
-
- if [ "$code" = "200" ]; then
- local top_doc=$(echo "$body" | grep -o '"text":"[^"]*"' | head -1 | cut -d'"' -f4)
- local score=$(echo "$body" | grep -o '"score":[0-9.]*' | head -1 | cut -d':' -f2)
- echo -e "${GREEN}✅ 成功${NC} HTTP $code"
- echo "Top1: ${top_doc:0:50}... (得分: $score)"
- ((SUCCESS++))
- else
- echo -e "${YELLOW}⚠️ Rerank 接口失败,尝试 Chat 接口...${NC}"
- response=$(curl -s -w "\n%{http_code}" \
- --max-time $TIMEOUT \
- -H "Content-Type: application/json" \
- -H "Authorization: Bearer $API_KEY" \
- -d "{
- \"model\": \"$model_path\",
- \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],
- \"max_tokens\": 20
- }" \
- "http://localhost:$port/v1/chat/completions" 2>/dev/null || echo -e "\n000")
-
- code=$(echo "$response" | tail -n 1)
- if [ "$code" = "200" ]; then
- echo -e "${GREEN}✅ 成功${NC} (Chat 接口可用)"
- ((SUCCESS++))
- else
- echo -e "${RED}❌ 失败${NC} HTTP $code"
- fi
- fi
- ((TOTAL++))
- }
- # 快速检查
- quick_check() {
- echo ""
- echo "========================================"
- echo "快速检查模式"
- echo "========================================"
-
- for key in "${MODEL_NAMES[@]}"; do
- local port=${MODEL_PORTS[$key]}
-
- local code
- code=$(curl -s -o /dev/null -w "%{http_code}" \
- --max-time 5 \
- -H "Authorization: Bearer $API_KEY" \
- "http://localhost:$port/v1/models" 2>/dev/null || echo "000")
-
- if [ "$code" = "200" ]; then
- echo -e "${GREEN}✅${NC} $key (端口 $port)"
- ((SUCCESS++))
- else
- echo -e "${RED}❌${NC} $key (端口 $port) HTTP $code"
- fi
- ((TOTAL++))
- done
- }
- # 主函数
- main() {
- if [ "$1" = "--quick" ]; then
- quick_check
- elif [ "$1" = "--model" ] && [ -n "$2" ]; then
- local key=$2
- local port=${MODEL_PORTS[$key]}
- local path=${MODEL_PATHS[$key]}
- local mtype=${MODEL_TYPES[$key]}
-
- case $mtype in
- chat) test_chat_model "$key" "$port" "$path" ;;
- embedding) test_embedding_model "$key" "$port" "$path" ;;
- rerank) test_rerank_model "$key" "$port" "$path" ;;
- esac
- else
- # 按顺序测试所有模型
- for key in "${MODEL_NAMES[@]}"; do
- local port=${MODEL_PORTS[$key]}
- local path=${MODEL_PATHS[$key]}
- local mtype=${MODEL_TYPES[$key]}
-
- case $mtype in
- chat) test_chat_model "$key" "$port" "$path" ;;
- embedding) test_embedding_model "$key" "$port" "$path" ;;
- rerank) test_rerank_model "$key" "$port" "$path" ;;
- esac
- done
- fi
-
- echo ""
- echo "========================================"
- echo "测试结果摘要"
- echo "========================================"
- echo "总计: $SUCCESS / $TOTAL 个模型正常"
-
- if [ $SUCCESS -eq $TOTAL ]; then
- echo -e "${GREEN}所有模型运行正常!${NC}"
- exit 0
- else
- echo -e "${RED}部分模型异常,请检查日志${NC}"
- exit 1
- fi
- }
- main "$@"
|