feat: 技能库改为数据库存储 (Prisma Skill 模型 + seed)
- Prisma 新增 Skill 模型 (id/name/description/icon/category/difficulty/systemPrompt/starters/tasks/tags/prerequisiteIds) - SkillsService 从 DB 读取替代硬编码常量 - seed.ts 新增 seedSkills() 写入 8 个技能 - SkillsController 保持不变,API 返回 JSON 解析后的 starters/tasks
This commit is contained in:
@@ -109,9 +109,33 @@ async function main() {
|
||||
}
|
||||
}
|
||||
|
||||
await seedSkills();
|
||||
|
||||
console.log('Seed data created successfully!');
|
||||
}
|
||||
|
||||
async function seedSkills() {
|
||||
const skills = [
|
||||
{ id: 'general-chat', name: '通用对话', description: '日常问答,无所不谈', icon: '💬', category: 'basic', difficulty: 'beginner', systemPrompt: '你是一个智能 AI 助手,请友好、准确地回答用户的问题。', starters: JSON.stringify(['介绍一下你自己', '今天天气怎么样', '讲个笑话']), tasks: JSON.stringify([{ label: '发起一次对话', prompt: '你好' }]), tags: '入门,通用', prerequisiteIds: null, sortOrder: 1 },
|
||||
{ id: 'coding', name: '编程助手', description: '写代码、Debug、学编程', icon: '💻', category: 'technical', difficulty: 'intermediate', systemPrompt: '你是一名资深软件工程师,擅长编程教学。请用清晰的代码示例和通俗的语言解释技术概念。回答时优先提供可运行的代码。', starters: JSON.stringify(['用 Python 写一个二分查找', 'React 和 Vue 有什么区别', '帮我 Debug 这段代码']), tasks: JSON.stringify([{ label: '要求代码示例', prompt: '用 Python 写一个二分查找' }]), tags: '编程,Python,Debug', prerequisiteIds: null, sortOrder: 2 },
|
||||
{ id: 'writing', name: '写作助手', description: '文章、文案、报告润色', icon: '✍️', category: 'creative', difficulty: 'beginner', systemPrompt: '你是一名专业的写作顾问,擅长各类文体写作。请根据用户需求提供高质量的文字内容,注意逻辑清晰、表达准确。', starters: JSON.stringify(['帮我写一篇产品介绍', '润色这段文字', '写一封工作邮件']), tasks: JSON.stringify([{ label: '练习写作', prompt: '帮我写一篇产品介绍' }]), tags: '写作,文案,润色', prerequisiteIds: null, sortOrder: 3 },
|
||||
{ id: 'study', name: '学习辅导', description: '概念讲解、知识总结', icon: '📚', category: 'education', difficulty: 'beginner', systemPrompt: '你是一名耐心且知识渊博的老师。请用通俗易懂的方式解释复杂概念,善用类比和例子,鼓励用户深入提问。', starters: JSON.stringify(['解释什么是机器学习', '讲一下 TCP/IP 协议', '怎么理解量子计算']), tasks: JSON.stringify([{ label: '学习概念', prompt: '用简单的类比解释什么是机器学习' }]), tags: '学习,概念讲解', prerequisiteIds: null, sortOrder: 4 },
|
||||
{ id: 'english', name: '英语学习', description: '翻译、语法、口语练习', icon: '🌍', category: 'education', difficulty: 'intermediate', systemPrompt: 'You are an English tutor. Help users improve their English.', starters: JSON.stringify(['"However" 和 "Although" 的区别', '帮我翻译这段话', '检查语法错误']), tasks: JSON.stringify([{ label: '语法练习', prompt: '"I have went to school" 有什么语法错误' }]), tags: '英语,翻译,语法', prerequisiteIds: null, sortOrder: 5 },
|
||||
{ id: 'prompt-engineering', name: '提示词工程', description: '学习编写高质量提示词', icon: '🎯', category: 'advanced', difficulty: 'advanced', systemPrompt: '你是一名提示词工程专家。帮助用户理解如何构建有效的提示词。', starters: JSON.stringify(['如何写好一个提示词', '什么是 Chain-of-Thought']), tasks: JSON.stringify([{ label: '学习提示词结构', prompt: '一个好的提示词应该包含哪些要素' }]), tags: '提示词,Prompt,进阶', prerequisiteIds: 'general-chat', sortOrder: 6 },
|
||||
{ id: 'data-analysis', name: '数据分析', description: '数据处理、可视化、报表', icon: '📊', category: 'technical', difficulty: 'intermediate', systemPrompt: '你是一名数据分析师。擅长使用 Python、SQL 等工具进行数据分析和可视化。', starters: JSON.stringify(['用 Python 分析这份数据', '这个 SQL 查询怎么优化']), tasks: JSON.stringify([{ label: '数据分析入门', prompt: '用 Python pandas 读取 CSV 文件并做基本统计' }]), tags: '数据分析,Python,SQL', prerequisiteIds: null, sortOrder: 7 },
|
||||
{ id: 'career', name: '职业发展', description: '简历优化、面试准备', icon: '🚀', category: 'career', difficulty: 'beginner', systemPrompt: '你是一名职业发展顾问。帮助用户优化简历、准备面试。', starters: JSON.stringify(['帮我优化简历', '面试注意事项']), tasks: JSON.stringify([{ label: '简历优化', prompt: '帮我优化这段工作经历描述' }]), tags: '职业,简历,面试', prerequisiteIds: null, sortOrder: 8 },
|
||||
];
|
||||
|
||||
for (const skill of skills) {
|
||||
await prisma.skill.upsert({
|
||||
where: { id: skill.id },
|
||||
create: skill,
|
||||
update: skill,
|
||||
});
|
||||
}
|
||||
console.log(`${skills.length} skills seeded`);
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
|
||||
Reference in New Issue
Block a user