node怎么使用sse返回ai流式数据
时间: 2025-07-05 13:02:11 浏览: 2
### 如何在 Node.js 中通过 SSE 实现 AI 流式数据传输
#### 创建 HTTP 服务器并设置响应头
为了支持 Server-Sent Events (SSE),HTTP 响应需要特定的头部信息。这些头部确保客户端能够识别这是一个持续连接,并能处理接收到的消息。
```javascript
const http = require('http');
// 创建一个简单的 HTTP 服务
const server = http.createServer((req, res) => {
// 设置必要的 MIME 类型和其他头部字段以启用 SSE
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
});
```
#### 发送初始消息给客户端
一旦建立了到客户端的连接,可以立即发送一条欢迎消息作为测试:
```javascript
server.on('request', function(req, res){
if (req.url === '/events') {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
// 发送初次问候语句
res.write(`data: 连接到服务器...\n\n`);
// 定期向客户端推送更新
setInterval(() => {
const data = `data: ${new Date().toLocaleTimeString()}\n\n`;
res.write(data);
}, 1000);
req.on('close', () => {
console.log(`${req.socket.remoteAddress} 断开连接`);
});
}
});
```
#### 处理来自 OpenAI 的流式数据
当涉及到像 ChatGPT 这样的 AI 平台时,通常会有一个异步过程来获取回复。这里展示了如何将从外部 API 获取的结果逐步传递给前端用户[^1]。
```javascript
const axios = require('axios').default;
async function streamOpenAIData(res) {
try {
let config = {
method: 'post',
url: 'https://api.openai.com/v1/engines/davinci-codex/completions',
headers: {
'Authorization': 'Bearer YOUR_API_KEY_HERE',
'Content-Type': 'application/json'
},
responseType: 'stream' // 关键配置项用于开启流模式
};
await axios(config).then(function(responseStream) {
responseStream.data.pipe(res); // 将远程API返回的内容直接转发给浏览器
}).catch(error => {
console.error("Error streaming from OpenAI:", error.message);
res.end();
});
} catch(e) {
console.error("Unexpected Error:", e);
res.end();
}
}
```
上述代码片段中,`responseType: 'stream'` 是非常重要的参数,它允许 Axios 接收分块的数据而不是等待整个响应完成后再处理[^4]。
阅读全文
相关推荐


















