001project_wildgrowth/backend/scripts/migrate-prompt-configs.ts

112 lines
3.3 KiB
TypeScript
Raw Permalink 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.

/**
* 迁移Prompt配置脚本
* 将 book_content_prompt 重命名为 text_parse_prompt
* 添加 direct_generation_prompt 和 continue_course_prompt 的默认值
*/
import prisma from '../src/utils/prisma';
import { logger } from '../src/utils/logger';
import {
PROMPT_KEYS,
DEFAULT_TEXT_PARSE_PROMPT,
DEFAULT_DIRECT_GENERATION_PROMPT,
DEFAULT_CONTINUE_COURSE_PROMPT,
} from '../src/services/promptConfigService';
async function migratePromptConfigs() {
try {
logger.info('[迁移脚本] 开始迁移Prompt配置...');
// 1. 迁移 book_content_prompt → text_parse_prompt
const oldPrompt = await prisma.appConfig.findUnique({
where: { key: 'book_content_prompt' },
});
if (oldPrompt) {
// 如果存在旧配置迁移到新key
await prisma.appConfig.upsert({
where: { key: PROMPT_KEYS.TEXT_PARSE },
create: {
key: PROMPT_KEYS.TEXT_PARSE,
value: oldPrompt.value,
updatedAt: new Date(),
},
update: {
value: oldPrompt.value,
updatedAt: new Date(),
},
});
logger.info('[迁移脚本] ✅ book_content_prompt 已迁移到 text_parse_prompt');
} else {
// 如果不存在,创建默认值
await prisma.appConfig.upsert({
where: { key: PROMPT_KEYS.TEXT_PARSE },
create: {
key: PROMPT_KEYS.TEXT_PARSE,
value: DEFAULT_TEXT_PARSE_PROMPT,
updatedAt: new Date(),
},
update: {
value: DEFAULT_TEXT_PARSE_PROMPT,
updatedAt: new Date(),
},
});
logger.info('[迁移脚本] ✅ text_parse_prompt 已创建默认值');
}
// 2. 添加 direct_generation_prompt如果不存在
const directPrompt = await prisma.appConfig.findUnique({
where: { key: PROMPT_KEYS.DIRECT_GENERATION },
});
if (!directPrompt) {
await prisma.appConfig.create({
data: {
key: PROMPT_KEYS.DIRECT_GENERATION,
value: DEFAULT_DIRECT_GENERATION_PROMPT,
updatedAt: new Date(),
},
});
logger.info('[迁移脚本] ✅ direct_generation_prompt 已创建默认值');
} else {
logger.info('[迁移脚本] direct_generation_prompt 已存在,跳过');
}
// 3. 添加 continue_course_prompt如果不存在
const continuePrompt = await prisma.appConfig.findUnique({
where: { key: PROMPT_KEYS.CONTINUE_COURSE },
});
if (!continuePrompt) {
await prisma.appConfig.create({
data: {
key: PROMPT_KEYS.CONTINUE_COURSE,
value: DEFAULT_CONTINUE_COURSE_PROMPT,
updatedAt: new Date(),
},
});
logger.info('[迁移脚本] ✅ continue_course_prompt 已创建默认值');
} else {
logger.info('[迁移脚本] continue_course_prompt 已存在,跳过');
}
logger.info('[迁移脚本] ✅ Prompt配置迁移完成');
} catch (error: any) {
logger.error(`[迁移脚本] ❌ 迁移失败: ${error.message}`, error);
throw error;
} finally {
await prisma.$disconnect();
}
}
// 执行迁移
migratePromptConfigs()
.then(() => {
console.log('✅ 迁移完成');
process.exit(0);
})
.catch((error) => {
console.error('❌ 迁移失败:', error);
process.exit(1);
});