提交 6416b290 编写于 作者: DCloud_JSON's avatar DCloud_JSON

1.2.5

上级 71d1e584
## 1.2.5(2023-06-26)
- 修复 流式响应模式 因1.2.4更新引起的:
1. 响应未完成时,“停止响应”按钮提前隐藏的问题。
2. 点击“停止响应”按钮,会延迟执行的问题。
3. 不自动滚动到最后一条消息的问题。
## 1.2.4(2023-06-21) ## 1.2.4(2023-06-21)
- 更新 改用optimizedMessage模式,即:收到AI响应的事件,基于message事件降频得到,使用此事件可以避免非常频繁的往客户端发送请求,导致部分情况下客户端处理消息卡顿。注意:云端新增于2023年6月21日,HBuilderX本地调试将于下次发版支持。 - 更新 改用optimizedMessage模式,即:收到AI响应的事件,基于message事件降频得到,使用此事件可以避免非常频繁的往客户端发送请求,导致部分情况下客户端处理消息卡顿。注意:云端新增于2023年6月21日,HBuilderX本地调试将于下次发版支持。
## 1.2.3(2023-06-19) ## 1.2.3(2023-06-19)
......
{ {
"id": "uni-ai-chat", "id": "uni-ai-chat",
"name": "uni-ai-chat", "name": "uni-ai-chat",
"version": "1.2.4", "version": "1.2.5",
"description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体", "description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
......
export default class SliceMsgToLastMsg { export default class SliceMsgToLastMsg {
constructor(arg) { constructor(arg) {
this.$ = arg this.$ = arg
//分割显示的速度(毫秒)
this.t = 30
// 要追加的消息的创建时间
this.msgCreateTime = false
// 是否立即结束追加
this.stopAction = false
} }
// 所有待插入的消息数据 // 所有待插入的消息数据
msgs = '' msgs = ''
...@@ -13,20 +19,35 @@ export default class SliceMsgToLastMsg { ...@@ -13,20 +19,35 @@ export default class SliceMsgToLastMsg {
this.sliceMsg() this.sliceMsg()
} }
} }
end(){
this.stopAction = true
}
sliceMsg() { sliceMsg() {
if(this.stopAction === true){
return //console.log('被终止');
}
this.sliceMsgIng = true this.sliceMsgIng = true
let msg = this.msgs.slice(0, 1) let msg = this.msgs.slice(0, 1)
// console.log('msg', msg); // console.log('msg', msg);
// 更新最后一条消息的内容 // 更新最后一条消息的内容
// console.log('this.$', this.$); // console.log('this.$', this.$);
this.$.updateLastMsg(lastMsg => { this.$.updateLastMsg(lastMsg => {
if(this.msgCreateTime && this.msgCreateTime != lastMsg.create_time){
return //console.log('要追加的消息不存在了,停止');
}
this.msgCreateTime = lastMsg.create_time
lastMsg.content += msg lastMsg.content += msg
}) })
this.$.showLastMsg()
this.msgs = this.msgs.slice(1) this.msgs = this.msgs.slice(1)
if (this.msgs.length) { if (this.msgs.length) {
if(this.t){
setTimeout(() => { setTimeout(() => {
this.sliceMsg(this.msgs) this.sliceMsg(this.msgs)
}, 30); }, this.t);
}else{
this.sliceMsg(this.msgs)
}
} else { } else {
this.sliceMsgIng = false this.sliceMsgIng = false
} }
......
...@@ -414,16 +414,17 @@ ...@@ -414,16 +414,17 @@
this.insufficientScore = false this.insufficientScore = false
this.send() this.send()
}, },
//当消息涉及敏感
removeMsg(index) { removeMsg(index) {
// 如果问题还在回答中需要先关闭 // 成对删除,如果点中的是 ai 回答的内容,index -= 1
if (this.sseIndex) {
this.closeSseChannel()
}
if (this.msgList[index].isAi) { if (this.msgList[index].isAi) {
index -= 1 index -= 1
} }
// 如果删除的就是正在问的,且问题还在回答中需要先关闭
if (this.sseIndex && index == this.msgList.length - 2) {
this.closeSseChannel()
}
this.msgList.splice(index,2) this.msgList.splice(index,2)
}, },
async beforeSend() { async beforeSend() {
...@@ -573,7 +574,7 @@ ...@@ -573,7 +574,7 @@
// console.log('sseChannel',sseChannel); // console.log('sseChannel',sseChannel);
// 将多个字的文本,分割成单个字 分批插入到最末尾的消息中 // 将多个字的文本,分割成单个字 分批插入到最末尾的消息中
let sliceMsgToLastMsg = new SliceMsgToLastMsg(this) this.sliceMsgToLastMsg = new SliceMsgToLastMsg(this)
// 监听message事件 // 监听message事件
sseChannel.on('message', (message) => { sseChannel.on('message', (message) => {
// console.log('on message', message); // console.log('on message', message);
...@@ -587,7 +588,7 @@ ...@@ -587,7 +588,7 @@
create_time: Date.now() create_time: Date.now()
}) })
} else { } else {
sliceMsgToLastMsg.addMsg(message) this.sliceMsgToLastMsg.addMsg(message)
// this.updateLastMsg(lastMsg => { // this.updateLastMsg(lastMsg => {
// lastMsg.content += message // lastMsg.content += message
// }) // })
...@@ -600,6 +601,8 @@ ...@@ -600,6 +601,8 @@
// 监听end事件,如果云端执行end时传了message,会在客户端end事件内收到传递的消息 // 监听end事件,如果云端执行end时传了message,会在客户端end事件内收到传递的消息
sseChannel.on('end', (e) => { sseChannel.on('end', (e) => {
console.log('sse 结束',e) console.log('sse 结束',e)
// 更改“按字分割追加到最后一条消息“的时间间隔为0,即:一次性加载完(不再分割加载)
this.sliceMsgToLastMsg.t = 0
if(e && typeof e == 'object' && e.errCode){ if(e && typeof e == 'object' && e.errCode){
let setLastAiMsgContent = (content)=>{ let setLastAiMsgContent = (content)=>{
// console.log(content); // console.log(content);
...@@ -793,6 +796,7 @@ ...@@ -793,6 +796,7 @@
sseChannel.close() sseChannel.close()
// 设置为 false 防止重复调用closeSseChannel时出错 // 设置为 false 防止重复调用closeSseChannel时出错
sseChannel = false sseChannel = false
this.sliceMsgToLastMsg.end()
} }
// 清空历史网络请求(调用云对象)任务 // 清空历史网络请求(调用云对象)任务
uniCoTaskList.clear() uniCoTaskList.clear()
......
...@@ -270,7 +270,7 @@ module.exports = { ...@@ -270,7 +270,7 @@ module.exports = {
let promiseAllRes = await Promise.all(promiseTaskList) let promiseAllRes = await Promise.all(promiseTaskList)
console.log('Promise.all promiseRes',promiseAllRes); // console.log('Promise.all promiseRes',promiseAllRes);
res = { res = {
data:{}, data:{},
errCode:0 errCode:0
...@@ -305,8 +305,8 @@ module.exports = { ...@@ -305,8 +305,8 @@ module.exports = {
} = config } = config
// 如果客户端传了llmModel 就覆盖配置的model // 如果客户端传了llmModel 就覆盖配置的model
if (llmModel) { if (llmModel) {
if (llmModel.includes('gpt-') && (llm && llm.provider != "openai")) { if (llmModel.includes('gpt-') && (llm && !["azure","openai"].includes(llm.provider))) {
throw new Error('错误:LLM的provider不是openai,但model却选了' + llmModel + ';请参考文档:https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion 中model参数的说明') throw new Error('错误:LLM的provider不是openai或azure,但model却选了' + llmModel + ';请参考文档:https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion 中model参数的说明')
} }
chatCompletionOptions.model = llmModel chatCompletionOptions.model = llmModel
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册