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

相关推荐
lixzest1 天前
C++上位机软件开发入门深度学习
开发语言·c++·深度学习
于越海1 天前
材料电子理论核心四个基本模型的python编程学习
开发语言·笔记·python·学习·学习方法
代码方舟1 天前
Java后端实战:构建基于天远手机号码归属地核验的金融级风控模块
java·大数据·开发语言·金融
wuk9981 天前
基于MATLAB实现栅格地图全覆盖移动路径规划
开发语言·matlab
幽络源小助理1 天前
PHP虚拟商品自动发卡系统源码 – 支持文章付费阅读与自动发货
开发语言·php
故事不长丨1 天前
C#集合:解锁高效数据管理的秘密武器
开发语言·windows·c#·wpf·集合·winfrom·字典
营销操盘手阿泽1 天前
从流量红利到构建长期AI数据资产的深度共建指南
ai
苦藤新鸡1 天前
4.移动零
c++·算法·力扣
superman超哥1 天前
Rust 内部可变性模式:突破借用规则的受控机制
开发语言·后端·rust·rust内部可变性·借用规则·受控机制
hetao17338371 天前
2026-01-04~06 hetao1733837 的刷题笔记
c++·笔记·算法