You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js Express中实现AI.JSX响应流式传输

Express + AI.JSX SSE 流式响应适配方案

问题根源

你当前的实现直接将AI.JSX toTextStream 输出的纯文本写入Express响应,但AI.JSX的useAIStream钩子要求SSE响应必须遵循特定格式:每个数据块需以data: 前缀开头,内容为包含type和value字段的JSON字符串,且每个事件需以双换行符结尾。纯文本输出无法被钩子识别,导致error和current始终为null。

修正后的后端代码

routes.post("/chat-stream", async (req, res) => {
  const { system = "", user = "" } = req.body || {};

  if (!user) {
    res.sendStatus(400);
    return;
  }

  const RequestEl = getRequestEl(user, system);
  const stream = toTextStream(RequestEl);
  const reader = stream.getReader();

  // 设置SSE标准响应头
  res.setHeader("Content-Type", "text/event-stream");
  res.setHeader("Connection", "keep-alive");
  res.setHeader("Cache-Control", "no-cache");
  res.setHeader("Access-Control-Allow-Origin", "*"); // 按需配置跨域规则
  res.flushHeaders();

  const pump = async () => {
    try {
      const { value, done } = await reader.read();

      if (done) {
        // 发送流结束标记事件
        res.write(`data: ${JSON.stringify({ type: 'done' })}\n\n`);
        res.end();
        return;
      }

      // 按照AI.JSX钩子期望的格式包装数据块
      res.write(`data: ${JSON.stringify({ type: 'completion', value })}\n\n`);
      await pump();
    } catch (err) {
      console.error(err);
      // 发送错误事件
      if (!res.headersSent) {
        res.status(500);
      }
      res.write(`data: ${JSON.stringify({ type: 'error', value: err.message })}\n\n`);
      res.end();
    }
  };

  pump();
});

客户端调用注意点

确保fetchAI调用时正确指定请求方法和请求体,示例:

fetchAI({
  url: '/chat-stream',
  method: 'POST',
  body: JSON.stringify({
    system: '你的系统提示词内容',
    user: '用户的提问内容'
  }),
  headers: {
    'Content-Type': 'application/json'
  }
});

关键说明

  • 每个数据块必须包装为data: {JSON结构}\n\n的格式:type: 'completion'对应流式文本内容,type: 'done'表示流结束,type: 'error'传递错误信息
  • 必须调用res.flushHeaders()确保响应头立即发送,避免客户端因等待超时断开连接
  • 跨域场景需根据实际需求配置Access-Control-Allow-Origin等相关响应头

内容的提问来源于stack exchange,提问作者oliakaoil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:55:56