const openAi = require('openai'); const axios = require('axios'); //查询用户信息 exports.chartai = async (req, res) => { const openai = new openAi({ baseURL: 'https://api.deepseek.com', apiKey: 'sk-124eacfb93c9459a9abeaf511df20502' }); try { const { prompt } = req.body; if (!prompt) { // return res.status(400).json({ error: 'Prompt is required' }); return res.rescc("Prompt is required", 400); } // 调用 DeepSeek API // const response = await openai.createChatCompletion({ // model: 'deepseek-chat', // 模型名称 // messages: [{ role: 'user', content: prompt }], // max_tokens: 50, // 生成的最大 token 数量 // temperature: 0.7, // 控制生成内容的随机性 // stream: false, // 是否启用流式传输(这里关闭流式传输) // }); //直接使用deepseek提供的api---需要购买token // const response = await openai.chat.completions.create({ // messages: [{ role: "system", content: prompt }], // model: "deepseek-chat", // }); // // 返回 API 响应 // console.log("response====>>>", response) // res.rescc("对话成功", 200, response); //使用ollama提供的api--免费 //1. 生成文本(Generate Text)--- POST /api/generate --- 向模型发送提示词(prompt),并获取生成的文本。 // const ollamaResponse = await axios.post('http://127.0.0.1:11434/api/generate', { // model: 'deepseek-r1:8b', // 替换为实际的模型名称 // prompt, // stream: false // 不启用流式响应 // }); //2. 多轮对话(Chat)--- POST /api/chat --- 支持多轮对话,模型会记住上下文。 const ollamaResponse = await axios.post('http://127.0.0.1:11434/api/chat', { model: 'deepseek-r1:8b', // 替换为实际的模型名称 messages: [ { "role": "user", "content": prompt } ], stream: false // 不启用流式响应 }); //3.多模态输入(上传文件) --- POST /api/run --- 运行模型并处理多模态输入(如图片) // const ollamaResponse = await axios.post('http://127.0.0.1:11434/api/run', { // model: 'deepseek-r1:8b', // 替换为实际的模型名称 // prompt, // file: "/path/to/image.png", // stream: false // 不启用流式响应 // }); // 返回 API 响应 console.log("response====>>>", ollamaResponse) res.rescc("对话成功", 200, ollamaResponse.data); } catch (error) { console.error('Error calling DeepSeek API:', error.response ? error.response.data : error.message); // res.status(500).json({ error: 'Failed to call DeepSeek API' }); res.rescc("Failed to call DeepSeek API"); } } //ollama流方式返回 exports.chartaiStream = async (req, res) => { // 设置 SSE 响应头 res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive'); const { prompt } = req.query; try { // 调用 Ollama 的 API const ollamaStream = await axios({ method: 'post', url: 'http://127.0.0.1:11434/api/generate', // 替换为实际 Ollama 地址 data: { model: 'deepseek-r1:8b', // 指定模型名称 prompt, // 示例输入 stream: true, // 开启流式响应 }, responseType: 'stream', }); // 将 Ollama 的流式数据转发给前端 ollamaStream.data.on('data', (chunk) => { const message = chunk.toString(); // 假设 Ollama 返回的是字符串数据 res.write(`data: ${message}\n\n`); // 推送给前端 }); // 监听 Ollama 流结束 ollamaStream.data.on('end', () => { console.log('Ollama 流结束'); res.write(`data: [END]`); // res.end(); }); // 监听客户端断开连接 req.on('close', () => { console.log('客户端断开连接'); ollamaStream.data.destroy(); // 停止 Ollama 流 res.end(); }); } catch (error) { console.error('调用 Ollama API 出错:', error.message); res.status(500).end(); } } //PPT流方式返回 exports.chartAiPPTStream = async (req, res) => { // 设置 SSE 响应头 res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive'); const { prompt } = req.query; try { const pptOnline = await axios({ method: 'post', url: 'https://api.coze.cn/v3/chat', headers: { "Authorization": "Bearer pat_fGccMIbg8Z9wJkSHBbRic6RFNV4Pn5VFjnFYisYH7O75SOn9UMkhKQKQkuP8Sc0I", "Content-Type": "application/json" }, data: { "bot_id": "7494094750929666059", "user_id": "111", "stream": true, "additional_messages": [ { "content": prompt, "content_type": "text", "role": "user", "type": "question" } ] }, responseType: 'stream' }); // 将 Ollama 的流式数据转发给前端 pptOnline.data.on('data', (chunk) => { const message = chunk.toString(); // 假设 Ollama 返回的是字符串数据 if (message.indexOf("event:conversation.message.completed") > -1) { const msg = message.replace(/event:conversation.message.completed/g, '') res.write(`data: ${msg}\n\n`); // 推送给前端 } else if (message.indexOf("[DONE]") > -1) { console.log("message===>>>", message) console.log("messagetypeof===>>>", (typeof message)) res.write(`data: ${message}\n\n`); // 推送给前端 } }); // 监听 Ollama 流结束 pptOnline.data.on('end', () => { console.log('Ollama 流结束'); // res.end(); }); // 监听客户端断开连接 req.on('close', () => { console.log('客户端断开连接'); pptOnline.data.destroy(); // 停止 Ollama 流 res.end(); }); } catch (error) { console.error('调用 Ollama API 出错:', error.message); res.status(500).end(); } }