“深入浅出”系列之QT:(10)Qt接入Deepseek

项目配置:

在.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 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

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"

你可能感兴趣的:(qt,开发语言)