deepseekclient.h
cpp
#ifndef DEEPSEEKCLIENT_H
#define DEEPSEEKCLIENT_H
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QJsonObject>
class DeepSeekClient : public QObject
{
Q_OBJECT
public:
explicit DeepSeekClient(QObject *parent = nullptr);
void sendRequest(const QString &prompt);
signals:
void SignamResponse(const QString& strResponse);
private slots:
void handleReply(QNetworkReply *reply);
private:
QNetworkAccessManager *manager;
void processResponse(const QByteArray &response);
};
#endif // DEEPSEEKCLIENT_H
deepseekclient.cpp
cpp
#include "deepseekclient.h"
#include <QNetworkRequest>
#include <QJsonDocument>
#include <QJsonArray>
#include <QDebug>
DeepSeekClient::DeepSeekClient(QObject *parent)
: QObject(parent)
{
manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished, this, &DeepSeekClient::handleReply);
}
void DeepSeekClient::sendRequest(const QString &prompt)
{
const QString apiUrl = "https://api.deepseek.com/v1/chat/completions";
const QString apiKey = "your-key";
// 添加缺失的 headers
QNetworkRequest request;
request.setUrl(QUrl(apiUrl));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", ("Bearer " + apiKey).toUtf8());
// 严格构造 JSON 体
QJsonObject jsonBody;
jsonBody["model"] = "deepseek-chat"; // 确认模型名称正确
jsonBody["temperature"] = 1.0;
jsonBody["max_tokens"] = 1024;
QJsonArray messagesArray;
QJsonObject message;
message["role"] = "user"; // 注意角色名称大小写
message["content"] = prompt;
messagesArray.append(message);
jsonBody["messages"] = messagesArray;
// 添加缺失的 stream 参数(如果 API 需要)
// jsonBody["stream"] = false;
QJsonDocument doc(jsonBody);
QByteArray data = doc.toJson();
// 验证 JSON 有效性
qDebug() << "Request JSON:" << data;
manager->post(request, data);
}
void DeepSeekClient::handleReply(QNetworkReply *reply)
{
if(reply->error() != QNetworkReply::NoError)
{
qWarning() << "Error:" << reply->errorString();
reply->deleteLater();
return;
}
processResponse(reply->readAll());
reply->deleteLater();
}
void DeepSeekClient::processResponse(const QByteArray &response)
{
QJsonDocument jsonResponse = QJsonDocument::fromJson(response);
QJsonObject jsonObject = jsonResponse.object();
if(jsonObject.contains("choices"))
{
QJsonArray choices = jsonObject["choices"].toArray();
if(!choices.isEmpty())
{
QString result = choices[0].toObject()["message"].toObject()["content"].toString();
qDebug() << "Response:" << result;
emit SignamResponse(result);
return;
}
}
qWarning() << "Invalid response format:" << jsonResponse;
}
其中,可以在所需要的地方实例化这个类,然后通过调用sendRequest将所要提问的问题发给DeepSeek,然后通过信号SignamResponse获取DeepSeek返回的数据。
注意:需要在DeepSeek官网注册后才能获取your-key,并且必须保证账户有钱才能获取!