这一次主要对项目的“训练”模块进行了编写。由于原先实现的功能为基础模板功能,即集中实现了“考试”的相关功能,现在借用之前的框架,对日常对话的功能实现。
这一任务从三方面出发:前端编写、后端service、后端controller。
一、前端页面实现
这一前端内容与先前的差异不大,主要区别在于取消了评分机制,然后调用了另一个英语口语对话、日常交流的机器人。
打开界面的钩子函数做了相应的变动,之前是开始考试,这里改为了一个与机器人emma的问候语,并希望对方抛出一个话题。
随后着重写了sendVoiceMessage()函数:
sendVoiceMessage (blobdata) {
const formData = new FormData()
formData.append('file', blobdata, 'user.wav')
axios.post('/routine/voice', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(response => {
if (response.status === 200) {
console.log(response.data) // 打印整个 response.data
const userMsg = response.data.data.body.userMsg
console.log(isNaN(userMsg))
// 检查是否存在 response.data.body
if (isNaN(userMsg)) {
console.log('JINRULE')
const usrRes = {
content: userMsg,
time: new Date().toLocaleTimeString(),
isUserMessage: true
}
this.messages.push(usrRes)
this.sendMessage(usrRes.content)
}
} else if (response.status === 402) {
this.$message.error('请输入您的问题')
}
}).catch(() => {
this.$message.error('出错了,请输入您的问题')
})
this.inputMessage = ''
},
二、RoutineService
在serveice只做了accesstoken和url的更改,实现了ai的部署。与其他内容没有冲突,因为这一步没有历史记录等的步骤,与数据库进行交互,具有即时性。
在服务层中,主要进行了accessToken和URL的修改,以实现AI模型的部署。这一修改确保了服务能够正确地与指定的AI模型进行交互,并获取相应的响应结果。由于这一部分的实现没有涉及到复杂的逻辑处理,也不需要历史记录或状态的保存,因此与其他功能模块不存在冲突。同时,这一步骤不涉及与数据库的交互,所有的操作都是即时进行的,这确保了服务的响应速度和实时性。
具体来说,通过修改accessToken,我们可以确保请求的合法性和安全性,而URL的修改则指向了AI模型的新部署位置,确保请求能够正确地到达目标模型。通过这种方式,服务层可以直接将用户输入的信息发送到AI模型,并即时获取生成的响应结果。
这种即时性处理方式非常适合于对话和交互场景,用户输入的信息会实时传递给AI模型,生成的响应也会实时返回,极大地提高了用户体验。同时,由于没有涉及到数据库的读写操作,也减少了系统的复杂性和潜在的性能瓶颈。这种设计既简洁又高效,非常适合于对实时性要求较高的日常训练的应用场景。
三、RoutineController
RoutineController
是一个Spring Boot RESTful 控制器,旨在处理与语音识别和AI对话相关的请求。该控制器提供了两个主要的端点:一个用于语音到文本转换,另一个用于与AI机器人进行交互。
主要功能
- 语音到文本转换 (
/routine/voice
) - AI机器人交互 (
/routine/ai-bot
)
该控制器有效地实现了从语音到文本的转换,以及与AI机器人的交互,并通过简单的HTTP请求与客户端进行通信。它利用了Spring Boot的注入和RESTful架构,使得整个过程简洁高效,易于维护和扩展。