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

相关推荐
Hello.Reader7 小时前
双卡 A100 + Ollama 最终落地手册一键部署脚本、配置文件、预热脚本与 Python 客户端完整打包
开发语言·网络·python
cch89187 小时前
汇编VS C++:底层控制与高效开发之争
java·开发语言
智算菩萨7 小时前
PyCharm版本发展史:从诞生到AI时代的Python IDE演进历程
ide·人工智能·python·pycharm·ai编程
AIminminHu7 小时前
OpenGL渲染与几何内核那点事-项目实践理论补充(三-1-(3):番外篇-当你的CAD打开“怪兽级”STL时:从内存爆炸到零拷贝的极致优化
c++·零拷贝·mmap·内存拷贝
水饺编程7 小时前
第4章,[标签 Win32] :SysMets3 程序讲解04,垂直滚屏重绘
c语言·c++·windows·visual studio
xiaoye-duck7 小时前
《算法题讲解指南:动态规划算法--子序列问题(附总结)》--32.最长的斐波那契子序列的长度,33.最长等差数列,34.等差数列划分II-子序列
c++·算法·动态规划
后端AI实验室7 小时前
裁员后我被迫负责运维,用AI从0搭建了可观测性平台
java·ai
lifewange8 小时前
代码托管平台
开发语言
yangyanping201088 小时前
Go语言学习之配置管理库Viper
开发语言·学习·golang