From ca1b879a17963abb20848624aa21f1e274d6160c Mon Sep 17 00:00:00 2001 From: DCloud__JSON Date: Fri, 12 May 2023 15:24:53 +0800 Subject: [PATCH] =?UTF-8?q?1.0.6=20=E4=BF=AE=E5=A4=8D=20=E6=B5=81=E5=BC=8F?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=A8=A1=E5=BC=8F=EF=BC=8CAI=E5=9B=9E?= =?UTF-8?q?=E7=AD=94=E5=86=85=E5=AE=B9=E5=9C=A8=E5=BC=80=E5=A4=B4=E4=B8=8D?= =?UTF-8?q?=E6=B6=89=E5=8F=8A=E6=95=8F=E6=84=9F=EF=BC=8C=E5=90=8E=E7=BB=AD?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E6=B6=89=E5=8F=8A=E6=95=8F=E6=84=9F=E7=9A=84?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=20=E5=8D=A1=E4=BD=8F=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.md | 2 ++ package.json | 2 +- pages/chat/chat.vue | 34 ++++++++++++------- .../cloudfunctions/uni-ai-chat/index.obj.js | 29 +++++++++++----- 4 files changed, 44 insertions(+), 23 deletions(-) diff --git a/changelog.md b/changelog.md index b896180..4860ea1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,5 @@ +## 1.0.6(2023-05-12) +- 修复 流式响应模式,AI回答内容在开头不涉及敏感,后续内容涉及敏感的场景 卡住会话的问题 ## 1.0.5(2023-05-11) - 新增代码注释 ## 1.0.4(2023-05-10) diff --git a/package.json b/package.json index 5de8494..3331ac7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "id": "uni-ai-chat", "name": "uni-ai-chat", - "version": "1.0.5", + "version": "1.0.6", "description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体", "main": "main.js", "scripts": { diff --git a/pages/chat/chat.vue b/pages/chat/chat.vue index 253442b..f611dc0 100644 --- a/pages/chat/chat.vue +++ b/pages/chat/chat.vue @@ -382,10 +382,8 @@ // 展示最后一条消息 this.showLastMsg() // dom加载完成后 清空文本内容 - console.log(999999) this.$nextTick(() => { this.content = '' - console.log(101010) }) this.send() // 发送消息 }, @@ -461,15 +459,24 @@ sseChannel.on('end', (e) => { // console.log('on end', e); // 如果e存在且包含summarize或insufficientScore属性 - if (e && (e.summarize || e.insufficientScore)) { + if (e) { // 更新最后一条消息 this.updateLastMsg(lastMsg => { + // 如果e包含illegal属性 + if (e.illegal) { + // 将最后一条消息的illegal属性更新为e的illegal属性 + lastMsg.illegal = e.illegal + lastMsg.content = "内容涉及敏感" + // 倒数第二条(用户发问内容)也需要设置illegal的值 + this.msgList[this.msgList.length - 2].illegal = e.illegal + } // 如果e包含summarize属性 - if (e.summarize) { + else if (e.summarize) { // 将最后一条消息的summarize属性更新为e的summarize属性 lastMsg.summarize = e.summarize - // 如果e包含insufficientScore属性 - } else if (e.insufficientScore) { + } + // 如果e包含insufficientScore属性 + else if (e.insufficientScore) { // 将最后一条消息的insufficientScore属性更新为e的insufficientScore属性 lastMsg.insufficientScore } @@ -498,12 +505,11 @@ }) .then(res => { // console.log(111,res); - - // 更新最后一条消息的状态为100(发送成功) - this.updateLastMsg({ - state: 100 - }) - if (res.data) { + if (!sseChannel && res.data) { + // 更新最后一条消息的状态为100(发送成功) + this.updateLastMsg({ + state: 100 + }) // console.log(res, res.reply); // 判断是否要跳过本次回调,防止请求未返回时,历史对话已被清空。引起对话顺序错误 导致 对话输入框卡住 if (!skip_callback) { @@ -528,7 +534,9 @@ illegal }) // 滚动窗口以显示最新的一条消息 - this.showLastMsg() + this.$nextTick(()=>{ + this.showLastMsg() + }) } else { console.log('用户点击了清空按钮,跳过前一次请求的回调', res.data.reply); } diff --git a/uniCloud-aliyun/cloudfunctions/uni-ai-chat/index.obj.js b/uniCloud-aliyun/cloudfunctions/uni-ai-chat/index.obj.js index cb754b1..200ed26 100644 --- a/uniCloud-aliyun/cloudfunctions/uni-ai-chat/index.obj.js +++ b/uniCloud-aliyun/cloudfunctions/uni-ai-chat/index.obj.js @@ -127,8 +127,12 @@ module.exports = { console.log('_after',{error,result}); // 如果有错误 if(error){ + if(error.errCode && error.errMsg) { + // 符合响应体规范的错误,直接返回 + return error + } // 如果是内容安全检测错误 - if(error.errCode == "60004" || error == "uni-sec-check:illegalData" ) { + else if(error == "uni-sec-check:illegalData" ) { // 返回一个包含敏感内容提示和标记的响应体 return { "data": { @@ -137,11 +141,7 @@ module.exports = { }, "errCode": 0 } - }else if(error.errCode && error.errMsg) { - // 如果是符合响应体规范的错误 - // 符合响应体规范的错误,直接返回 - return error - } + } // 如果是积分不足错误 else if(error == 'insufficientScore'){ // 设置回复内容 @@ -299,9 +299,20 @@ module.exports = { }) }) // 返回错误 - res.on('error', (err) => { - console.error('---error----', err) - reject(err) + res.on('error',async (error) => { + // 特殊处理 uni-ai默认服务商检测到内容涉及敏感的错误 + if(error.errCode == "60004"){ + await channel.write("内容涉及敏感") + // 结束sseChannel并返回 illegal:true 表示内容涉及敏感 + await channel.end({ + illegal: true + }) + return resolve({ + errCode: 0 + }) + } + console.error('---error----', error) + reject(error) }) }) } else { -- GitLab