提交 28bff279 编写于 作者: DCloud_JSON's avatar DCloud_JSON

1.2.5

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