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

1.1.0

- 【重要】优化`uni-ai-chat`云对象的`send`方法性能(并发:“普通消息对话”和“获得内容总结”),大幅提高会话响应速度。
- 修复 手机端 当消息列表数据不满一屏幕时,键盘弹出后看不到历史消息
- 修复 单独删除最后一次对话后,新的最后一条对话消息没有`换答案`按钮
- 修复 当消息发送失败 重新发送消息按钮图标与 复制和删除消息按钮 样式重叠的问题
上级 4948c67c
## 1.1.0(2023-06-09)
- 【重要】优化`uni-ai-chat`云对象的`send`方法性能(并发:“普通消息对话”和“获得内容总结”),大幅提高会话响应速度。
- 修复 手机端 当消息列表数据不满一屏幕时,键盘弹出后看不到历史消息
- 修复 单独删除最后一次对话后,新的最后一条对话消息没有`换答案`按钮
- 修复 当消息发送失败 重新发送消息按钮图标与 复制和删除消息按钮 样式重叠的问题
## 1.0.23(2023-06-08)
- 新增 支持单独删除某一次对话(注意:一次对话包含提问和回答2条消息)
- 更新 客户端网络请求超时时间(`manifest.json`->`networkTimeout`->`request`)设置为`600000`毫秒 [详情参考](https://uniapp.dcloud.net.cn/collocation/manifest.html#networktimeout)
......
......@@ -39,10 +39,10 @@
</template>
</view>
</view>
<uni-icons v-if="isLastMsg && !msg.isAi && msg.state != 100 && msgStateIcon(msg)"
<!-- <uni-icons v-if="isLastMsg && !msg.isAi && msg.state != 100 && msgStateIcon(msg)"
@click="msg.state == -100 ? retriesSendMsg() : ''" :color="msg.state===0?'#999':'#d22'"
:type="msgStateIcon(msg)" class="msgStateIcon">
</uni-icons>
</uni-icons> -->
</view>
</view>
</template>
......@@ -370,11 +370,19 @@
.more-icon {
color: #d4d4d4;
transform: rotate(90deg);
transform: rotate(270deg);
position: relative;
left: 4px;
left: -8px;
font-size: 16px;
z-index: 999;
padding-bottom: 5px;
height: 10px;
}
.menu-box-ai .more-icon{
left: 7px;
top: -2px;
transform: rotate(90deg);
}
.more-menu {
......
{
"id": "uni-ai-chat",
"name": "uni-ai-chat",
"version": "1.0.23",
"version": "1.1.0",
"description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体",
"main": "main.js",
"scripts": {
......
......@@ -4,7 +4,10 @@
"path": "pages/chat/chat",
"style": {
"navigationBarTitleText": "uni-ai-chat",
"enablePullDownRefresh": false
"enablePullDownRefresh": false
// #ifdef H5
,"navigationStyle": "custom"
//#endif
}
}, {
"path": "uni_modules/uni-id-pages/pages/userinfo/deactivate/deactivate",
......
此差异已折叠。
......@@ -191,8 +191,6 @@ module.exports = {
// 返回处理后的结果
return result
},
// 发送消息
async send({
// 消息内容
......@@ -226,6 +224,31 @@ module.exports = {
}
chatCompletionOptions.model = llmModel
}
// 判断是否需要总结,如果需要就开始总结
// 计算消息总长度,判断是否需要总结
let needSummarize = messages.map(i => i.content).join('').length > 50,
// 总结的内容默认为 false 表示没有内容或者暂未拿到
summarizeData = false,
//成功拿到总结内容的回调函数列表
getSummarizeCallbackList = []
console.log('needSummarize',needSummarize);
if (needSummarize) {
// 获取总结
let replySummarize = getSummarize(messages)
.then((replySummarize)=>{
// console.log('replySummarize1',replySummarize);
summarizeData = replySummarize
getSummarizeCallbackList.forEach(fun=>fun())
})
.catch((error)=>{
// 抛出错误
throw error
})
}
return await chatCompletion({
messages, //消息内容
sseChannel, //sse渠道对象
......@@ -247,6 +270,7 @@ module.exports = {
// 获取语言模型管理器
const llmManager = uniCloud.ai.getLLMManager(llm)
// 调用chatCompletion方法,传入参数
// console.log('______messages',messages);
let res = await llmManager.chatCompletion({
...chatCompletionOptions,
messages,
......@@ -290,19 +314,27 @@ module.exports = {
// 计算消息总长度
let totalTokens = messages.map(i => i.content).join('').length;
// console.log('totalTokens',totalTokens);
// 如果不需要总结且消息总长度超过500
if (!summarize && totalTokens > 500) {
// 获取总结
let replySummarize = await getSummarize(messages)
// console.log('replySummarize',replySummarize)
// 判断:是否有‘总结’需要带上
if(needSummarize){
if(!summarizeData){
// 如果需要等待
await new Promise((reject,resolve)=>{
getSummarizeCallbackList.push(reject)
})
// console.log('等到了总结',summarizeData);
} else{
// console.log('直接拿到总结',summarizeData);
}
// 结束sseChannel并返回总结
await channel.end({
summarize: replySummarize
"summarize": summarizeData
})
} else {
}else{
// 结束sseChannel
await channel.end()
}
// 返回处理结果
resolve({
errCode: 0
......@@ -326,21 +358,26 @@ module.exports = {
})
})
} else {
// 如果不需要总结
// 如果 不是正在总结
if (summarize == false) {
// 将回复内容添加到消息列表中
messages.push({
"content": res.reply,
"role": "assistant"
})
// 计算消息总长度
let totalTokens = messages.map(i => i.content).join('').length;
// 如果消息总长度超过500
if (totalTokens > 500) {
// 获取总结
let replySummarize = await getSummarize(messages)
// 将总结添加到返回结果中
res.summarize = replySummarize
// 判断:是否有‘总结’需要带上
if(needSummarize){
if(!summarizeData){
// 如果需要等待
await new Promise((reject,resolve)=>{
getSummarizeCallbackList.push(reject)
})
// console.log('等到了总结',summarizeData);
}else{
// console.log('直接拿到总结',summarizeData);
}
res.summarize = summarizeData
}
}
// 如果存在错误
......@@ -359,23 +396,32 @@ module.exports = {
//获总结
async function getSummarize(messages) {
messages.push({
let _messages = [...messages]
_messages.push({
"content": "请简要总结上述全部对话",
"role": "user"
})
// 调用chatCompletion函数,传入messages、summarize、stream、sseChannel参数
let res = await chatCompletion({
// 消息内容
messages,
messages:_messages,
// 是否需要总结
summarize: true,
// 是否需要流式返回
stream: false,
// sse渠道对象
sseChannel: false
sseChannel: false ,
// 大语言模型配置
llm
})
//故意延迟看看,总结比答案晚,是否成功进入等的逻辑
//function sleep(time) { return new Promise(resolve => setTimeout(resolve, time)); }
// await sleep(10000)
// console.log('getSummarize',res);
// 返回总结的文字内容
return res.reply
return res.data.reply
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册