首先在DeepSeek的官网里边找到"开放平台"
首次创建好像送免费的十块钱的赠送余额 不过有时效
打开之后创建API key 注意只在第一次可以复制,之后没法复制
之后点击左下角接口文档 跳转到首次调用API文档页面
我们看这个就行了,之后就可以开始写代码了
private:
QNetworkRequest _request; // 封装网络请求信息
QNetworkAccessManager *_manager; // 管理网络请求和响应
QNetworkReply *_reply; // 网络请求响应
QString _curl_https = "https://api.deepseek.com/chat/completions";
QString _model = "deepseek-chat"; //deepseek-reasoner r1模型 || deepseek-chat v3模型
QString _api_key = "你的API_key";
QString _read_text;
void Network::initialize()
{
_manager = new QNetworkAccessManager(this);
_request.setUrl(QUrl(_curl_https));
// 头部信息
_request.setRawHeader("Authorization", ("Bearer " + _api_key).toUtf8());
_request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
qDebug() << "QSslSocket=" << QSslSocket::sslLibraryBuildVersionString();
qDebug() << "OpenSSL支持情况:" << QSslSocket::supportsSsl();
}
这里之所以输出一下OpenSSL是因为第一次尝试出错了
如果第二行打印的是false 建议下载一下匹配的版本, 我用的Qt是5.15.2 匹配的版本是1.1.1g 文章内包含此安装包
这里要封装成json格式
void Network::send(QString string)
{
qDebug() << string;
// messages部分
QJsonArray messages;
QJsonObject text1;
text1["role"] = "system";
text1["content"] = "You are a helpful assistant.";
messages.append(text1);
QJsonObject text2;
text2["role"] = "user";
text2["content"] = string;
messages.append(text2);
QJsonObject data;
data["model"] = _model;
data["messages"] = messages;
data["stream"] = false;
QJsonDocument doc(data);
QByteArray postData = doc.toJson();
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setProtocol(QSsl::AnyProtocol);
config.setPeerVerifyMode(QSslSocket::VerifyNone);
_request.setSslConfiguration(config);
//发送post请求
_reply = _manager->post(_request, postData);
// 链接槽函数
connect(_reply, &QIODevice::readyRead, this, &Network::onReadyRead);
}
接收槽函数 从json中找到所需的回答内容
void Network::onReadyRead()
{
if(_reply != nullptr && _reply->error() == QNetworkReply::NoError){
//得到返回的数据
QByteArray read_data = (_reply->readAll());
//qDebug() << read_data;
//对返回的json数据进行解析
QJsonObject obj = QJsonDocument::fromJson(read_data).object();
//qDebug() << "Response:" << obj;
QJsonArray choicesarray = obj.value("choices").toArray();
if (!choicesarray.isEmpty()){
QJsonObject choiceobj = choicesarray[0].toObject();
if (choiceobj.contains("message") && choiceobj["message"].isObject()) {
QJsonObject messageobj = choiceobj["message"].toObject();
if (messageobj.contains("content") && messageobj["content"].isString()) {
this->setReadText(messageobj["content"].toString());
//qDebug() << messageobj["content"].toString();
//qDebug() << messageobj["reasoning_content"].toString();
}
}
}
} else {
qDebug() << "https request error:" << _reply->errorString();
}
}
大致效果如下
上方输入框 回车直接发送 顺带清空输入框 右侧清空所有
最后就是 流式输出有点问题目前还没有实现,还在实验当中
如需源码直接联系🤝
2.10增加流式输出 流式输出(链接🔗)