C++的QT实现接入DeepSeek,实现与DeepSeek对话功能

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,并且必须保证账户有钱才能获取!

相关推荐
TNTLWT18 小时前
Qt模型控件:QTreeView&QTreeWidget
qt
earthzhang202119 小时前
第3讲:Go垃圾回收机制与性能优化
开发语言·jvm·数据结构·后端·性能优化·golang
AA陈超19 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P05-08 UI 部件数据表
c++·游戏·ue5·游戏引擎·虚幻
纵有疾風起20 小时前
C++——类和对象(3)
开发语言·c++·经验分享·开源
Full Stack Developme20 小时前
java.text 包详解
java·开发语言·python
文火冰糖的硅基工坊20 小时前
[嵌入式系统-135]:主流AIOT智能体开发板
开发语言·嵌入式·cpu
承渊政道21 小时前
动态内存管理
c语言·c++·经验分享·c#·visual studio
yudiandian201421 小时前
02 Oracle JDK 下载及配置(解压缩版)
java·开发语言
要加油哦~21 小时前
JS | 知识点总结 - 原型链
开发语言·javascript·原型模式
孤独得猿21 小时前
聊天室项目开发——etcd的安装和使用
linux·服务器·c++·etcd