接入大模型,前端怎么调用流式输出接口
如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!
接入大模型,前端怎么调用流式输出接口
传统情况下我们使用axios调用接口,将response转换成json后就可以直接使用了。 但是使用大模型的时候,因为以下几种原因,传统模式已经不再试用了。
- 对应响应内容还有多少服务器端自己也不清楚
- 响应内容可能很多,用户不可能长期等待服务端的响应,所以需要有多少数据就传输多少数据。 这种边生成数据边给客户端输出的这种形式成为流式输出。
实测发现使用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,得到完成的响应内容。
- 分类:
- Web前端
更新时间:
上一篇:记录接入微信支付JSAP Native遇到的坑下一篇:到顶了