工作总结-ai聊天室

204 阅读3分钟

完成效果

小程序:

  • 支持键盘输入和语音输入,ai接受到用户输入后返回答案和回答时间,有参考文献会附带文献链接,支持跳转到相关文献页面或评论区。
  • 页面效果完善,已考虑输入输出状态相关交互效果,用户与ai输入区分,语音支持输出语音和转文字,页面自动滑动顶格
  • 回答速度已优化,60s的问题能在10s内给出回答

实现思路

聊天框内容维护

维护对象数组,如:

const chatMsg = [{origin:client,txt:"你是谁?"},{origin:server,txt:"我是...."}]

在页面便利该数组进行渲染,实现聊天框的效果,用户输入和ai回答时进行push,聊天框就会新增内容啦~ 其他的页面效果,自动定位到最新内容啥的用wx的api可以进行元素定位滚轮位置,跟据origin写动态类区分用户与ai输出...

语音功能

一、获取权限

       我们做的ai助手其实是双端的,pc端去做这个可以直接用浏览器支持的recordManager接口,可以揽括权限获取、语音录制、存储、播放、停止播放等等功能,使用较为简单,使用小程序就踩了比较多坑~ 之前没做过小程序,最近做了几个需求,真的搞到十分麻烦,除了hbuilder和微信开发者工具使用十分不便,还有让人头疼的缓存问题,各种权限、上线发版还需要提审各种问题,总之让人十分难受。

c小程序的话,首先代码部分较为简单,使用wx的api去打开设置,配置scoped,用户就可以打开麦克风了,十分简单。

wx.getSetting({
  success (res) {
    console.log(res.authSetting)
    // res.authSetting = {
    //   "scope.userInfo": true,
    //   "scope.userLocation": true
    // }
  }
})

       然后我就出现问题了,打开的设置里,没有麦克风权限! 我一开始以为是个人手机没打开权限,后来查了一下又以为是在manifest文件里没有赋值权限scoped,后来发现都不是,手机权限没有限制,麦克风权限无需配置scoped,摸不着头脑,和组长研究半天,最后在wx社区文档发现更新,说现在小程序麦克风权限也需要在微信公众号平台去申请审批了,怪就怪我不了解小程序开发流程和细节吧~┭┮﹏┭┮

二、实现语音功能

       技术选择的话,选择浏览器的recordAudioManager/小程序的api接口去做,基本实现要求语音的开始录制、停止录制、取消录制、语音发送、语音播放和转文字的功能,这边前几个实现基本使用接口可以轻松实现,转文字的话需要后端去用一些第三方的接口去做音频的转文字,像是阿里、百度都有提供这些接口,前端上次音频到后端拿到后端响应数据后push到聊天框的内容里,就可以实现基本的功能。

       技术实现还有些许不足之处,就是语音功能一次就用到了3个接口,如果哪天用户基群很大服务器压力将会很大,现状是:后端接收音频文件上传到oss返回音频oss地址接口=>前端拿到oss接口请求转文字内容接口=>使用转文字内容请求ai问答接口获得回答,目前考虑的优化是将前两个接口请求合为一个接口处理,但貌似后端那边有些问题具体我也不是特别了解,还有一个优化之处就是在后端转文字时前后端协调做个流式输出,可以保证页面响应及时用户体验感更好,但是需要消耗一定的性能,目前优化还没具体落实,估计会放在后面的迭代去做吧~