/** * AI服务 - DeepSeek API集成 * 提供智能对话、场景化提示词等功能 */ const API_BASE_URL = 'https://api.deepseek.com'; const API_KEY = 'sk-0bdae24178904e5d9e59598cf4ecace6'; // 请替换为实际的API密钥 /** * 场景化提示词模板 */ const SCENARIO_PROMPTS = { study_method: { name: '学习方法咨询', systemPrompt: '你是一位经验丰富的学习顾问,擅长根据学生的具体情况提供个性化的学习方法建议。请用简洁、实用的语言回答,每个建议都要具体可执行。' }, course_advice: { name: '课程建议', systemPrompt: '你是一位专业的课程规划师,擅长根据学生的兴趣和目标推荐合适的课程。请提供具体的选课建议,包括课程难度、学习顺序等。' }, post_summary: { name: '帖子总结', systemPrompt: '你是一位擅长信息提炼的助手,能够快速总结论坛帖子的核心内容。请用简洁的语言概括要点,突出关键信息。' }, study_plan: { name: '学习计划', systemPrompt: '你是一位时间管理专家,擅长制定科学合理的学习计划。请根据学生的时间和目标,制定详细的、可执行的学习计划。' }, problem_explain: { name: '问题讲解', systemPrompt: '你是一位耐心的老师,擅长用通俗易懂的方式讲解复杂问题。请分步骤讲解,确保学生能够理解每个环节。' } }; /** * 调用DeepSeek Chat API * @param {Array} messages - 消息历史数组 * @param {String} scenarioId - 场景ID(可选) * @returns {Promise} AI回复内容 */ async function chat(messages, scenarioId = null) { try { // 构建请求消息 const requestMessages = []; // 添加系统提示词(如果有场景) if (scenarioId && SCENARIO_PROMPTS[scenarioId]) { requestMessages.push({ role: 'system', content: SCENARIO_PROMPTS[scenarioId].systemPrompt }); } else { // 默认系统提示词 requestMessages.push({ role: 'system', content: '你是一位智能学习助手,名叫"启思AI",寓意"启迪思维,智慧学习"。你致力于帮助大学生更好地学习和成长,提供个性化的学习指导。请用友好、专业且富有启发性的语言回答问题,让学生在获得答案的同时也能学会独立思考。' }); } // 添加对话历史 messages.forEach(msg => { requestMessages.push({ role: msg.role, content: msg.content }); }); // 调用API return new Promise((resolve, reject) => { wx.request({ url: `${API_BASE_URL}/chat/completions`, method: 'POST', header: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` }, data: { model: 'deepseek-chat', messages: requestMessages, stream: false, temperature: 0.7, max_tokens: 2000 }, timeout: 30000, success: (res) => { if (res.statusCode === 200 && res.data.choices && res.data.choices.length > 0) { const reply = res.data.choices[0].message.content; resolve(reply); } else { reject(new Error('API返回格式错误')); } }, fail: (err) => { reject(err); } }); }); } catch (error) { console.error('AI服务调用失败:', error); throw error; } } /** * 获取场景列表 * @returns {Array} 场景列表 */ function getScenarios() { return [ { id: 'study_method', name: '学习方法', icon: '📚', prompt: '你好!我想了解一些高效的学习方法,有什么建议吗?' }, { id: 'course_advice', name: '课程建议', icon: '🎯', prompt: '我想请教一下选课方面的建议。' }, { id: 'post_summary', name: '帖子总结', icon: '📝', prompt: '请帮我总结一下这个帖子的主要内容。' }, { id: 'study_plan', name: '学习计划', icon: '📅', prompt: '能帮我制定一个学习计划吗?' }, { id: 'problem_explain', name: '问题讲解', icon: '💡', prompt: '我有一个问题不太理解,能帮我讲解一下吗?' } ]; } /** * 错误处理 - 返回友好的错误提示 * @param {Error} error - 错误对象 * @returns {String} 错误提示文本 */ function getErrorMessage(error) { console.error('AI服务错误:', error); // 域名不在白名单 if (error.errMsg && error.errMsg.includes('url not in domain list')) { return '⚠️ API域名未配置\n\n请在开发者工具中:\n详情 → 本地设置 → 勾选"不校验合法域名"\n\n或在小程序后台添加:\nhttps://api.deepseek.com'; } if (error.errMsg && error.errMsg.includes('timeout')) { return '网络超时,请检查网络连接后重试 🌐'; } if (error.errMsg && error.errMsg.includes('fail')) { return '网络请求失败,请稍后重试 📡'; } if (error.statusCode === 401) { return 'API密钥无效,请联系管理员 🔑'; } if (error.statusCode === 429) { return '请求过于频繁,请稍后再试 ⏰'; } if (error.statusCode === 500) { return '服务器繁忙,请稍后重试 🔧'; } return '抱歉,AI助手暂时无法回复,请稍后重试 😢'; } module.exports = { chat, getScenarios, getErrorMessage, SCENARIO_PROMPTS };