代码已上传到github: https://github.com/HMY777/RobotChat
效果
-
运行界面:
请无视这个简陋的布局

-
文字聊天:


-
语音聊天:
为了压缩GIF大小已经裁剪过,实际上一次对话没有这么快

前期准备
设计
因为是计网的课设要赶时间所以我做得很简陋(其实是菜),所有操作都在MainWindow.cpp里面完成,一共就这几个类

功能
-
文字聊天功能
这个只涉及到图灵的API,具体流程是- 输入文本,按发送按钮
- 槽函数里面发送get命令来获取请求(官方
-
语音聊天功能
- 录音
- 百度API识别语音获得文本
- 文本发送给图灵机器人获得回答文本
- 显示回答文本和调用百度语音API播放音频
流程图,功能之后跟的是函数名。

下面是代码,有一些是get比较适合,有一些是post比较适合,视情况采用就好。
? HTTP GET POST区别
?代码
文字聊天代码
青云客api get就好
//直接聊天
void MainWindow::on_SendBtn_clicked()
{
QString Url="http://api.qingyunke.com/api.php?key=free&appid=0&msg="+ui->InputTextEdit->toPlainText();
QUrl url;
url.setUrl(Url);
QNetworkRequest request(url);
QNetworkAccessManager *manager=new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(Tuling_replyFinish(QNetworkReply*)));
manager->get(request);
}
相应的槽函数,想做的好一点可以多加几个if处理异常
//解析图灵API返回的json数据
void MainWindow::Tuling_replyFinish(QNetworkReply *reply)
{
QString data=reply->readAll();//读取回话信息
qDebug()<<"这是返回的结果 "+data;
QJsonParseError json_error;
//一定要toUtf8 否则会出错!
QJsonDocument json=QJsonDocument::fromJson(data.toUtf8(),&json_error);
//判断有没有错
if(json_error.error==QJsonParseError::NoError)
{
if(json.isObject())
{
QJsonObject jsonObj=json.object();
//取到text内容
if(jsonObj.contains("content"))
{
qDebug()<<"成功获取text";
QJsonValue text_value=jsonObj.take("content");
if(text_value.isString())
{
tuling_get_ans=text_value.toVariant().toString();
tuling_get_ans.replace("br","\n");
qDebug()<<"!!!返回的ans:"<<tuling_get_ans;
}
}
}
}
reply->deleteLater();
ui->OutputTextEdit->setText(tuling_get_ans);
}
语音聊天代码
一些需要用到的声明和初始化
//用于播放音频
QMediaPlayer* media_player;
//用于设置audio_input
QAudioDeviceInfo SpeechCurrentDevice;
//用于录音,数据存储在JsonBuffer里面
QAudioInput* audio_input=NULL;
QBuffer* JsonBuffer=NULL;
void MainWindow::AudioInit()
{
const auto &&availableDevices = QAudioDeviceInfo::availableDevices(

本文详细介绍了一款基于图灵和青云客API的文字与语音聊天机器人的设计与实现过程,包括前期准备、功能开发、代码实现及可改进之处。
&spm=1001.2101.3001.5002&articleId=94627986&d=1&t=3&u=b865d4c7272d48a9bae706ea70e8efc1)
1816

被折叠的 条评论
为什么被折叠?



