Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-ai-chat
提交
71d1e584
U
uni-ai-chat
项目概览
DCloud
/
uni-ai-chat
通知
892
Star
11
Fork
8
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
2
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-ai-chat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
2
Issue
2
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
71d1e584
编写于
6月 21, 2023
作者:
DCloud_JSON
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1.2.4
上级
6de49f50
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
74 addition
and
24 deletion
+74
-24
README.md
README.md
+7
-1
_README.md
_README.md
+13
-12
changelog.md
changelog.md
+2
-0
package.json
package.json
+1
-1
pages/chat/SliceMsgToLastMsg.js
pages/chat/SliceMsgToLastMsg.js
+34
-0
pages/chat/chat.vue
pages/chat/chat.vue
+15
-9
uniCloud-aliyun/cloudfunctions/uni-ai-chat/index.obj.js
uniCloud-aliyun/cloudfunctions/uni-ai-chat/index.obj.js
+2
-1
未找到文件。
README.md
浏览文件 @
71d1e584
...
@@ -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
_README.md
浏览文件 @
71d1e584
## 简介
## 简介
> 支持HBuilder版本,正式版 3.7.10+,
a
lpha版 3.8.0+
> 支持HBuilder版本,正式版 3.7.10+,
A
lpha版 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 | - | 配置积分的获取策略 |
|
|
-
ad | Number | 3 | 观看1次广告可获得的积分数量 |
|
|
-
ad | Number | 3 | 观看1次广告可获得的积分数量 |
|
|
-
price | Number | 3 | 支付1元可获得的积分数量(暂未支持) |
|
|
-
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`
,还有:
...
...
changelog.md
浏览文件 @
71d1e584
## 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)
...
...
package.json
浏览文件 @
71d1e584
{
{
"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"
:
{
...
...
pages/chat/SliceMsgToLastMsg.js
0 → 100644
浏览文件 @
71d1e584
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
pages/chat/chat.vue
浏览文件 @
71d1e584
...
@@ -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
)
...
...
uniCloud-aliyun/cloudfunctions/uni-ai-chat/index.obj.js
浏览文件 @
71d1e584
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录