- 修改 template_manager.py、k8s_manager.py 中的端口映射 - 更新 jina_search_agent、azure_blob_agent 系列、a2a_litellm_agent 的代码和 Dockerfile 为 8000 - 添加端口修改脚本和测试脚本 Made-with: Cursor
149 lines
5.5 KiB
Bash
Executable File
149 lines
5.5 KiB
Bash
Executable File
#!/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 "=========================================="
|