项目配置:
在.pro文件中添加网络模块:
QT += core network
API配置:
-
将apiUrl替换为实际的DeepSeek API端点
-
将apiKey替换为你的有效API密钥
-
根据API文档调整请求参数(模型名称、温度值等)
功能说明:
-
使用QNetworkAccessManager处理HTTP请求
-
自动处理JSON序列化/反序列化
-
支持异步请求处理
-
包含基本的错误处理
扩展建议:
-
添加更完善的错误处理(HTTP状态码检查)
-
实现异步回调机制
-
添加请求超时处理
-
支持流式响应(如果API支持)
-
使用环境变量或配置文件管理API密钥
典型输出处理:
// 在handleResponse函数中可添加以下处理逻辑:
if (!content.isEmpty()) {
qDebug() << "Received response:";
qDebug().noquote() << content; // 保留原始格式
} else {
qDebug() << "No content in response";
}
代码举例:
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
class ApiClient : public QObject {
Q_OBJECT
public:
explicit ApiClient(QObject *parent = nullptr) : QObject(parent) {
manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
this, &ApiClient::handleResponse);
}
void sendRequest(const QString &prompt) {
// API配置
const QString apiUrl = "https://api.deepseek.com/v1/chat/completions";
const QString apiKey = "your_api_key_here"; // 请替换为实际API密钥
// 创建请求
QNetworkRequest request;
request.setUrl(QUrl(apiUrl));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization",
QString("Bearer %1").arg(apiKey).toUtf8());
// 构建JSON请求体
QJsonObject requestBody;
requestBody["model"] = "deepseek-chat"; // 根据实际模型名称修改
requestBody["temperature"] = 0.7;
requestBody["max_tokens"] = 1000;
QJsonArray messages;
QJsonObject systemMsg;
systemMsg["role"] = "system";
systemMsg["content"] = "You are a helpful assistant.";
messages.append(systemMsg);
QJsonObject userMsg;
userMsg["role"] = "user";
userMsg["content"] = prompt;
messages.append(userMsg);
requestBody["messages"] = messages;
// 发送POST请求
manager->post(request, QJsonDocument(requestBody).toJson());
}
private slots:
void handleResponse(QNetworkReply *reply) {
if (reply->error()) {
qDebug() << "Error:" << reply->errorString();
reply->deleteLater();
return;
}
// 解析响应
QJsonDocument response = QJsonDocument::fromJson(reply->readAll());
QJsonObject jsonResponse = response.object();
if (jsonResponse.contains("choices")) {
QJsonArray choices = jsonResponse["choices"].toArray();
if (!choices.isEmpty()) {
QJsonObject choice = choices.first().toObject();
QJsonObject message = choice["message"].toObject();
QString content = message["content"].toString();
qDebug() << "API Response:" << content;
}
} else {
qDebug() << "Error response:" << response.toJson();
}
reply->deleteLater();
}
private:
QNetworkAccessManager *manager;
};
// 使用示例
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
ApiClient client;
client.sendRequest("Explain quantum computing in simple terms");
return a.exec();
}
#include "main.moc"