167 lines
5.5 KiB
Bash
167 lines
5.5 KiB
Bash
|
|
#!/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"
|