我正在测试一些ChatGPT功能,并发现了如何像实时输入一样流式传输响应。
虽然我能够在本地正确地重现这个,但是由于某种原因,当我部署这个时,只有在加载完整消息后才会显示响应。
Vercel文档说明如下:
Vercel支持Next.js项目中的无服务器函数、边缘函数和React服务器组件的流。
我只能找到关于如何在stream for Edge Functions上执行此操作的文档,而不是在无服务器上。
在这里,您可以比较它在本地的工作方式,但不能比较它在部署中的工作方式:
这是回购协议:https://github.com/andna/errorsrepo,这是特定的处理程序:
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: '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',
//this key was deleted after video recording
//replace with your own free API KEY obtained here: https://platform.openai.com/account/api-keys
});
const openai = new OpenAIApi(configuration);
export default async function handler(req, res) {
try {
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
stream: true,
messages: [
{ role: "system", content: "You are an AI." },
{ role: "user", content: "how are you?" }],
}, { responseType: 'stream' });
completion.data.on('data', data => {
const lines = data.toString().split('\n').filter(line => line.trim() !== '');
res.write("<!DOCTYPE html><html><body>");
for (const line of lines) {
const message = line.replace(/^data: /, '');
if (message === '[DONE]') {
res.end();
return; // Stream finished
}
try {
const parsed = JSON.parse(message);
const content = parsed.choices[0].delta.content;
if(content){
res.write(content);
}
;
} catch(error) {
console.error('Could not JSON parse stream message', message, error);
}
}
});
} catch (error) {
console.error('An error occurred during OpenAI request', error);
}
}
任何帮助如何使它在生产工作呢?
2条答案
按热度按时间qco9c6ql1#
我理解你的问题,我在vercel社区找到了99%正确的解决方案,我和你分享这个链接,你可以去那里看看答案。
Vercel Solution Link
谢谢!祝你有美好的一天!
i7uq4tfw2#
正如@AcclaimHosting所指出的,两者之间存在许多差异。
最后使用Edge Functions而不是无服务器来完成以下示例:https://vercel.com/blog/gpt-3-app-next-js-vercel-edge-functions#the-frontend