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

相关推荐
小辉懂编程25 分钟前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
醍醐三叶1 小时前
C++类与对象--2 对象的初始化和清理
开发语言·c++
Magnum Lehar2 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
zhz52142 小时前
AI数字人融合VR全景:从技术突破到可信场景落地
人工智能·vr·ai编程·ai数字人·ai agent·智能体
Mcworld8573 小时前
java集合
java·开发语言·windows
成功人chen某3 小时前
配置VScodePython环境Python was not found;
开发语言·python
fatesunlove3 小时前
知识图谱重构电商搜索:下一代AI搜索引擎的底层逻辑
搜索引擎·ai·知识图谱
wuqingshun3141593 小时前
蓝桥杯 16. 外卖店优先级
c++·算法·职场和发展·蓝桥杯·深度优先
春蕾夏荷_7282977253 小时前
Qt 强大的窗口停靠浮动
qt·停靠·dock
海绵宝宝贾克斯儿4 小时前
C++中如何实现一个单例模式?
开发语言·c++·单例模式