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

1.2.4

上级 6de49f50
...@@ -2,4 +2,10 @@ ...@@ -2,4 +2,10 @@
- HBuilderX正式版 3.7.10+ - HBuilderX正式版 3.7.10+
- HBuilderX alpha版 3.8.0+ - HBuilderX alpha版 3.8.0+
### 文档已移至uni-ai-chat文档[https://uniapp.dcloud.net.cn/uniCloud/uni-ai-chat.html](https://uniapp.dcloud.net.cn/uniCloud/uni-ai-chat.html) ### 文档已移至uni-ai-chat文档[https://uniapp.dcloud.net.cn/uniCloud/uni-ai-chat.html](https://uniapp.dcloud.net.cn/uniCloud/uni-ai-chat.html)
\ No newline at end of file
### 在线体验
地址:[https://chat.dcloud.net.cn](https://chat.dcloud.net.cn/#/)
注意:需要使用HBuilder账号登录,限制:5条消息/账号/天
\ No newline at end of file
## 简介 ## 简介
> 支持HBuilder版本,正式版 3.7.10+,alpha版 3.8.0+ > 支持HBuilder版本,正式版 3.7.10+,Alpha版 3.8.0+
`uni-ai-chat`是基于[uni-ai](uni-ai.md)的聊天项目模板。它包含一个前端页面(路径:`/pages/chat/chat.vue`)和一个云对象(路径:`uniCloud/cloudfunctions/uni-ai-chat/index.obj.js`) `uni-ai-chat`是基于[uni-ai](uni-ai.md)的聊天项目模板。它包含一个前端页面(路径:`/pages/chat/chat.vue`)和一个云对象(路径:`uniCloud/cloudfunctions/uni-ai-chat/index.obj.js`)
...@@ -9,7 +9,13 @@ ...@@ -9,7 +9,13 @@
**插件下载地址:[https://ext.dcloud.net.cn/plugin?name=uni-ai-chat](https://ext.dcloud.net.cn/plugin?name=uni-ai-chat)** **插件下载地址:[https://ext.dcloud.net.cn/plugin?name=uni-ai-chat](https://ext.dcloud.net.cn/plugin?name=uni-ai-chat)**
视频效果: 视频效果:
<video controls src="https://web-assets.dcloud.net.cn/unidoc/zh/uni-ai-chat/uni-ai-stream.mov" style="max-width: 100%; max-height: 70vh;"></video> <video controls src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-ai-chat/uni-ai-stream.mov" style="max-width: 100%; max-height: 70vh;"></video>
### 示例项目
地址:[https://chat.dcloud.net.cn](https://chat.dcloud.net.cn/#/)
注意:需要使用HBuilder账号登录,限制:5条消息/账号/天
## 体验步骤 ## 体验步骤
...@@ -21,7 +27,7 @@ ...@@ -21,7 +27,7 @@
6. 对项目根目录uniCloud点右键选择“云服务空间初始化向导”界面按提示部署项目 6. 对项目根目录uniCloud点右键选择“云服务空间初始化向导”界面按提示部署项目
7. 在uni-app项目点右键,关联之前创建的服务空间。 7. 在uni-app项目点右键,关联之前创建的服务空间。
8. 运行启动。 8. 运行启动。
9. 如果需要stream流式响应,需要在[dev.dcloud.net.cn](https://dev.dcloud.net.cn)的uni-push2中开通你的应用,然后把云函数上传到uniCloud服务空间,并且运行时在HBuilderX控制台选择`连接云端云函数` 9. 如果需要stream流式响应,需要在[dev.dcloud.net.cn](https://dev.dcloud.net.cn)的uni-push2中开通你的应用
## 配置 @config ## 配置 @config
文件路径 `uniCloud/cloudfunctions/common/uni-config-center/uni-ai-chat/config.json` 文件路径 `uniCloud/cloudfunctions/common/uni-config-center/uni-ai-chat/config.json`
...@@ -35,7 +41,7 @@ ...@@ -35,7 +41,7 @@
| earnedScore | object | - | 配置积分的获取策略 | | earnedScore | object | - | 配置积分的获取策略 |
| &nbsp;&nbsp;&#124;-&nbsp;ad | Number | 3 | 观看1次广告可获得的积分数量 | | &nbsp;&nbsp;&#124;-&nbsp;ad | Number | 3 | 观看1次广告可获得的积分数量 |
| &nbsp;&nbsp;&#124;-&nbsp;price | Number | 3 | 支付1元可获得的积分数量(暂未支持) | | &nbsp;&nbsp;&#124;-&nbsp;price | Number | 3 | 支付1元可获得的积分数量(暂未支持) |
| chatCompletionOptions | Object | - | 支持配置:`model`,`tokensToGenerate`(默认值:512),`temperature`,`topP` </br> 详情查看:[https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion](https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion)| | chatCompletionOptions | Object | - | 支持配置:`model`,`deploymentId`,`tokensToGenerate`(默认值:512),`temperature`,`topP` </br> 详情查看:[https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion](https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion)|
| llm | Object | - | 大语言模型配置,详情查看:[https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#get-llm-manager](https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#get-llm-manager) | | llm | Object | - | 大语言模型配置,详情查看:[https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#get-llm-manager](https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#get-llm-manager) |
这里内置的内容安全是基于`uni-sec-check`插件,它是免费的,但有一些限制条件,请务必阅读该插件的文档:[https://uniapp.dcloud.net.cn/uniCloud/uni-sec-check.html](uni-sec-check.md) 这里内置的内容安全是基于`uni-sec-check`插件,它是免费的,但有一些限制条件,请务必阅读该插件的文档:[https://uniapp.dcloud.net.cn/uniCloud/uni-sec-check.html](uni-sec-check.md)
...@@ -58,14 +64,12 @@ ...@@ -58,14 +64,12 @@
流式响应的流程图 流式响应的流程图
<img width="500px" src="https://web-assets.dcloud.net.cn/unidoc/zh/uni-ai-chat/20230425203311.jpg"> <img width="500px" src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-ai-chat/20230425203311.jpg">
流式响应的使用需客户端先通过 `new uniCloud.SSEChannel()` 创建 SSE 通道,并获得 `channel` 值(详情请参考:[https://uniapp.dcloud.net.cn/uniCloud/sse-channel.html#create-sse-channel](https://uniapp.dcloud.net.cn/uniCloud/sse-channel.html#create-sse-channel))。在客户端向 uniCloud 云对象发起请求时,需要将该 `channel` 值作为参数一同携带;然后 uniCloud 云对象与 uni-ai 建立 流式响应[(stream)](https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion-stream) 通讯,云对象监听 uni-ai 返回的分片数据,在接收到数据后再通过 sse-channel ([反序列化消息通道](https://uniapp.dcloud.net.cn/uniCloud/sse-channel.html#cloud-deserialize-channel))向客户端推送消息。 流式响应的使用需客户端先通过 `new uniCloud.SSEChannel()` 创建 SSE 通道,并获得 `channel` 值(详情请参考:[https://uniapp.dcloud.net.cn/uniCloud/sse-channel.html#create-sse-channel](https://uniapp.dcloud.net.cn/uniCloud/sse-channel.html#create-sse-channel))。在客户端向 uniCloud 云对象发起请求时,需要将该 `channel` 值作为参数一同携带;然后 uniCloud 云对象与 uni-ai 建立 流式响应[(stream)](https://uniapp.dcloud.net.cn/uniCloud/uni-ai.html#chat-completion-stream) 通讯,云对象监听 uni-ai 返回的分片数据,在接收到数据后再通过 sse-channel ([反序列化消息通道](https://uniapp.dcloud.net.cn/uniCloud/sse-channel.html#cloud-deserialize-channel))向客户端推送消息。
### 注意事项 @heed ### 注意事项 @heed
- 使用`sse-channel`需要先[开通uni-push](https://uniapp.dcloud.net.cn/unipush-v2.html#%E7%AC%AC%E4%B8%80%E6%AD%A5-%E5%BC%80%E9%80%9A) - 使用`sse-channel`需要先[开通uni-push](https://uniapp.dcloud.net.cn/unipush-v2.html#%E7%AC%AC%E4%B8%80%E6%AD%A5-%E5%BC%80%E9%80%9A)
- 目前uni-push2.0不支持本地调试(后续版本会支持),需要在HBuilderX控制台,更改`连接本地云函数``连接云端云函数`
## 营运专题@ad ## 营运专题@ad
v1.0.3起提供了商业化能力,与uni-ai对话消耗积分。 v1.0.3起提供了商业化能力,与uni-ai对话消耗积分。
...@@ -75,14 +79,14 @@ v1.0.3起提供了商业化能力,与uni-ai对话消耗积分。 ...@@ -75,14 +79,14 @@ v1.0.3起提供了商业化能力,与uni-ai对话消耗积分。
**平台差异说明** **平台差异说明**
|App|H5|微信小程序|支付宝小程序|百度小程序|字节跳动小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序| |App|H5|微信小程序|支付宝小程序|百度小程序|抖音小程序|QQ小程序|快应用|360小程序|快手小程序|京东小程序|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|√(3.4.8+)|x|√(3.4.8+)|x|x|x|x|x|x|x|x| |√(3.4.8+)|x|√(3.4.8+)|x|x|x|x|x|x|x|x|
### 流程概述 ### 流程概述
1. 开通广告;在[uni-ad](https://uniad.dcloud.net.cn/)官网点击菜单`广告设置`在应用列表,找到你的应用点击`开通广告` 1. 开通广告;在[uni-ad](https://uniad.dcloud.net.cn/)官网点击菜单`广告设置`在应用列表,找到你的应用点击`开通广告`
2. 创建激励视频广告位;在[应用列表](https://uniad.dcloud.net.cn/list/app)点击`应用详情`再点击`新建广告位`;如下图:广告类型选`激励视频广告`,配置服务器回调,选uni-ai-chat部署的uniCloud服务空间,回调云函数名称选:`reward-video-callback` 2. 创建激励视频广告位;在[应用列表](https://uniad.dcloud.net.cn/list/app)点击`应用详情`再点击`新建广告位`;如下图:广告类型选`激励视频广告`,配置服务器回调,选uni-ai-chat部署的uniCloud服务空间,回调云函数名称选:`reward-video-callback`
<img width="500px" src="https://dcloud-chjh-web.oss-cn-hangzhou.aliyuncs.com/unidoc/zh/uni-ai-chat/uni-ai-chat-create-adpid.jpg"> <img width="500px" src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-ai-chat/uni-ai-chat-create-adpid.jpg">
**微信小程序端注意**: **微信小程序端注意**:
- 参考:[uniAD微信小程序广告开通指南](https://ask.dcloud.net.cn/article/39928)开通广告后会自动创建广告位 - 参考:[uniAD微信小程序广告开通指南](https://ask.dcloud.net.cn/article/39928)开通广告后会自动创建广告位
...@@ -226,9 +230,6 @@ module.exports = async (obj) => { ...@@ -226,9 +230,6 @@ module.exports = async (obj) => {
- **错误信息:"Wx0e203209e27b1e66 插件未授权使用 添加插住(env: Windows,mp,1.06.2303060;1ib: 2.31.1)"** - **错误信息:"Wx0e203209e27b1e66 插件未授权使用 添加插住(env: Windows,mp,1.06.2303060;1ib: 2.31.1)"**
请参考文档:[uniAD微信小程序广告开通指南](https://ask.dcloud.net.cn/article/39928) 请参考文档:[uniAD微信小程序广告开通指南](https://ask.dcloud.net.cn/article/39928)
- **错误信息:"errMsg: "getPushClientId:fail uniPush is not enabled"**
需要在[dev.dcloud.net.cn](https://dev.dcloud.net.cn)的uni-push2中开通你的应用,更多uni-push2的介绍 详情参考[https://uniapp.dcloud.net.cn/unipush-v2.html](https://uniapp.dcloud.net.cn/unipush-v2.html)
## 其他 ## 其他
DCloud基于`uni-ai`提供了很多开源模板,除了本项目`uni-ai-chat`,还有: DCloud基于`uni-ai`提供了很多开源模板,除了本项目`uni-ai-chat`,还有:
......
## 1.2.4(2023-06-21)
- 更新 改用optimizedMessage模式,即:收到AI响应的事件,基于message事件降频得到,使用此事件可以避免非常频繁的往客户端发送请求,导致部分情况下客户端处理消息卡顿。注意:云端新增于2023年6月21日,HBuilderX本地调试将于下次发版支持。
## 1.2.3(2023-06-19) ## 1.2.3(2023-06-19)
- 更新 默认不启用(注释掉)广告组件`uni-ad-rewarded-video` - 更新 默认不启用(注释掉)广告组件`uni-ad-rewarded-video`
## 1.2.2(2023-06-16) ## 1.2.2(2023-06-16)
......
{ {
"id": "uni-ai-chat", "id": "uni-ai-chat",
"name": "uni-ai-chat", "name": "uni-ai-chat",
"version": "1.2.3", "version": "1.2.4",
"description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体", "description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
......
export default class SliceMsgToLastMsg {
constructor(arg) {
this.$ = arg
}
// 所有待插入的消息数据
msgs = ''
// 是否正在分割消息数据
sliceMsgIng = false
addMsg(msg) {
// console.log('msg', msg);
this.msgs += msg
if (this.sliceMsgIng === false) {
this.sliceMsg()
}
}
sliceMsg() {
this.sliceMsgIng = true
let msg = this.msgs.slice(0, 1)
// console.log('msg', msg);
// 更新最后一条消息的内容
// console.log('this.$', this.$);
this.$.updateLastMsg(lastMsg => {
lastMsg.content += msg
})
this.msgs = this.msgs.slice(1)
if (this.msgs.length) {
setTimeout(() => {
this.sliceMsg(this.msgs)
}, 30);
} else {
this.sliceMsgIng = false
}
}
}
\ No newline at end of file
...@@ -72,7 +72,9 @@ ...@@ -72,7 +72,9 @@
import config from '@/config.js'; import config from '@/config.js';
// 导入uniCloud云对象task模块 // 导入uniCloud云对象task模块
import uniCoTask from '@/common/unicloud-co-task.js'; import uniCoTask from '@/common/unicloud-co-task.js';
// 导入 将多个字消息文本,分割成单个字 分批插入到最末尾的消息中 的类
import SliceMsgToLastMsg from './SliceMsgToLastMsg.js';
// 收集所有执行云对象的任务列表 // 收集所有执行云对象的任务列表
let uniCoTaskList = [] let uniCoTaskList = []
// 定义终止并清空 云对象的任务列表中所有 任务的方法 // 定义终止并清空 云对象的任务列表中所有 任务的方法
...@@ -565,10 +567,13 @@ ...@@ -565,10 +567,13 @@
// 流式响应和云对象的请求结束回调函数 // 流式响应和云对象的请求结束回调函数
let sseEnd,requestEnd; let sseEnd,requestEnd;
// 判断是否开启了流式响应模式 // 判断是否开启了流式响应模式
if (this.enableStream) { if (this.enableStream) {
// 创建消息通道 // 创建消息通道
sseChannel = new uniCloud.SSEChannel() sseChannel = new uniCloud.SSEChannel()
// console.log('sseChannel',sseChannel); // console.log('sseChannel',sseChannel);
// 将多个字的文本,分割成单个字 分批插入到最末尾的消息中
let sliceMsgToLastMsg = new SliceMsgToLastMsg(this)
// 监听message事件 // 监听message事件
sseChannel.on('message', (message) => { sseChannel.on('message', (message) => {
// console.log('on message', message); // console.log('on message', message);
...@@ -581,16 +586,17 @@ ...@@ -581,16 +586,17 @@
content: message, content: message,
create_time: Date.now() create_time: Date.now()
}) })
} else { } else {
this.updateLastMsg(lastMsg => { sliceMsgToLastMsg.addMsg(message)
lastMsg.content += message // this.updateLastMsg(lastMsg => {
}) // lastMsg.content += message
// })
} }
this.showLastMsg() this.showLastMsg()
// 让流式响应计数值递增 // 让流式响应计数值递增
this.sseIndex++ this.sseIndex++
}) })
// 监听end事件,如果云端执行end时传了message,会在客户端end事件内收到传递的消息 // 监听end事件,如果云端执行end时传了message,会在客户端end事件内收到传递的消息
sseChannel.on('end', (e) => { sseChannel.on('end', (e) => {
console.log('sse 结束',e) console.log('sse 结束',e)
......
...@@ -320,7 +320,8 @@ module.exports = { ...@@ -320,7 +320,8 @@ module.exports = {
...chatCompletionOptions, ...chatCompletionOptions,
messages, messages,
stream:stream && sseChannel !== false, stream:stream && sseChannel !== false,
sseChannel sseChannel,
streamEventForSSE:"optimizedMessage"
}) })
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册