test_models.sh.bak 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. #!/bin/bash
  2. # SGLang 多模型 curl 测试脚本
  3. # 测试模型:Qwen3-8B, Qwen3.5-35B, Qwen3.5-122B, Qwen3-Embedding-8B, Qwen3-Reranker-8B
  4. set -e
  5. # 颜色定义
  6. GREEN='\033[0;32m'
  7. RED='\033[0;31m'
  8. YELLOW='\033[1;33m'
  9. NC='\033[0m' # No Color
  10. # 模型配置
  11. declare -A MODELS=(
  12. ["qwen3-8b"]="25424|/model/Qwen3-8B|chat"
  13. ["qwen3.5-35b"]="25427|/model/Qwen3.5-35B|chat"
  14. ["qwen3.5-122b"]="25423|/model/Qwen3.5-122B-A10B|chat"
  15. ["qwen3-embedding-8b"]="25425|/model/Qwen3-Embedding-8B|embedding"
  16. ["qwen3-reranker-8b"]="25426|/model/Qwen3-Reranker-8B|rerank"
  17. )
  18. API_KEY="lq123456"
  19. TIMEOUT=30
  20. echo "========================================"
  21. echo "SGLang 多模型健康检查 (curl)"
  22. echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
  23. echo "========================================"
  24. # 测试计数器
  25. TOTAL=0
  26. SUCCESS=0
  27. # 测试对话模型
  28. test_chat_model() {
  29. local name=$1
  30. local port=$2
  31. local model_path=$3
  32. echo ""
  33. echo "----------------------------------------"
  34. echo "测试模型: $name (对话模型)"
  35. echo "端口: $port"
  36. echo "----------------------------------------"
  37. local response
  38. response=$(curl -s -w "\n%{http_code}" \
  39. --max-time $TIMEOUT \
  40. -H "Content-Type: application/json" \
  41. -H "Authorization: Bearer $API_KEY" \
  42. -d "{
  43. \"model\": \"$model_path\",
  44. \"messages\": [{\"role\": \"user\", \"content\": \"你好,请用一句话介绍自己\"}],
  45. \"temperature\": 0.7,
  46. \"max_tokens\": 50
  47. }" \
  48. "http://localhost:$port/v1/chat/completions" 2>/dev/null || echo -e "\n000")
  49. local body=$(echo "$response" | head -n -1)
  50. local code=$(echo "$response" | tail -n 1)
  51. if [ "$code" = "200" ]; then
  52. local content=$(echo "$body" | grep -o '"content":"[^"]*"' | head -1 | cut -d'"' -f4)
  53. echo -e "${GREEN}✅ 成功${NC} HTTP $code"
  54. echo "回复: ${content:0:100}..."
  55. ((SUCCESS++))
  56. else
  57. echo -e "${RED}❌ 失败${NC} HTTP $code"
  58. echo "响应: ${body:0:200}"
  59. fi
  60. ((TOTAL++))
  61. }
  62. # 测试嵌入模型
  63. test_embedding_model() {
  64. local name=$1
  65. local port=$2
  66. local model_path=$3
  67. echo ""
  68. echo "----------------------------------------"
  69. echo "测试模型: $name (嵌入模型)"
  70. echo "端口: $port"
  71. echo "----------------------------------------"
  72. local response
  73. response=$(curl -s -w "\n%{http_code}" \
  74. --max-time $TIMEOUT \
  75. -H "Content-Type: application/json" \
  76. -H "Authorization: Bearer $API_KEY" \
  77. -d "{
  78. \"model\": \"$model_path\",
  79. \"input\": [\"你好,这是一个测试句子\", \"Hello world\"]
  80. }" \
  81. "http://localhost:$port/v1/embeddings" 2>/dev/null || echo -e "\n000")
  82. local body=$(echo "$response" | head -n -1)
  83. local code=$(echo "$response" | tail -n 1)
  84. if [ "$code" = "200" ]; then
  85. local dims=$(echo "$body" | grep -o '"embedding":\[[^]]*\]' | head -1 | grep -o ',' | wc -l)
  86. dims=$((dims + 1))
  87. echo -e "${GREEN}✅ 成功${NC} HTTP $code"
  88. echo "向量维度: $dims"
  89. ((SUCCESS++))
  90. else
  91. echo -e "${YELLOW}⚠️ Embedding 接口失败,尝试 Rerank 接口...${NC}"
  92. # 尝试 rerank 接口
  93. response=$(curl -s -w "\n%{http_code}" \
  94. --max-time $TIMEOUT \
  95. -H "Content-Type: application/json" \
  96. -H "Authorization: Bearer $API_KEY" \
  97. -d "{
  98. \"model\": \"$model_path\",
  99. \"query\": \"测试查询\",
  100. \"documents\": [\"文档1\", \"文档2\"]
  101. }" \
  102. "http://localhost:$port/v1/rerank" 2>/dev/null || echo -e "\n000")
  103. code=$(echo "$response" | tail -n 1)
  104. if [ "$code" = "200" ]; then
  105. echo -e "${GREEN}✅ 成功${NC} (Rerank 接口可用)"
  106. ((SUCCESS++))
  107. else
  108. echo -e "${RED}❌ 失败${NC} HTTP $code"
  109. fi
  110. fi
  111. ((TOTAL++))
  112. }
  113. # 测试重排序模型
  114. test_rerank_model() {
  115. local name=$1
  116. local port=$2
  117. local model_path=$3
  118. echo ""
  119. echo "----------------------------------------"
  120. echo "测试模型: $name (重排序模型)"
  121. echo "端口: $port"
  122. echo "----------------------------------------"
  123. # 尝试 rerank 接口
  124. local response
  125. response=$(curl -s -w "\n%{http_code}" \
  126. --max-time $TIMEOUT \
  127. -H "Content-Type: application/json" \
  128. -H "Authorization: Bearer $API_KEY" \
  129. -d "{
  130. \"model\": \"$model_path\",
  131. \"query\": \"什么是机器学习\",
  132. \"documents\": [\"机器学习是AI的分支\", \"Python是编程语言\", \"深度学习使用神经网络\"],
  133. \"top_n\": 2
  134. }" \
  135. "http://localhost:$port/v1/rerank" 2>/dev/null || echo -e "\n000")
  136. local body=$(echo "$response" | head -n -1)
  137. local code=$(echo "$response" | tail -n 1)
  138. if [ "$code" = "200" ]; then
  139. local top_doc=$(echo "$body" | grep -o '"text":"[^"]*"' | head -1 | cut -d'"' -f4)
  140. local score=$(echo "$body" | grep -o '"relevance_score":[0-9.]*' | head -1 | cut -d':' -f2)
  141. echo -e "${GREEN}✅ 成功${NC} HTTP $code"
  142. echo "Top1: ${top_doc:0:50}... (得分: $score)"
  143. ((SUCCESS++))
  144. else
  145. echo -e "${YELLOW}⚠️ Rerank 接口失败,尝试 Chat 接口...${NC}"
  146. # 尝试作为 chat 模型
  147. response=$(curl -s -w "\n%{http_code}" \
  148. --max-time $TIMEOUT \
  149. -H "Content-Type: application/json" \
  150. -H "Authorization: Bearer $API_KEY" \
  151. -d "{
  152. \"model\": \"$model_path\",
  153. \"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],
  154. \"max_tokens\": 20
  155. }" \
  156. "http://localhost:$port/v1/chat/completions" 2>/dev/null || echo -e "\n000")
  157. code=$(echo "$response" | tail -n 1)
  158. if [ "$code" = "200" ]; then
  159. echo -e "${GREEN}✅ 成功${NC} (Chat 接口可用)"
  160. ((SUCCESS++))
  161. else
  162. echo -e "${RED}❌ 失败${NC} HTTP $code"
  163. fi
  164. fi
  165. ((TOTAL++))
  166. }
  167. # 快速检查服务是否存活
  168. quick_check() {
  169. echo ""
  170. echo "========================================"
  171. echo "快速检查模式"
  172. echo "========================================"
  173. for key in "${!MODELS[@]}"; do
  174. IFS='|' read -r port model_path mtype <<< "${MODELS[$key]}"
  175. local code
  176. code=$(curl -s -o /dev/null -w "%{http_code}" \
  177. --max-time 5 \
  178. -H "Authorization: Bearer $API_KEY" \
  179. "http://localhost:$port/v1/models" 2>/dev/null || echo "000")
  180. if [ "$code" = "200" ]; then
  181. echo -e "${GREEN}✅${NC} $key (端口 $port)"
  182. ((SUCCESS++))
  183. else
  184. echo -e "${RED}❌${NC} $key (端口 $port) HTTP $code"
  185. fi
  186. ((TOTAL++))
  187. done
  188. }
  189. # 主函数
  190. main() {
  191. # 解析参数
  192. if [ "$1" = "--quick" ]; then
  193. quick_check
  194. elif [ "$1" = "--model" ] && [ -n "$2" ]; then
  195. # 测试指定模型
  196. if [ -n "${MODELS[$2]}" ]; then
  197. IFS='|' read -r port model_path mtype <<< "${MODELS[$2]}"
  198. case $mtype in
  199. chat) test_chat_model "$2" "$port" "$model_path" ;;
  200. embedding) test_embedding_model "$2" "$port" "$model_path" ;;
  201. rerank) test_rerank_model "$2" "$port" "$model_path" ;;
  202. esac
  203. else
  204. echo "未知模型: $2"
  205. echo "可用模型: ${!MODELS[@]}"
  206. exit 1
  207. fi
  208. else
  209. # 完整测试所有模型
  210. for key in "${!MODELS[@]}"; do
  211. IFS='|' read -r port model_path mtype <<< "${MODELS[$key]}"
  212. case $mtype in
  213. chat) test_chat_model "$key" "$port" "$model_path" ;;
  214. embedding) test_embedding_model "$key" "$port" "$model_path" ;;
  215. rerank) test_rerank_model "$key" "$port" "$model_path" ;;
  216. esac
  217. done
  218. fi
  219. # 输出摘要
  220. echo ""
  221. echo "========================================"
  222. echo "测试结果摘要"
  223. echo "========================================"
  224. echo "总计: $SUCCESS / $TOTAL 个模型正常"
  225. if [ $SUCCESS -eq $TOTAL ]; then
  226. echo -e "${GREEN}所有模型运行正常!${NC}"
  227. exit 0
  228. else
  229. echo -e "${RED}部分模型异常,请检查日志${NC}"
  230. exit 1
  231. fi
  232. }
  233. # 执行
  234. main "$@"