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

167 lines
5.5 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
# 直接测试课程生成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"