当前位置: 首页 > news >正文

硅基流动nodejs流式输出

使用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: 'https://api.siliconflow.cn/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}`);
});

http://www.mrgr.cn/news/93037.html

相关文章:

  • 使用vite创建vue3项目
  • T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取
  • AMD RDNA3 GPU架构解析
  • (十 九)趣学设计模式 之 中介者模式!
  • 【算法】手撕二分查找
  • stm32 jlink烧录时写保护
  • HOW - 在Windows浏览器中模拟MacOS的滚动条
  • 私有云基础架构
  • 多个pdf合并成一个pdf的方法
  • easyExcel使用案例有代码
  • SP导入智能材质球
  • 【子网掩码计算器:Python + Tkinter 实现】
  • 中间件专栏之MySQL篇——MySQL缓存策略
  • 以实例浅析汇编语句和高级语言
  • CDefView::_OnFSNotify函数分析
  • Pytorch xpu环境配置 Pytorch使用Intel集成显卡
  • QT——文件IO
  • Arduino:UNO板的接口和应用
  • unity学习62,尝试做第一个小游戏项目:flappy bird
  • Spring MVC 返回数据