feat: 添加关键词词云种子数据脚本

This commit is contained in:
2026-01-27 20:21:43 +08:00
parent c02ccdd86e
commit 1b75ac0b0d
+172
View File
@@ -0,0 +1,172 @@
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log('开始初始化关键词词云数据...');
// 1. 创建视觉样式规则
const rules = [
{
name: '热门大词-金色',
minScore: 90,
maxScore: 100,
color: 'primary',
size: 'text-5xl',
border: 'border-4',
rotation: 'rotate-1',
priority: 0,
enabled: true,
},
{
name: '中等词汇-蓝色',
minScore: 70,
maxScore: 89,
color: 'secondary',
size: 'text-3xl',
border: 'border-4',
rotation: 'rotate-2',
priority: 1,
enabled: true,
},
{
name: '小词汇-紫色',
minScore: 50,
maxScore: 69,
color: 'accent',
size: 'text-xl',
border: 'border-2',
rotation: '-rotate-1',
priority: 2,
enabled: true,
},
{
name: '长尾词-灰色',
minScore: 0,
maxScore: 49,
color: 'gray',
size: 'text-base',
border: 'border-2',
rotation: null,
priority: 3,
enabled: true,
},
];
for (const rule of rules) {
await prisma.visualStyleRule.upsert({
where: { name: rule.name },
update: rule,
create: rule,
});
console.log(`✓ 创建规则: ${rule.name}`);
}
// 2. 创建示例季度(2023-Q1)
const quarter = await prisma.quarter.upsert({
where: { quarter: '2023-Q1' },
update: {},
create: {
quarter: '2023-Q1',
title: '2023年第一季度',
titleEn: 'Q1 2023',
subtitle: '聊天界面的黎明',
subtitleEn: 'The dawn of chat interface',
displayOrder: 0,
isActive: true,
},
});
console.log(`✓ 创建季度: ${quarter.quarter}`);
// 3. 创建示例关键词
const sampleKeywords = [
{
word: 'ChatGPT',
trendScore: 98,
description: 'OpenAI 开发的对话式人工智能助手,支持多轮对话',
detailPoints: ['基于 GPT-3.5 架构', '2023年用户突破1亿', '引领对话式AI热潮'],
visualConfig: {
color: 'secondary',
size: 'text-5xl',
border: 'border-4',
rotation: 'rotate-1',
},
},
{
word: 'GPT-4',
trendScore: 92,
description: 'OpenAI 发布的多模态大型语言模型',
detailPoints: ['支持图像输入', '推理能力显著提升', '上下文窗口扩大'],
visualConfig: {
color: 'primary',
size: 'text-4xl',
border: 'border-4',
rotation: 'rotate-2',
},
},
{
word: 'LLM',
trendScore: 88,
description: 'Large Language Model,大型语言模型',
detailPoints: ['基于Transformer架构', '参数规模达十亿级', '涌现能力'],
visualConfig: {
color: 'secondary',
size: 'text-3xl',
border: 'border-4',
rotation: '-rotate-1',
},
},
{
word: 'Prompt Engineering',
trendScore: 85,
description: '提示词工程,优化AI模型输入的技术',
detailPoints: ['Few-shot prompting', '思维链提示', '迭代优化'],
visualConfig: {
color: 'accent',
size: 'text-3xl',
border: 'border-2',
rotation: 'rotate-1',
},
},
{
word: 'Transformer',
trendScore: 75,
description: '基于自注意力机制的神经网络架构',
detailPoints: ['并行计算能力强', '成为LLM基础架构', '2017年Google提出'],
visualConfig: {
color: 'secondary',
size: 'text-2xl',
border: 'border-2',
rotation: null,
},
},
];
// 先删除已存在的关键词
await prisma.keyword.deleteMany({
where: { quarterId: quarter.id },
});
for (const kw of sampleKeywords) {
await prisma.keyword.create({
data: {
quarterId: quarter.id,
...kw,
detailPoints: kw.detailPoints as any,
visualConfig: kw.visualConfig as any,
},
});
console.log(`✓ 创建关键词: ${kw.word}`);
}
console.log('\n初始化完成!');
}
main()
.catch((e) => {
console.error('错误:', e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});