001project_wildgrowth/backend/scripts/diagnose-generation-failure.ts

145 lines
4.4 KiB
TypeScript
Raw Permalink 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.

/**
* 诊断生成失败问题
* 检查最近的失败任务和错误信息
*/
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function diagnose() {
try {
console.log('\n========== 诊断生成失败问题 ==========\n');
// 1. 检查最近的失败任务
console.log('1. 最近的失败任务最近10个:');
const failedTasks = await prisma.aIContentTask.findMany({
where: {
status: 'failed',
},
orderBy: {
createdAt: 'desc',
},
take: 10,
select: {
id: true,
status: true,
errorMessage: true,
generationStyle: true,
createdAt: true,
courseId: true,
},
});
if (failedTasks.length === 0) {
console.log(' ✅ 没有失败的任务');
} else {
failedTasks.forEach((task, index) => {
console.log(`\n 任务 ${index + 1}:`);
console.log(` ID: ${task.id}`);
console.log(` 状态: ${task.status}`);
console.log(` 错误信息: ${task.errorMessage || '无'}`);
console.log(` 生成风格: ${task.generationStyle || '无'}`);
console.log(` 创建时间: ${task.createdAt}`);
console.log(` 课程ID: ${task.courseId || '无'}`);
});
}
// 2. 检查最近的课程(包括失败状态)
console.log('\n\n2. 最近的课程最近10个包括生成状态:');
const recentCourses = await prisma.course.findMany({
orderBy: {
createdAt: 'desc',
},
take: 10,
select: {
id: true,
title: true,
generationStatus: true,
generationProgress: true,
createdAt: true,
aiContentTask: {
select: {
id: true,
status: true,
errorMessage: true,
generationStyle: true,
},
},
},
});
recentCourses.forEach((course, index) => {
console.log(`\n 课程 ${index + 1}:`);
console.log(` 标题: ${course.title}`);
console.log(` 生成状态: ${course.generationStatus || '无'}`);
console.log(` 生成进度: ${course.generationProgress || 0}`);
if (course.aiContentTask) {
console.log(` 任务状态: ${course.aiContentTask.status}`);
console.log(` 任务错误: ${course.aiContentTask.errorMessage || '无'}`);
console.log(` 任务风格: ${course.aiContentTask.generationStyle || '无'}`);
} else {
console.log(` 任务: 无`);
}
console.log(` 创建时间: ${course.createdAt}`);
});
// 3. 检查是否有 response_format 相关的错误
console.log('\n\n3. 检查 response_format 相关错误:');
const responseFormatErrors = failedTasks.filter(
task => task.errorMessage?.includes('response_format') || task.errorMessage?.includes('parameter')
);
if (responseFormatErrors.length === 0) {
console.log(' ✅ 没有 response_format 相关错误');
} else {
console.log(` ⚠️ 发现 ${responseFormatErrors.length} 个 response_format 相关错误:`);
responseFormatErrors.forEach((task, index) => {
console.log(`\n 错误 ${index + 1}:`);
console.log(` 任务ID: ${task.id}`);
console.log(` 错误信息: ${task.errorMessage}`);
});
}
// 4. 检查最近的 SelectStyle 调用
console.log('\n\n4. 检查最近的模式选择记录(通过任务状态变化):');
const tasksWithStyle = await prisma.aIContentTask.findMany({
where: {
generationStyle: {
not: null,
},
},
orderBy: {
updatedAt: 'desc',
},
take: 5,
select: {
id: true,
generationStyle: true,
status: true,
updatedAt: true,
},
});
if (tasksWithStyle.length === 0) {
console.log(' ⚠️ 没有找到已选择模式的任务');
} else {
tasksWithStyle.forEach((task, index) => {
console.log(`\n 任务 ${index + 1}:`);
console.log(` ID: ${task.id}`);
console.log(` 风格: ${task.generationStyle}`);
console.log(` 状态: ${task.status}`);
console.log(` 更新时间: ${task.updatedAt}`);
});
}
console.log('\n\n========== 诊断完成 ==========\n');
} catch (error) {
console.error('诊断失败:', error);
} finally {
await prisma.$disconnect();
}
}
diagnose();