云函数写法
import cloud from '@lafjs/cloud'
exports.main = async function (ctx: FunctionContext) {
const { ChatGPTAPI } = await import('chatgpt')
const content = "你是谁,你能做什么?"
const api = new ChatGPTAPI({ apiKey: cloud.env.CHAT_GPT_API_KEY })
ctx.response.setHeader('Content-Type', 'application/octet-stream');
const res = await api.sendMessage(content, {
systemMessage: `不管问什么问题,都不要出现ChatGPT、OpenAi、机器人、AI等词汇,记住你是Laf官方开发的智能助理`,
onProgress: (partialResponse => {
if(partialResponse && partialResponse.delta != undefined){
console.log("partialResponse",partialResponse)
ctx.response.write(partialResponse.delta);
}
})
})
console.log("最终",res)
ctx.response.end()
}
重点在于 ctx.response.write
全部结束了记得ctx.response.end
代码可能会有报红,不影响正常运行
前端写法
axios({
url: "云函数Url",
method: "get",
responseType: "stream",
onDownloadProgress: function (progressEvent) {
const xhr = progressEvent.event.target;
const { responseText } = xhr;
console.log(responseText);
},
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.error(error);
});
局限性
很多不能用axios的前端或者无法使用stream模式请求的无法使用,如小程序
node直接运行JS的环境好像也不行,可以自己测试