提交 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) ## 1.0.23(2023-06-08)
- 新增 支持单独删除某一次对话(注意:一次对话包含提问和回答2条消息) - 新增 支持单独删除某一次对话(注意:一次对话包含提问和回答2条消息)
- 更新 客户端网络请求超时时间(`manifest.json`->`networkTimeout`->`request`)设置为`600000`毫秒 [详情参考](https://uniapp.dcloud.net.cn/collocation/manifest.html#networktimeout) - 更新 客户端网络请求超时时间(`manifest.json`->`networkTimeout`->`request`)设置为`600000`毫秒 [详情参考](https://uniapp.dcloud.net.cn/collocation/manifest.html#networktimeout)
......
...@@ -39,10 +39,10 @@ ...@@ -39,10 +39,10 @@
</template> </template>
</view> </view>
</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'" @click="msg.state == -100 ? retriesSendMsg() : ''" :color="msg.state===0?'#999':'#d22'"
:type="msgStateIcon(msg)" class="msgStateIcon"> :type="msgStateIcon(msg)" class="msgStateIcon">
</uni-icons> </uni-icons> -->
</view> </view>
</view> </view>
</template> </template>
...@@ -370,11 +370,19 @@ ...@@ -370,11 +370,19 @@
.more-icon { .more-icon {
color: #d4d4d4; color: #d4d4d4;
transform: rotate(90deg); transform: rotate(270deg);
position: relative; position: relative;
left: 4px; left: -8px;
font-size: 16px; font-size: 16px;
z-index: 999; z-index: 999;
padding-bottom: 5px;
height: 10px;
}
.menu-box-ai .more-icon{
left: 7px;
top: -2px;
transform: rotate(90deg);
} }
.more-menu { .more-menu {
......
{ {
"id": "uni-ai-chat", "id": "uni-ai-chat",
"name": "uni-ai-chat", "name": "uni-ai-chat",
"version": "1.0.23", "version": "1.1.0",
"description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体", "description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
......
...@@ -4,7 +4,10 @@ ...@@ -4,7 +4,10 @@
"path": "pages/chat/chat", "path": "pages/chat/chat",
"style": { "style": {
"navigationBarTitleText": "uni-ai-chat", "navigationBarTitleText": "uni-ai-chat",
"enablePullDownRefresh": false "enablePullDownRefresh": false
// #ifdef H5
,"navigationStyle": "custom"
//#endif
} }
}, { }, {
"path": "uni_modules/uni-id-pages/pages/userinfo/deactivate/deactivate", "path": "uni_modules/uni-id-pages/pages/userinfo/deactivate/deactivate",
......
此差异已折叠。
...@@ -191,8 +191,6 @@ module.exports = { ...@@ -191,8 +191,6 @@ module.exports = {
// 返回处理后的结果 // 返回处理后的结果
return result return result
}, },
// 发送消息 // 发送消息
async send({ async send({
// 消息内容 // 消息内容
...@@ -226,6 +224,31 @@ module.exports = { ...@@ -226,6 +224,31 @@ module.exports = {
} }
chatCompletionOptions.model = llmModel 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({ return await chatCompletion({
messages, //消息内容 messages, //消息内容
sseChannel, //sse渠道对象 sseChannel, //sse渠道对象
...@@ -247,6 +270,7 @@ module.exports = { ...@@ -247,6 +270,7 @@ module.exports = {
// 获取语言模型管理器 // 获取语言模型管理器
const llmManager = uniCloud.ai.getLLMManager(llm) const llmManager = uniCloud.ai.getLLMManager(llm)
// 调用chatCompletion方法,传入参数 // 调用chatCompletion方法,传入参数
// console.log('______messages',messages);
let res = await llmManager.chatCompletion({ let res = await llmManager.chatCompletion({
...chatCompletionOptions, ...chatCompletionOptions,
messages, messages,
...@@ -290,19 +314,27 @@ module.exports = { ...@@ -290,19 +314,27 @@ module.exports = {
// 计算消息总长度 // 计算消息总长度
let totalTokens = messages.map(i => i.content).join('').length; let totalTokens = messages.map(i => i.content).join('').length;
// console.log('totalTokens',totalTokens); // console.log('totalTokens',totalTokens);
// 如果不需要总结且消息总长度超过500
if (!summarize && totalTokens > 500) { // 判断:是否有‘总结’需要带上
// 获取总结 if(needSummarize){
let replySummarize = await getSummarize(messages) if(!summarizeData){
// console.log('replySummarize',replySummarize) // 如果需要等待
await new Promise((reject,resolve)=>{
getSummarizeCallbackList.push(reject)
})
// console.log('等到了总结',summarizeData);
} else{
// console.log('直接拿到总结',summarizeData);
}
// 结束sseChannel并返回总结 // 结束sseChannel并返回总结
await channel.end({ await channel.end({
summarize: replySummarize "summarize": summarizeData
}) })
} else { }else{
// 结束sseChannel // 结束sseChannel
await channel.end() await channel.end()
} }
// 返回处理结果 // 返回处理结果
resolve({ resolve({
errCode: 0 errCode: 0
...@@ -326,21 +358,26 @@ module.exports = { ...@@ -326,21 +358,26 @@ module.exports = {
}) })
}) })
} else { } else {
// 如果不需要总结 // 如果 不是正在总结
if (summarize == false) { if (summarize == false) {
// 将回复内容添加到消息列表中 // 将回复内容添加到消息列表中
messages.push({ messages.push({
"content": res.reply, "content": res.reply,
"role": "assistant" "role": "assistant"
}) })
// 计算消息总长度
let totalTokens = messages.map(i => i.content).join('').length; // 判断:是否有‘总结’需要带上
// 如果消息总长度超过500 if(needSummarize){
if (totalTokens > 500) { if(!summarizeData){
// 获取总结 // 如果需要等待
let replySummarize = await getSummarize(messages) await new Promise((reject,resolve)=>{
// 将总结添加到返回结果中 getSummarizeCallbackList.push(reject)
res.summarize = replySummarize })
// console.log('等到了总结',summarizeData);
}else{
// console.log('直接拿到总结',summarizeData);
}
res.summarize = summarizeData
} }
} }
// 如果存在错误 // 如果存在错误
...@@ -359,23 +396,32 @@ module.exports = { ...@@ -359,23 +396,32 @@ module.exports = {
//获总结 //获总结
async function getSummarize(messages) { async function getSummarize(messages) {
messages.push({ let _messages = [...messages]
_messages.push({
"content": "请简要总结上述全部对话", "content": "请简要总结上述全部对话",
"role": "user" "role": "user"
}) })
// 调用chatCompletion函数,传入messages、summarize、stream、sseChannel参数 // 调用chatCompletion函数,传入messages、summarize、stream、sseChannel参数
let res = await chatCompletion({ let res = await chatCompletion({
// 消息内容 // 消息内容
messages, messages:_messages,
// 是否需要总结 // 是否需要总结
summarize: true, summarize: true,
// 是否需要流式返回 // 是否需要流式返回
stream: false, stream: false,
// sse渠道对象 // 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.
先完成此消息的编辑!
想要评论请 注册