diff --git a/_redme.md b/_redme.md index e66b4ae13159f0e06ce3a5895ef42f519bde913e..60eddbed3c997e9a718aecea25eb40936426a4e2 100644 --- a/_redme.md +++ b/_redme.md @@ -23,6 +23,27 @@ 8. 运行启动。 9. 如果需要stream流式响应,需要在[dev.dcloud.net.cn](https://dev.dcloud.net.cn)的uni-push2中开通你的应用,然后把云函数上传到uniCloud服务空间,并且运行时在HBuilderX控制台选择`连接云端云函数` +## 配置 @config +文件路径 `uniCloud/cloudfunctions/common/uni-config-center/uni-ai-chat/config.json` + +目前的配置文件包括是否开启内容安全,即是否检查用户输入和ai返回结果的合规性。开启后,会延缓一定的响应时间,但保证了合规性。 + +| 字段 | 类型 | 默认值| 描述 | +| :-------- | :-------- | :--- | :-------------------- | +| contentSecurity | Boolean | false | 开启内容安全识别 | +| spentScore | Number | 0 | 对话一次所需消耗的积分数 | +| earnedScore | object | - | 配置积分的获取策略 | +| |- ad | Number | 3 | 观看1次广告可获得的积分数量 | +| |- price | Number | 3 | 支付1元可获得的积分数量(暂未支持) | +| chatCompletionOptions | Object | - | 支持配置:`model`,`tokensToGenerate`(默认值:512),`temperature`,`topP` 详情查看:[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)。 + +如果你需要使用其他的内容安全检测方案,请自行集成。 + +注意:如果对ai返回结果进行内容安全检查,会导致stream流式响应失效。 + ## stream流式响应实现解析 当访问 AI 接口时,如果生成的回复内容过大,响应时间会很长,导致前端用户需要等待很长时间才能收到结果。所以流式响应可以减少前端用户的等待,让ai回复的内容一个字或一段话逐步出现在前端用户的界面上。 @@ -37,7 +58,7 @@ 流式响应的流程图 - + 流式响应的使用需客户端先通过 `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))向客户端推送消息。 @@ -45,32 +66,12 @@ - 使用`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控制台,更改`连接本地云函数`为`连接云端云函数`。 -## 配置 @config -文件路径 `uniCloud/cloudfunctions/common/uni-config-center/uni-ai-chat/config.json` - -目前的配置文件包括是否开启内容安全,即是否检查用户输入和ai返回结果的合规性。开启后,会延缓一定的响应时间,但保证了合规性。 - -| 字段 | 类型 | 默认值| 描述 | -| :-------- | :-------- | :--- | :-------------------- | -| contentSecurity | Boolean | false | 开启内容安全识别 | -| spentScore | Number | 0 | 对话一次所需消耗的积分数 | -| earnedScore | object | - | 配置积分的获取策略 | -| |- ad | Number | 3 | 观看1次广告可获得的积分数量 | -| |- price | Number | 3 | 支付1元可获得的积分数量(暂未支持) | -| chatCompletionOptions | Object | - | 支持配置:`model`,`tokensToGenerate`(默认值:512),`temperature`,`topP` 详情查看:[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)。 - -如果你需要使用其他的内容安全检测方案,请自行集成。 - -注意:如果对ai返回结果进行内容安全检查,会导致stream流式响应失效。 ## 营运专题@ad v1.0.3起提供了商业化能力,与uni-ai对话消耗积分。 -积分可通过看[激励视频广告](https://uniapp.dcloud.net.cn/component/ad-rewarded-video.html)获得。如需要通过支付获取积分,可自行二次开发,接入[uni-pay](uni-pay.md)。 +积分可通过看[激励视频广告](https://uniapp.dcloud.net.cn/component/ad-rewarded-video.html)获得。 +如需要通过支付获取积分,可自行二次开发,接入[uni-pay](uni-pay.md)。 **平台差异说明** @@ -109,9 +110,122 @@ v1.0.3起提供了商业化能力,与uni-ai对话消耗积分。 ``` > 更多uniIdRouter自动路由详情参考:[https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#uni-id-router](https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#uni-id-router) +## 二次开发 +**主要文件目录结构** + +
+
+uni-ai-chat
+├── uniCloud
+│ ├── cloudfunctions
+│ │ ├── common 公共模块目录
+│ │ │ ├── uni-config-center uniCloud 配置中心
+│ │ │ │ ├── uni-ad
+│ │ │ │ │ └── config.json 广告信息配置
+│ │ │ │ ├── uni-ai-chat
+│ │ │ │ │ └── config.json ai对话项目配置文件详情查看
+│ │ │ │ ├── uni-id
+│ │ │ │ │ ├── config.json 身份信息配置文件
+│ │ │ │ │ └── hooks
+│ │ │ │ │ └── index.js 用户注册钩子文件
+│ │ │ │ └── uni-open-bridge 三方平台认证凭据管理配置
+│ │ │ └── uni-sec-check 内容安全检测公共模块
+│ │ ├── reward-video-callback 激励视频广告回调云函数
+│ │ ├── uni-ai-chat uni-ai-chat云对象
+│ │ └── uni-open-bridge 三方平台认证凭据管理模块云对象
+│ └── database
+│ ├── newQuery.jql
+│ └── uni-ai-chat.schema.json
+├── components
+│ ├── uni-ad-rewarded-video 激励视频广告组件
+│ └── uni-ai-msg 消息内容渲染组件
+├── lib 资源文件目录
+│ ├── highlight
+│ │ ├── github-dark.min.css 代码高亮库样式文件
+│ │ └── highlight.min.js 代码高亮库脚本文件
+│ ├── html-parser.js HTML String转nodes数组脚本文件
+│ └── markdown-it.min.js Markdown 渲染库脚本文件
+├── pages 页面目录
+│ └── chat 对话页面
+├── static 静态资源目录
+├─ uni_modules uni-app模块目录
+│ ├── uni-id-pages 统一身份信息管理模块详情查看
+│ ├── uni-open-bridge 三方平台认证凭据管理模块详情查看
+│ ├── uni-id-pages 统一身份信息管理模块详情查看
+│ └── uni-sec-check 内容安全检测模块详情查看
+├─ App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期
+├─ changelog.md 项目更新日志
+├─ config.js 项目配置文件
+├─ main.js 项目初始化入口文件
+├─ manifest.json 配置应用名称、appid、logo、版本等打包信息,详情参考
+├─ pages.json 配置页面路由、导航条、选项卡等页面类信息,详情参考
+└─ redme.md 自述文件
+
+
+
+> 完整的uni-app目录结构[详情参考](https://uniapp.dcloud.io/frame?id=%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84)
+
+### 实现通过支付获取积分
+二开流程思路如下:
+- 服务端
+根据[uni-pay](uni-pay.md)文档集成支付功能,在支付成功异步回调(路径:`uni-pay-co/notify/earnedScore.js`)
+给相关用户加积分示例代码如下:
+```js
+'use strict';
+// 读取配置的“支付1元可获得的积分数量”值
+const uniAiChatConfig = require('uni-config-center')({
+ pluginId: 'uni-ai-chat'
+}).config()
+module.exports = async (obj) => {
+ let user_order_success = true;
+ let { data = {} } = obj;
+ let {
+ user_id, //对应用户唯一身份标识
+ total_fee, // 支付的金额
+ order_no,
+ out_trade_no
+ } = data; // uni-pay-orders 表内的数据均可获取到
+
+ let score = db.command.inc(uniAiChatConfig.earnedScore.pay * total_fee/100)
+ let res = await db.collection('uni-id-users')
+ .doc(user_id)
+ .update({score})
+ // console.log(res)
+ return user_order_success;
+};
+```
+
+- 客户端
+1. 新建组件`earned-score-pay`实现支付并回调支付结果
+2. 在chat页面(路径:`pages/chat/chat.vue`)搜索 `uni-ad-rewarded-video`修改同位置代码块如下:
+```html
+