我希望我写给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 并可能添加更多错误处理。预先感谢。
尝试更改底部的响应线,但没有成功。然后我又恢复默认了。
试试这个:
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 一词。