001project_wildgrowth/backend/scripts/test-course-generation-dire...

167 lines
5.5 KiB
Bash
Raw Normal View History

2026-02-11 15:26:03 +08:00
#!/bin/bash
# 直接测试课程生成API需要先获取Token
# 使用方法先手动登录获取Token然后运行此脚本
BASE_URL="https://api.muststudy.xin"
echo "🧪 测试课程生成完整流程"
echo "📍 API: $BASE_URL"
echo ""
echo "⚠️ 注意此脚本需要先手动获取Token"
echo " 请先登录获取Token然后设置环境变量"
echo " export TEST_TOKEN='your_token_here'"
echo ""
if [ -z "$TEST_TOKEN" ]; then
echo "❌ 未设置 TEST_TOKEN 环境变量"
echo ""
echo "获取Token的方法"
echo "1. 使用手机号登录(需要验证码)"
echo "2. 或者使用现有的测试账号"
echo ""
echo "示例:"
echo " export TEST_TOKEN='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'"
echo " bash scripts/test-course-generation-direct.sh"
exit 1
fi
echo "✅ 使用Token: ${TEST_TOKEN:0:20}..."
echo ""
# 1. 创建课程
echo "1⃣ 创建课程(精华版)..."
CREATE_RESPONSE=$(curl -s -X POST "$BASE_URL/api/ai/content/upload" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TEST_TOKEN" \
-d '{
"content": "社交是每个人都需要掌握的重要技能。在现代社会,良好的人际关系不仅能帮助我们获得更多机会,还能提升我们的生活质量。社交的核心在于建立有意义的人际关系,这种关系应该基于相互尊重、价值交换和长期维护。",
"style": "essence"
}')
echo "创建响应: $CREATE_RESPONSE" | head -c 300
echo ""
COURSE_ID=$(echo "$CREATE_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('courseId', ''))" 2>/dev/null)
TASK_ID=$(echo "$CREATE_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('taskId', ''))" 2>/dev/null)
if [ -z "$COURSE_ID" ]; then
echo "❌ 创建课程失败"
echo "完整响应: $CREATE_RESPONSE"
exit 1
fi
echo ""
echo "✅ 课程创建成功"
echo " Course ID: $COURSE_ID"
echo " Task ID: $TASK_ID"
echo ""
# 2. 查询任务详情
echo "2⃣ 查询任务详情..."
TASK_RESPONSE=$(curl -s -X GET "$BASE_URL/api/ai/content/tasks/$TASK_ID" \
-H "Authorization: Bearer $TEST_TOKEN")
TASK_STATUS=$(echo "$TASK_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('task', {}).get('status', 'N/A'))" 2>/dev/null)
TASK_TITLE=$(echo "$TASK_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('task', {}).get('suggestedTitle', 'N/A'))" 2>/dev/null)
echo " 任务状态: $TASK_STATUS"
echo " 建议标题: $TASK_TITLE"
echo ""
# 3. 轮询查询状态
echo "3⃣ 轮询查询生成状态最多等待3分钟..."
MAX_ITERATIONS=60
LAST_PROGRESS=""
for i in $(seq 1 $MAX_ITERATIONS); do
sleep 3
STATUS_RESPONSE=$(curl -s -X GET "$BASE_URL/api/my-courses" \
-H "Authorization: Bearer $TEST_TOKEN")
# 提取进度
PROGRESS=$(echo "$STATUS_RESPONSE" | python3 -c "
import sys, json
try:
data = json.load(sys.stdin)
courses = data.get('data', {}).get('courses', [])
for course in courses:
if course.get('id') == '$COURSE_ID':
progress = course.get('generation_progress')
status = course.get('generation_status') or course.get('status')
title = course.get('title', 'N/A')
error = course.get('error_message')
if progress is not None:
print(f\"{int(progress * 100)}|{status}|{title}|{error or ''}\")
else:
print(f\"N/A|{status}|{title}|{error or ''}\")
break
except Exception as e:
pass
" 2>/dev/null)
if [ -n "$PROGRESS" ] && [ "$PROGRESS" != "$LAST_PROGRESS" ]; then
PROG_VAL=$(echo "$PROGRESS" | cut -d'|' -f1)
STATUS_VAL=$(echo "$PROGRESS" | cut -d'|' -f2)
TITLE_VAL=$(echo "$PROGRESS" | cut -d'|' -f3)
ERROR_VAL=$(echo "$PROGRESS" | cut -d'|' -f4)
if [ "$PROG_VAL" != "N/A" ]; then
echo " [$i/$MAX_ITERATIONS] 进度: ${PROG_VAL}% | 状态: $STATUS_VAL | 标题: $TITLE_VAL"
else
echo " [$i/$MAX_ITERATIONS] 状态: $STATUS_VAL | 标题: $TITLE_VAL"
fi
if [ -n "$ERROR_VAL" ]; then
echo " ⚠️ 错误信息: $ERROR_VAL"
fi
LAST_PROGRESS="$PROGRESS"
if [ "$STATUS_VAL" = "completed" ]; then
echo ""
echo "✅ 课程生成完成!"
break
fi
if [ "$STATUS_VAL" = "failed" ]; then
echo ""
echo "❌ 课程生成失败"
break
fi
fi
done
echo ""
echo "4⃣ 查询任务日志..."
LOGS_RESPONSE=$(curl -s -X GET "$BASE_URL/api/ai/prompts/logs?taskId=$TASK_ID&limit=10" \
-H "Authorization: Bearer $TEST_TOKEN")
LOG_INFO=$(echo "$LOGS_RESPONSE" | python3 -c "
import sys, json
try:
data = json.load(sys.stdin)
logs = data.get('data', {}).get('logs', [])
print(f'总数: {len(logs)}')
for log in logs[:10]:
prompt_type = log.get('promptType', 'N/A')
status = log.get('status', 'N/A')
duration = log.get('duration', 0)
tokens = log.get('tokensUsed', 0)
error = log.get('errorMessage', '')
print(f\" - {prompt_type} ({status}) - {duration}ms - {tokens}tokens\")
if error:
print(f\" 错误: {error}\")
except Exception as e:
print(f'解析失败: {e}')
" 2>/dev/null)
echo "$LOG_INFO"
echo ""
echo "✅ 测试完成!"
echo ""
echo "📊 测试总结:"
echo " - Course ID: $COURSE_ID"
echo " - Task ID: $TASK_ID"
echo " - 最终状态: $STATUS_VAL"
echo " - 最终标题: $TITLE_VAL"