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

1.2.4

上级 6de49f50
......@@ -2,4 +2,10 @@
- HBuilderX正式版 3.7.10+
- 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)
\ No newline at end of file
### 文档已移至uni-ai-chat文档[https://uniapp.dcloud.net.cn/uniCloud/uni-ai-chat.html](https://uniapp.dcloud.net.cn/uniCloud/uni-ai-chat.html)
### 在线体验
地址:[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`)
......@@ -9,7 +9,13 @@
**插件下载地址:[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 @@
6. 对项目根目录uniCloud点右键选择“云服务空间初始化向导”界面按提示部署项目
7. 在uni-app项目点右键,关联之前创建的服务空间。
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
文件路径 `uniCloud/cloudfunctions/common/uni-config-center/uni-ai-chat/config.json`
......@@ -35,7 +41,7 @@
| earnedScore | object | - | 配置积分的获取策略 |
| &nbsp;&nbsp;&#124;-&nbsp;ad | 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) |
这里内置的内容安全是基于`uni-sec-check`插件,它是免费的,但有一些限制条件,请务必阅读该插件的文档:[https://uniapp.dcloud.net.cn/uniCloud/uni-sec-check.html](uni-sec-check.md)
......@@ -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))向客户端推送消息。
### 注意事项 @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)
- 目前uni-push2.0不支持本地调试(后续版本会支持),需要在HBuilderX控制台,更改`连接本地云函数``连接云端云函数`
## 营运专题@ad
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|
### 流程概述
1. 开通广告;在[uni-ad](https://uniad.dcloud.net.cn/)官网点击菜单`广告设置`在应用列表,找到你的应用点击`开通广告`
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)开通广告后会自动创建广告位
......@@ -226,9 +230,6 @@ module.exports = async (obj) => {
- **错误信息:"Wx0e203209e27b1e66 插件未授权使用 添加插住(env: Windows,mp,1.06.2303060;1ib: 2.31.1)"**
请参考文档:[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`,还有:
......
## 1.2.4(2023-06-21)
- 更新 改用optimizedMessage模式,即:收到AI响应的事件,基于message事件降频得到,使用此事件可以避免非常频繁的往客户端发送请求,导致部分情况下客户端处理消息卡顿。注意:云端新增于2023年6月21日,HBuilderX本地调试将于下次发版支持。
## 1.2.3(2023-06-19)
- 更新 默认不启用(注释掉)广告组件`uni-ad-rewarded-video`
## 1.2.2(2023-06-16)
......
{
"id": "uni-ai-chat",
"name": "uni-ai-chat",
"version": "1.2.3",
"version": "1.2.4",
"description": "基于uni-ai的聊天示例项目,支持流式、支持前文总结,云端一体",
"main": "main.js",
"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 @@
import config from '@/config.js';
// 导入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 = []
// 定义终止并清空 云对象的任务列表中所有 任务的方法
......@@ -565,10 +567,13 @@
// 流式响应和云对象的请求结束回调函数
let sseEnd,requestEnd;
// 判断是否开启了流式响应模式
if (this.enableStream) {
if (this.enableStream) {
// 创建消息通道
sseChannel = new uniCloud.SSEChannel()
// console.log('sseChannel',sseChannel);
// console.log('sseChannel',sseChannel);
// 将多个字的文本,分割成单个字 分批插入到最末尾的消息中
let sliceMsgToLastMsg = new SliceMsgToLastMsg(this)
// 监听message事件
sseChannel.on('message', (message) => {
// console.log('on message', message);
......@@ -581,16 +586,17 @@
content: message,
create_time: Date.now()
})
} else {
this.updateLastMsg(lastMsg => {
lastMsg.content += message
})
} else {
sliceMsgToLastMsg.addMsg(message)
// this.updateLastMsg(lastMsg => {
// lastMsg.content += message
// })
}
this.showLastMsg()
// 让流式响应计数值递增
this.sseIndex++
})
})
// 监听end事件,如果云端执行end时传了message,会在客户端end事件内收到传递的消息
sseChannel.on('end', (e) => {
console.log('sse 结束',e)
......
......@@ -320,7 +320,8 @@ module.exports = {
...chatCompletionOptions,
messages,
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.
先完成此消息的编辑!
想要评论请 注册