道招

接入大模型,前端怎么调用流式输出接口

如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!

接入大模型,前端怎么调用流式输出接口

传统情况下我们使用axios调用接口,将response转换成json后就可以直接使用了。 但是使用大模型的时候,因为以下几种原因,传统模式已经不再试用了。

  1. 对应响应内容还有多少服务器端自己也不清楚
  2. 响应内容可能很多,用户不可能长期等待服务端的响应,所以需要有多少数据就传输多少数据。 这种边生成数据边给客户端输出的这种形式成为流式输出

实测发现使用axios即使将相应设置成responseType: 'stream'也没什么效果,使用原生的fetch可以轻松应对。

async function streamDeepSeekResponse(prompt) {
  const response = await fetch('https://api.deepseek.com/chat/completions', {
    method: 'POST',
    body: JSON.stringify({
      token: 'token',
    })
  });

  if (!response.ok) {
    throw new Error(`API request failed with status ${response.status}`);
  }

  const reader = response.body.getReader();
  const decoder = new TextDecoder();
  let result = '';

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;

    const chunk = decoder.decode(value, { stream: true });
    const lines = chunk.split('\n').filter(line => line.trim() !== '');

    for (const line of lines) {
      const message = line.replace(/^data: /, '');
      if (message === '[DONE]') {
        return result;
      }

      try {
        const parsed = JSON.parse(message);
        const content = parsed.choices[0]?.delta?.content || '';
        result += content;
        document.getElementById('stream-output').textContent += content;
      } catch (error) {
        console.error('Error parsing message:', error);
      }
    }
  }

  return result;
}

我们通过while循环,逐步reader.read(),直到结束,然后通过result承接每次得到的content,得到完成的响应内容。

更新时间:
上一篇:记录接入微信支付JSAP Native遇到的坑下一篇:到顶了

相关文章

关注道招网公众帐号
友情链接
消息推送
道招网关注互联网,分享IT资讯,前沿科技、编程技术,是否允许文章更新后推送通知消息。
允许
不用了