7人参与 • 2025-04-24 • Node.js
首先,您需要在deepseek官网注册账号并创建一个项目来获取api key。这个key将用于验证您的请求。
确保你的node.js环境已准备就绪,并安装以下npm包:
npm install axios express http
我们将使用express框架快速搭建一个http服务器。以下是基本设置代码片段:
const express = require('express'); const app = express(); app.use(express.json()); // 定义主机名和端口 const hostname = '127.0.0.1'; const port = 3002;
为了允许跨域请求,我们需要添加cors支持:
app.all('*', function (req, res, next) { // cors headers setup... res.header('access-control-allow-origin', '*'); // 允许任意域名发起跨域请求 res.header('access-control-allow-headers', 'content-type, content-length, authorization, accept, x-requested-with'); // 允许指定的头部字段 res.header('access-control-allow-methods', 'put, post, get, delete, options'); // 允许指定的 http 方法 res.header('x-powered-by', '3.2.1'); // 添加自定义头部信息 if ('options' == req.method) { // 如果请求方法是 options,则直接返回成功响应 res.send(200); } else { // 否则继续处理请求 next(); } });
接下来,定义处理/chat/completions
请求的路由,这里我们采用流式响应方式处理数据返回:
router.get('/chat/completions', async (req, res) => { let messages = [{ role: "user", content: req.query.mesage}] let { config } = await createchatcompletion(messages) let response = await axios(config) res.setheader('content-type', 'text/event-stream'); res.setheader('cache-control', 'no-cache'); res.setheader('connection', 'keep-alive'); // 处理流式响应 response.data.on('data', async (chunk) => { const lines = chunk.tostring().split('\n'); // 将数据块转换为字符串并按行分割 for (const line of lines) { if (line.trim() === '') continue; // 跳过空行 if (line.trim() === 'data: [done]') continue; // 跳过结束标记 if (line.startswith('data:')) { // 检查是否以 "data: " 开头 try { const json = json.parse(line.slice(6)); // 去掉前缀 "data: " 并解析 json if (json.choices[0].delta.content) { // 检查是否有内容 let contents = [] let index = 0 contents.push(json.choices[0].delta.content) for (let i = 0; i < contents.length; i++) { settimeout(() => { res.write(`data: ${json.stringify({ content: contents[index] })}\n\n`); index++ }, 200); } } } catch (e) { continue; // 如果解析失败,继续处理下一行 } } } }); // 处理逻辑... });
编写辅助函数createchatcompletion
来构造请求参数并调用deepseek api:
async function createchatcompletion(messages) { const data = json.stringify({ "messages": messages, "model": "deepseek-reasoner", "response_format": {"type":"text"}, "stream": true, }); let config = { method: 'post', url: 'https://api.deepseek.com/chat/completions', headers: { 'content-type': 'application/json', 'authorization': `bearer your_api_key`, }, responsetype: "stream", data: data }; return {config}; }
请记得替换your_api_key
为您的实际api密钥。
最后,启动express服务器监听指定端口:
app.listen(port, hostname, () => { console.log(`server running at http://${hostname}:${port}/`); });
server-sent events(sse)是一种用于实现服务器向客户端单向推送数据的技术。使用了 sse 来实现客户端与服务器之间的实时通信。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>server-sent events example</title> </head> <body> <h1>与deepseek聊天</h1> <div> <textarea id="userinput" placeholder="输入你的消息..." rows="4" cols="50"></textarea><br /> <button onclick="sendmessage()">发送消息</button> </div> <div id="messages"> <!-- 服务器返回的消息将显示在这里 --> </div> <script> function sendmessage () { const responsearea = document.getelementbyid('messages'); const userinput = document.getelementbyid('userinput').value; let p = document.createelement('p') const div = document.createelement('div') div.classlist = 'title' div.innerhtml = userinput responsearea.appendchild(div) if (!userinput) return; // 创建一个新的 eventsource 对象 const eventsource = new eventsource(`http://127.0.0.1:3002/chat/completions?mesage=${userinput}`); // 监听 'message' 事件,每当服务器推送一条新消息时触发 eventsource.onmessage = function (event) { try { const json = json.parse(event.data); updateresponsearea(json.content, p); } catch (e) { console.error('error parsing json:', e); } }; // 监听 'open' 事件,表示连接已成功打开 eventsource.onopen = function () { console.log('connection to server opened.'); }; // 监听 'error' 事件,处理任何错误或连接中断的情况 eventsource.onerror = function (error) { if (eventsource.readystate === eventsource.closed) { console.log('connection was closed by the server.'); } else { console.error('eventsource failed:', error); } eventsource.close(); // 手动关闭连接 }; // 更新页面上的响应区域 function updateresponsearea (message, p) { p.classlist = 'back' p.innerhtml += `<span>${message}</span>`; responsearea.appendchild(p) } } </script> </body> </html>
通过以上步骤,您已经成功地使用node.js集成了deepseek的聊天完成api。这不仅能够增强应用程序的功能性,还能提供更加智能化的用户体验。希望这篇指南能帮助您顺利接入deepseek服务,开启探索ai之旅!
由于无法放置视频,流式效果无法展现
请注意,上述代码示例基于您提供的代码进行了简化和抽象,旨在提供一个清晰的流程说明。实际开发时,请根据自己的需求进行调整和优化。
以上就是node.js接入deepseek实现流式对话功能的详细内容,更多关于node.js deepseek流式对话的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论