如何在3小时快速开发上线一款chatGPT微信小程序
chatGPT是一款由OpenAI开发的聊天机器人模型,是一种高效语言模型,它能够模拟人类的语言行为,与用户进行自然的交互。它的名称来源于它所使用的技术——GPT-3架构,即生成式语言模型的第3代。
chatGPT的核心技术是 GPT-3 架构。它通过使用大量的训练数据来模拟人类的语言行为,并通过语法和语义分析,生成人类可以理解的文本。它可以根据上下文和语境,提供准确和恰当的回答,并模拟多种情绪和语气。这样,就可以让用户在与机器交互时,感受到更加真实和自然的对话体验。
chatGPT 的应用场景也很广泛。它可以用于处理多种类型的对话,包括对话机器人、问答系统和客服机器人等。它还可以用于各种自然语言处理任务,比如文本摘要、情感分析和信息提取等。例如,在一个问答系统中,chatGPT可以提供准确的答案,解决用户的疑惑;在一个客服机器人中,它可以帮助用户解决问题,提供更好的服务体验。
小程序云开发环境
2。1 此处也推荐使用使用云开发环境,因为是使用云开发环境有很多现场的模版可以直接套用,对于新手使用起来非常的友好,直接在现有的项目里面进行改动,立即能看到效果这样对于新手编程非常的有成就感。
更多参考文档可以查看。https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/quickstart.html
3。 导出初始化项目之后,看起来文件结构也很清晰; 其实小程序开发跟普通的html,css,js 三剑客用来开发网页没有本质的区别;微信这里的wxml,wxss,js 也都是 html,css,js的子集而已;
页面的结构在wxml 中写,用到的样式在 wxss中定义; 变量和函数以及网络请求 等在 js 中执行。
简单说来,小程序包含一个描述整体程序的 app
和多个描述各自页面的 page
。
这里的 app
是指放在根目录的 app.js
、app.json
、app.wxss
这三个文件,他们主要负责全局性的逻辑、配置及样式。
pages
则是你即将编写的多个页面。多个 pages
之间可以通过官方提供的导航功能进行跳转。
每个 page
页面由 page.js
、page.json
、page.wxml
、page.wxss
四个文件组成,其中 WXML 页面类似 HTML 文件,主要负责页面的结构。
不过比起 HTML,WXML 更加简单,你的布局基本上是在使用 <view>
和 <text>
标签,以及其它官方文档上说明的其他标签。
需要注意查看官方文档中,有关组件这部分的内容。
## 开发过程
由于平时主要写后端代码,对于前端只了解html的一些基础皮毛;只能现学现卖。对于页面展示采用了微信官网开发的WEUI组件,就不要自己去设计新的组件了,我的目的只有一个,就是用最快的速度把demo弄出来。旨在让用户体验一个完整的chatGPT的交互流程;页面后期可以优化。
1. 如何引入 weui 组件
他们提供两种组件接入方式
a. 通过 useExtendedLib 扩展库 的方式引入,这种方式引入的组件将不会计入代码包大小。
b. 可以通过npm (opens new window)方式下载构建,npm包名为weui-miniprogram
我不想在重新去了解npm这些东西,只想快点实现看到效果,而且上架到小程序商店对代码包大小有限制,而useExtendedLib 扩展库不计入代码包大小,当然是选择了第一种方式。
weui 官方参考文档
https://wechat-miniprogram.github.io/weui/docs/quickstart.html
2. 定义tabbar
一个页面展示的信息过于单调,我决定在小程序中使用tabbar的方式,但是第一次接触也不知道如何写tabbar,随便搜索一下,发现不少的结果。想想官网的文档还是准确且权威一点,于是进入立马发现了答案。这种感觉太丝滑了。
3. 编写主界面
非常简单界面,只需要一个输入框,一个询问按钮;核心功能就是,点击询问按钮 的时候,获取输入框中的值,然后去请求服务器的/ask接口,获取结果; 获取数据之后,再设置到 页面中的结果展示中; 确定了这个基本流程,接下来只要知道这些基本组件在微信小程序里面使用什么标签就好了;更多的细节可以访问 微信小程序的开发文档
<form bindsubmit="submitForm">
<view class="weui-form">
<view class="weui-cells__title">请输入你想要解决的问题:</view>
<view class="weui-cells">
<div class="weui-cell">
<div class="weui-cell__bd">
<textarea name="q" class="weui-textarea" placeholder="可以问我今天天气怎么样?或者讲个故事" rows="2"></textarea>
<div class="weui-textarea-counter"><span>0</span>/50</div>
</div>
</div>
<block wx:if="{{result}}">
<view class="weui-cells__title">回复:</view>
<view class="usermotto">
<text class="user-motto">{{result}}</text>
</view>
</block>
</view>
<view class="weui-form__tips-area">
<block wx:if="{{downloadUrl}}">
<view class="weui-cell">
<button disabled="{{downloaddisabled}}" loading="{{downloadloading}}" load aria-role="button" bindtap='download' data-text="{{downloadUrl}}" plain>立即下载
</button>
</view>
</block>
<block wx:if="{{message}}">
<view class="weui-form__tips">
{{message}}
</view>
</block>
</view>
<view class="weui-form__opr-area">
<button aria-role="button" class="weui-btn weui-btn_primary" disabled="{{disabled}}" loading="{{loading}}" form-type="submit"> 询问ChatGPT
</button>
</view>
</view>
</form>
4. 绑定点击事件
在form表单上绑定事件
<form bindsubmit="submitForm"> </form>
然后在对应的js文件里面定义submitForm方法;
5. 请求服务器接口
submitForm: function (e) {
//一般前置检查代码
...
const that = this
wx.request({
url: 'http://youdomain.com/api/xxxx',
method: 'post',
header: {"content-type": "application/x-www-form-urlencoded"},
data: data,
success(rsp) {
console.log("ask result-----",rsp.data)
that.setData({
result: rsp.data.data.rsp,
disabled: false,
loading: false,
})
},
complete(d) {
console.log(d)
}
})
console.info("form.submited")
....其他相关代码
},
注意上面用到的 url,需要在小程序中进行域名白名单注册,否则无法被访问到; 同时进行注册的域名需要进行备案;
配置地址,登录微信小程序管理后台,开发管理-服务器域名中进行配置
到此,小程序部分配置完成,可以用手机进行预览,或者真机调试; 如果此时没有配置域名,也可以通过忽略掉域名强制检查,当然,这些只在开发环境下才可以使用;正式上线审核的话,一定得有一个备案的域名 且在小程序后台中进行配置过;
## 服务器接口
架子都搭建好了,自然需要配置服务器了,找了一个现有的api-server脚手架,https://github.com/wytxer/template-node-egg; 初始化项目,简单配置了一下路径。能够接收http请求; 感觉挺不错,目前已经过去了两个小时了,得抓紧时间才行;抽空看了下小程序审核还没有通过;
本着快速开发的原则,一切用现成的轮子;效率第一;配置了接口名字以及对应的handle。
我定义了一个名字叫做 /ask 的接口名字,同时定义了处理ask接口的 handle函数
async ask() {
const { request, helper, axios, logger } = this.ctx
const { message } = request.body
logger.info('requset body===', request.body)
logger.info("message===",message)
...其余相关代码
这里的token就是前面提到的在openai上申请到的token
const config = {
headers: { Authorization: `Bearer ${token}` }
}
const req = {
model: 'text-curie-001',
prompt: message,
max_tokens: 2000,
temperature: 0.5
}
console.log("req===",req)
let text = ''
const result = await axios.post('https://api.openai.com/v1/completions', req, {
timeout: 300000,
headers: { Authorization: 'Bearer ${token}' }
})
.then(rsp => {
console.log('pdf file result', rsp)
if (rsp.choices) {
text = rsp.choices[0].text
}
})
.catch(err => {
console.log('pdf file error', err)
})
const data = {
rsp: text
}
helper.success(data, 'success')
}
这里的token就是前面提到的在openai上申请到的token ,注意不要泄漏;
更多的玩法可以参考openai的更多模型和更多接口
参考文档 : https://beta.openai.com/docs/api-reference/introduction
## 腾讯api网关接入
考虑到并发能力,频率限制,自动扩容等能力的接入,我选择了腾讯云api网关。
如何把api通过腾讯云暴露到外网呢?
1. 访问https://console.cloud.tencent.com/apigateway/service?rid=1
2. 新建一个service,并且选择https协议【微信要求https协议】
3. 新建接口ask,并且映射到我们自己的服务器
完成之后,我们就能通过api网关访问到我们自己的服务了,干杯?
更多腾讯云api 介绍 https://cloud.tencent.com/developer/article/1877519
## 部署过程
这里非常简单了,直接在微信开发者工具里面进行代码上传,然后在微信小程序后台里面就能看到上传的版本;
建议提交审核之前用真机扫描体验一下;有bug及时修复;
确认无误后就可以提交审核了,系统提示1-7个工作日内完成;但是基本上3,4个小时就审核完成了,为审核人员的高效率点赞;
值得注意的是,需要时刻关注审核动态,因为审核完成后,还需要自己手动进行 “全量” 或者 “灰度” 发布,才能够在小程序里面搜索到;
## 体验
## 更多资源
- chatGPT 有哪些玩法 https://mp.weixin.qq.com/s/qQXeKrad41lrvdeYhaRqwQ
- openai api文档 https://beta.openai.com/docs/api-reference/introduction
- 腾讯云api 介绍 https://cloud.tencent.com/developer/article/1877519
- api 脚手架 https://github.com/wytxer/template-node-egg;
- weui 官方参考文档 https://wechat-miniprogram.github.io/weui/docs/quickstart.html