让这个云函数响应为json

问题描述 投票:0回答:1

我希望我写给chatgpt的这个firebase云函数以JSON形式响应。有人对如何修改这个有任何想法吗?截至目前,它只是返回带有“数据”的原始主体

exports.streamChat = onRequest(async (request, response) => {
    const apiKey = await getApiKey();
    const openai = new OpenAI({ apiKey });

    try {
      const stream = await openai.chat.completions.create({
        model: 'gpt-4',
        messages: [{ role: 'user', content: request.body.message }],
        stream: true,
      });

      for await (const chunk of stream) {
        const content = chunk.choices[0]?.delta?.content || '';
        if (content) {
          response.write(`data: ${content}\n\n`);
        }
      }
    } catch (error) {
      logger.error("Error during GPT-4 request", error);
      response.status(500).send("An error occurred");
    }
    logger.info("GPT-4 response", result.choices[0].message?.content);
    response.send(result.choices[0].message?.content);
}); 

有什么建议吗?这是一个基本的流媒体云功能。我想将响应类型修改为 json 并可能添加更多错误处理。预先感谢。

尝试更改底部的响应线,但没有成功。然后我又恢复默认了。

node.js firebase google-cloud-functions openai-api
1个回答
0
投票

试试这个:

exports.streamChat = onRequest(async (request, response) => {
    const apiKey = await getApiKey();
    const openai = new OpenAI({ apiKey });

    try {
      const stream = await openai.chat.completions.create({
        model: 'gpt-4o',
        response_format: {"type": "json_object"},
        messages: [{ role: 'user', content: request.body.message }],
        stream: true,
      });

      for await (const chunk of stream) {
        const content = chunk.choices[0]?.delta?.content || '';
        if (content) {
          response.write(`data: ${content}\n\n`);
        }
      }
    } catch (error) {
      logger.error("Error during GPT-4 request", error);
      response.status(500).send("An error occurred");
    }
    logger.info("GPT-4 response", result.choices[0].message?.content);
    response.send(result.choices[0].message?.content);
});

关键是:

response_format: {"type": "json_object"},

我无法直接测试它,但它是基于我使用的Python代码。请注意,这不适用于 GPT-4。您需要使用 GPT-4o。此外,消息内容中必须包含 JSON 一词。

© www.soinside.com 2019 - 2024. All rights reserved.