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

相关推荐
yangzhi_emo8 分钟前
ES6笔记2
开发语言·前端·javascript
emplace_back1 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
jz_ddk1 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶1 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
xiaolang_8616_wjl1 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源
夜月yeyue1 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
收破烂的小熊猫~2 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
产品经理独孤虾2 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
小兵张健2 小时前
武汉拿下 23k offer 经历
java·面试·ai编程