Files
agent_management/scripts/test_search_agent.sh
T
zhanggangyong 33955b68dc fix: 统一 agent 默认端口为 8000(search_agent 系列保持 8080)
- 修改 template_manager.py、k8s_manager.py 中的端口映射
- 更新 jina_search_agent、azure_blob_agent 系列、a2a_litellm_agent 的代码和 Dockerfile 为 8000
- 添加端口修改脚本和测试脚本

Made-with: Cursor
2026-03-02 15:13:07 +00:00

149 lines
5.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 创建 Search Agent、测试健康与状态、可选调用 /search、然后删除
# 使用: AGENT_MANAGER_URL=http://20.212.121.126 ./scripts/test_search_agent.sh
# 可选环境变量: LLM_BASE_URL, SERPER_API_KEY, JINA_API_KEY (不设则用默认/镜像内建)
set -e
BASE_URL="${1:-${AGENT_MANAGER_URL:-http://localhost:8000}}"
AGENT_NAME="test-search-$(date +%s)"
# 默认 LLM 地址(与 code_ai_agent 等一致),可通过环境变量覆盖
LLM_BASE_URL="${LLM_BASE_URL:-https://litellm.graystone-fb459c5d.southeastasia.azurecontainerapps.io/v1}"
SERPER_API_KEY="${SERPER_API_KEY:-8253b4f240b520194065312f90e85f9be0fa205f}"
JINA_API_KEY="${JINA_API_KEY:-jina_e26dc30420a44a1e859216528065b203TkMRmsoz-FgMDQC5FZX9jr5oF2CI}"
echo "=========================================="
echo "Search Agent 测试"
echo "=========================================="
echo "Manager URL: $BASE_URL"
echo "Agent 名称: $AGENT_NAME"
echo "LLM_BASE_URL: $LLM_BASE_URL"
echo ""
# 1. 创建 Search Agent(传入 env 以通过 K8s 注入)
echo ">>> 1. 创建 Search Agent (template=search_agent)..."
CREATE_RESP=$(curl -s -w "\n%{http_code}" -X POST "${BASE_URL}/agents" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"${AGENT_NAME}\",
\"template\": \"search_agent\",
\"framework\": \"API\",
\"config\": {
\"env\": {
\"LLM_BASE_URL\": \"${LLM_BASE_URL}\",
\"SERPER_API_KEY\": \"${SERPER_API_KEY}\",
\"JINA_API_KEY\": \"${JINA_API_KEY}\"
}
}
}")
HTTP_BODY=$(echo "$CREATE_RESP" | head -n -1)
HTTP_CODE=$(echo "$CREATE_RESP" | tail -n 1)
if [ "$HTTP_CODE" != "200" ]; then
echo "创建失败 HTTP $HTTP_CODE"
echo "$HTTP_BODY" | python3 -m json.tool 2>/dev/null || echo "$HTTP_BODY"
exit 1
fi
echo "创建成功"
echo "$HTTP_BODY" | python3 -m json.tool 2>/dev/null || echo "$HTTP_BODY"
echo ""
POD_IP=$(echo "$HTTP_BODY" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('pod_ip','') or (d.get('access_info',{}) or {}).get('pod_url','').split('//')[-1].split(':')[0])" 2>/dev/null || true)
EXTERNAL_IP=$(echo "$HTTP_BODY" | python3 -c "import sys,json; d=json.load(sys.stdin); a=d.get('access_info',{}); print(a.get('external_ip','') or (a.get('ip_url') or '').split('//')[-1].split(':')[0] if isinstance(a,dict) else '')" 2>/dev/null || true)
SERVICE_PORT=$(echo "$HTTP_BODY" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('service_port', 8080) or 8080)" 2>/dev/null || echo "8080")
# 2. 等待 Pod 就绪
echo ">>> 2. 等待 Pod 就绪..."
for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
STATUS_RESP=$(curl -s -w "\n%{http_code}" "${BASE_URL}/agents/${AGENT_NAME}/status")
STATUS_BODY=$(echo "$STATUS_RESP" | head -n -1)
STATUS_CODE=$(echo "$STATUS_RESP" | tail -n 1)
if [ "$STATUS_CODE" != "200" ]; then
sleep 5
continue
fi
STATUS=$(echo "$STATUS_BODY" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('status',''))" 2>/dev/null || true)
if [ "$STATUS" = "Running" ]; then
echo "Pod 状态: Running"
break
fi
echo " 等待中... status=$STATUS (${i}/12)"
sleep 5
done
if [ "$STATUS" != "Running" ]; then
echo "Pod 未在预期内变为 Running,当前: $STATUS"
fi
# 3. 测试 Agent 端点(Search Agent 端口 8080,经 Service 暴露为 80)
AGENT_URL=""
if [ -n "$EXTERNAL_IP" ]; then
AGENT_URL="http://${EXTERNAL_IP}:80"
elif [ -n "$POD_IP" ]; then
AGENT_URL="http://${POD_IP}:${SERVICE_PORT}"
fi
if [ -n "$AGENT_URL" ]; then
echo ""
echo ">>> 3. 测试 Search Agent 端点..."
echo " Base URL: $AGENT_URL"
if curl -sf --connect-timeout 15 "${AGENT_URL}/health" > /tmp/search_health.json 2>/dev/null; then
echo " GET /health: 成功"
cat /tmp/search_health.json | python3 -m json.tool 2>/dev/null || cat /tmp/search_health.json
else
echo " GET /health: 失败或超时"
fi
if curl -sf --connect-timeout 10 "${AGENT_URL}/status" > /tmp/search_status.json 2>/dev/null; then
echo " GET /status: 成功"
cat /tmp/search_status.json | python3 -m json.tool 2>/dev/null || cat /tmp/search_status.json
else
echo " GET /status: 失败或超时"
fi
if curl -sf --connect-timeout 5 "${AGENT_URL}/" > /dev/null; then
echo " GET /: 成功"
fi
# 可选:调用 /search(需要有效 llm_api_key,否则可能 400/500)
if [ -n "${LLM_API_KEY_FOR_TEST}" ]; then
echo " 调用 POST /search (简短查询)..."
SEARCH_RESP=$(curl -s -w "\n%{http_code}" -X POST "${AGENT_URL}/search" \
-H "Content-Type: application/json" \
-d "{\"query\": \"What is 2+2?\", \"llm_api_key\": \"${LLM_API_KEY_FOR_TEST}\"}")
SEARCH_CODE=$(echo "$SEARCH_RESP" | tail -n 1)
if [ "$SEARCH_CODE" = "200" ]; then
echo " POST /search: 成功 (HTTP 200)"
else
echo " POST /search: HTTP $SEARCH_CODE"
fi
else
echo " (跳过 /search:设置 LLM_API_KEY_FOR_TEST 可测试搜索)"
fi
else
echo "未获取到 Agent 地址,跳过端点测试"
fi
# 4. 删除 Agent
echo ""
echo ">>> 4. 删除 Agent..."
DEL_RESP=$(curl -s -w "\n%{http_code}" -X DELETE "${BASE_URL}/agents/${AGENT_NAME}")
DEL_BODY=$(echo "$DEL_RESP" | head -n -1)
DEL_CODE=$(echo "$DEL_RESP" | tail -n 1)
if [ "$DEL_CODE" = "200" ] || [ "$DEL_CODE" = "204" ]; then
echo "删除成功"
echo "$DEL_BODY" | python3 -m json.tool 2>/dev/null || echo "$DEL_BODY"
else
echo "删除返回 HTTP $DEL_CODE"
echo "$DEL_BODY"
exit 1
fi
echo ""
echo "=========================================="
echo "Search Agent 测试完成"
echo "=========================================="