deepseekclient.h
#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
#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";// 添加缺失的 headersQNetworkRequest 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,并且必须保证账户有钱才能获取!