一、接入DeepSeek介绍

deepseek开发平台入口:DeepSeek

创建key,自己保存下来,后面API调用需要使用

文档地址:

首次调用 API | DeepSeek API Docs

二、代码测试

1.定义

class DeepSeekNetwork : public QObject
{
    Q_OBJECT
public:
    explicit DeepSeekNetwork(QObject* parent = nullptr);
    Q_INVOKABLE void seek(const QString &string);

signals:
    void signalOutput(DeepSeekOutput data);

private:
    QNetworkRequest mRequest; // 封装网络请求信息
    QNetworkAccessManager *mNetWorkManager { nullptr }; // 管理网络请求和响应
    QNetworkReply *mNetWorkReply { nullptr }; // 网络请求响应
    // base_url:https://api.deepseek.com
    // 出于与 OpenAI 兼容考虑,您也可以将 base_url 设置为 https://api.deepseek.com/v1 来使用,但注意,此处 v1 与模型版本无关。
    // deepseek-chat 模型已全面升级为 DeepSeek-V3,接口不变。 通过指定 model='deepseek-chat' 即可调用 DeepSeek-V3。
    // deepseek-reasoner 是 DeepSeek 最新推出的推理模型 DeepSeek-R1。通过指定 model='deepseek-reasoner',即可调用 DeepSeek-R1。
    QString mCurlHttps = "https://api.deepseek.com/chat/completions";
    QString mModel = "deepseek-chat"; //deepseek-reasoner r1模型  ||  deepseek-chat v3模型
    QString mApiKey = "sk-23********************10a4f"; // API Key(前面自己创建的key)
    bool mIsStream{true}; // 是否流式数据

private slots:
    void onReadyRead();

private:
    void initialize();
    void request(const QByteArray &postData);
};

2.请求数据

void DeepSeekNetwork::seek(const QString &string)
{
    // messages部分
    QJsonArray messages;
    QJsonObject role;
    role["role"] = "system";
    role["content"] = "You are a helpful assistant.";
    messages.append(role);
    QJsonObject role2;
    role2["role"] = "user";
    role2["content"] = string;
    messages.append(role2);

    QJsonObject data;
    data["model"] = mModel;
    data["messages"] = messages;
    data["stream"] = true;

    QJsonDocument doc(data);
    QByteArray postData = doc.toJson();
    request(postData);
}

void DeepSeekNetwork::request(const QByteArray &postData)
{
    qDebug() << Q_FUNC_INFO << QThread::currentThread() << postData;
    // url
    mRequest.setUrl(QUrl(mCurlHttps));
    // head
    mRequest.setRawHeader("Authorization", ("Bearer " + mApiKey).toUtf8());
    mRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    // ssl
    QSslConfiguration config = QSslConfiguration::defaultConfiguration();
    config.setProtocol(QSsl::AnyProtocol);
    config.setPeerVerifyMode(QSslSocket::VerifyNone);
    mRequest.setSslConfiguration(config);

    //发送post请求
    mNetWorkReply = mNetWorkManager->post(mRequest, postData);
    // 链接槽函数
    if (mNetWorkReply != nullptr) {
        disconnect(mNetWorkReply, &QIODevice::readyRead, this, &DeepSeekNetwork::onReadyRead);
        connect(mNetWorkReply, &QIODevice::readyRead, this, &DeepSeekNetwork::onReadyRead);
    }
}

3.接收数据

void DeepSeekNetwork::onReadyRead()
{
    DeepSeekOutput result;
    result.status = 0;
    QString output;
    if (mNetWorkReply != nullptr && mNetWorkReply->error() == QNetworkReply::NoError) {
        QByteArray readData = (mNetWorkReply->readAll());
        qDebug() <<  readData;
        if (mIsStream) { // stream
            // "data: {\"id\":\"aae06e28-b806-4eda-82c1-0898ac13d5ba\",\"object\":\"chat.completion.chunk\",\"created\":1741859649,\"model\":\"deepseek-chat\",\"system_fingerprint\":\"fp_3a5770e1b4_prod0225\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\xE8\x8E\xB7\xE5\x8F\x96\"},\"logprobs\":null,\"finish_reason\":null}]}\n\n"
            QByteArray key = "data: ";
            QString str = QString::fromUtf8(readData);
            if (str.contains(key)) {
                QStringList strList = str.split(key);
                foreach (QString var, strList) {
                    if (var.isEmpty()) continue;
                    //对返回的json数据进行解析
                    QByteArray data = var.toUtf8();
                    QJsonObject obj = QJsonDocument::fromJson(data).object();
                    if (obj.contains("id") && obj.value("id").isString()) {
                        result.id = obj.value("id").toString();
                    }
                    qDebug() << Q_FUNC_INFO << QThread::currentThread() << "onReadyRead:" << obj;
                    if (obj.contains("error") && obj.value("error").isObject()) {
                        QJsonObject valueObj = obj.value("error").toObject();
                        QString message = valueObj.value("message").toString();
                        output = message;
                        result.status = -1;
                    } else {
                        QJsonArray choicesarray = obj.value("choices").toArray();
                        for (int i = 0; i < choicesarray.size(); i++) {
                            QJsonObject choiceobj = choicesarray[i].toObject();
                            if (choiceobj.contains("delta") && choiceobj.value("delta").isObject()) {
                                QJsonObject deltaObj = choiceobj.value("delta").toObject();
                                if (deltaObj.contains("content") && deltaObj.value("content").isString()) {
                                    output += deltaObj.value("content").toString();
                                }
                            }
                            if (choiceobj.contains("finish_reason") && choiceobj.value("finish_reason").isString()) {
                                QString finish_reason = choiceobj.value("finish_reason").toString();
                                if (finish_reason == "stop") result.status = 1;
                            }
                        }
                    }
                }
            }
        } else {
            //对返回的json数据进行解析
            QJsonObject obj = QJsonDocument::fromJson(readData).object();
            qDebug() << Q_FUNC_INFO << "onReadyRead:" << obj;
            if (obj.contains("id") && obj.value("id").isString()) {
                result.id = obj.value("id").toString();
            }
            if (obj.contains("error") && obj.value("error").isObject()) {
                QJsonObject valueObj = obj.value("error").toObject();
                // QString code = valueObj.value("code").toString();
                QString message = valueObj.value("message").toString();
                output = message;
                result.status = -1;
            } else {
                QJsonArray choicesarray = obj.value("choices").toArray();
                for (int i = 0; i < choicesarray.size(); i++) {
                    QJsonObject choiceobj = choicesarray[i].toObject();
                    if (choiceobj.contains("message") && choiceobj.value("message").isObject()) {
                        QJsonObject messageobj = choiceobj.value("message").toObject();
                        if (messageobj.contains("content") && messageobj.value("content").isString()) {
                            output += messageobj.value("content").toString();
                        }
                    }
                }
            }
        }

    } else {
        output = mNetWorkReply->errorString();
        result.status = -1;
        qDebug() << Q_FUNC_INFO << "https request error:" << output;
    }
    result.content = output;
    emit signalOutput(result);
}

deepseek api接入测试视频

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐