NodeJS 如何流式传输Vercel无服务器函数?它在本地运行,但部署后无法运行

2fjabf4q  于 2023-03-17  发布在  Node.js
关注(0)|答案(2)|浏览(206)

我正在测试一些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);
    }


}

任何帮助如何使它在生产工作呢?

qco9c6ql

qco9c6ql1#

我理解你的问题,我在vercel社区找到了99%正确的解决方案,我和你分享这个链接,你可以去那里看看答案。
Vercel Solution Link
谢谢!祝你有美好的一天!

i7uq4tfw

i7uq4tfw2#

正如@AcclaimHosting所指出的,两者之间存在许多差异。
最后使用Edge Functions而不是无服务器来完成以下示例:https://vercel.com/blog/gpt-3-app-next-js-vercel-edge-functions#the-frontend

相关问题