硅基流动nodejs流式输出
- 创业
- 2025-09-13 10:42:01

使用JavaScript的api直接在前端问答速度虽然快但是有token直接暴露的风险。 现在使用nodejs也可以快速进行流式输出并且可以隐藏用户敏感信息。
const express = require('express'); const axios = require('axios'); const app = express(); const port = 3000; //启动服务node index.js app.get('/test', async (req, res) => { try { // 设置流式响应头(保持不变) res.setHeader('Content-Type', 'text/event-stream; charset=utf-8'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive'); const userQuestion = req.query.questions || '默认问题:你好!'; const response = await axios({ method: 'POST', url: ' api.siliconflow /v1/chat/completions', headers: { Authorization: `Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`, 'Content-Type': 'application/json' }, data: { model: "Qwen/Qwen2.5-72B-Instruct", messages: [{ role: "user", content: userQuestion }], stream: true, max_tokens: 2048, stop: ["END"] }, responseType: 'stream' }); let buffer = ''; // 新增:内容缓冲区 let shouldStop = false; // 新增:停止标志 response.data.on('data', (chunk) => { if (shouldStop) return; const lines = chunk.toString('utf8').split('\n').filter(line => line.trim() !== ''); lines.forEach(line => { if (line.startsWith('data: ') && line !== 'data: [DONE]') { try { const jsonData = JSON.parse(line.replace(/^data: /, '')); if (jsonData.choices?.[0]?.delta?.content) { const content = jsonData.choices[0].delta.content; // 修正2:客户端检测停止词 buffer += content; if (buffer.includes('END')) { shouldStop = true; // 发送END前的有效内容 const validContent = buffer.split('END')[0]; // 发送流式输出结果 res.write(validContent); res.end(); return; } res.write(content); } } catch (error) { console.error('处理错误:', error); } } }); }); response.data.on('end', () => { if (!shouldStop) res.end(); }); } catch (error) { console.error('请求出错:', error); res.status(500).json({ error: '服务器内部错误' }); } }); app.listen(port, () => { console.log(`Example app listening on http://localhost:${port}`); });硅基流动nodejs流式输出由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“硅基流动nodejs流式输出”
上一篇
游戏引擎学习第133天