基于QT与C++的豆包大模型AI接入

豆包大模型api_key和模型申请

接入豆包大模型前要进行一系列申请

  1. 进入火山大模型官网
    官网链接.

  2. 进入开通管理,选择一个大模型进行开通
    在这里插入图片描述

  3. 创建 API Key
    管理,点击【创建 API Key】,填写名称后创建 API Key 备用。
    在这里插入图片描述

  4. 创建接入点
    在这里插入图片描述

官方示例

curl --location 'https://ark.cn-beijing.volces.com/api/v3/chat/completions' \
--header 'Authorization: Bearer $ARK_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
        "model": "ep-20250106165900-qj2w8",
        "messages": [
        {"role": "user", "content": [
            {
                "type":"text",
                "text": "这是哪里"
            },
            {
                "type": "image_url",
                "image_url": {
                    "url": "https://ark-project.tos-cn-beijing.ivolces.com/images/view.jpeg"
                }
            }
        ]}
    ]
}'

由官方示例,可以得到官方的接口地址
https://ark.cn-beijing.volces.com/api/v3/chat/completions
结合上文3、4步中的api_key和接入点id我们就可以调用模型了。

QT代码

创建用以调用大模型的类

//头文件
#ifndef DOUBAOAPI_H
#define DOUBAOAPI_H

#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QSslConfiguration>
#include <QString>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QEventLoop>

class DoubaoAI : public QObject
{
    Q_OBJECT
public:
    DoubaoAI();
    QString DoubaoAI_request(QString& question);
private:
    QString OPENAI_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
    QString OPENAI_API_KEY = "设置为前面申请的api_key";
    QString OPENAI_MODEL = "设置为前面申请的模型id";
};

#endif // DOUBAOAPI_H

实现调用大模型的类

对大模型的提问只需将官方示例里面的text内容进行修改即可

#include "DoubaoApi.h"

DoubaoAI::DoubaoAI() {}

QString DoubaoAI::DoubaoAI_request(QString& question)
{
    QNetworkRequest request;
    QNetworkAccessManager manager;
    request.setUrl(QUrl(OPENAI_BASE_URL));
    
    //头部信息设置
    QString token = "Bearer " + OPENAI_API_KEY;
    request.setRawHeader("Authorization", token.toUtf8());
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");

    //post附加信息,用json格式构建官方示例里面的请求体内容
    QJsonArray context;
    QJsonObject textobj;
    textobj["type"] = "text";
    textobj["text"] = question;
    context.append(textobj);

    QJsonArray messagesarray;
    QJsonObject messageobj;
    messageobj["role"] = "user";
    messageobj["content"] = context;
    messagesarray.append(messageobj);

    QJsonObject data;
    data["model"] = OPENAI_MODEL;
    data["messages"] = messagesarray;

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

    QSslConfiguration config = QSslConfiguration::defaultConfiguration();
    config.setProtocol(QSsl::AnyProtocol);
    config.setPeerVerifyMode(QSslSocket::VerifyNone);
    request.setSslConfiguration(config);

    //发送post请求
    QNetworkReply *reply = manager.post(request, postData);

    //循环等待服务器返回数据
    QEventLoop waitserver;
    connect(reply, &QNetworkReply::finished, &waitserver, &QEventLoop::quit);
    waitserver.exec();
    
    if(reply != nullptr && reply->error() == QNetworkReply::NoError){
    	//得到返回的数据
        QByteArray reply_data = reply->readAll();
        //对返回的json数据进行解析
        QJsonObject obj = QJsonDocument::fromJson(reply_data).object();
        //qDebug() << "Response:" << obj;
        QJsonArray choicesarray = obj.value("choices").toArray();
        if (!choicesarray.isEmpty()){
            QJsonObject choiceobj = choicesarray[0].toObject();
            if (choiceobj.contains("message") && choiceobj["message"].isObject()) {
                QJsonObject messageobj = choiceobj["message"].toObject();
                if (messageobj.contains("content") && messageobj["content"].isString()) {
                    //qDebug() << "Content:" << context;
                    return messageobj["content"].toString();
                }
            }
        }
    } else {
        qDebug() << "https request error:" << reply->errorString();
    }
}

其中,返回的数据格式为

{
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null,
            "message": {
                "content": "我是豆包呀,是由字节跳动独立开发和训练的人工智能呀。",
                "role": "assistant"
            }
        }
    ],
    "created": 1736322123,
    "id": "021736322110211c5cb3f1ae218438d046d2571270e500347cb8c",
    "model": "doubao-vision-pro-32k-241028",
    "object": "chat.completion",
    "usage": {
        "completion_tokens": 531,
        "prompt_tokens": 11,
        "prompt_tokens_details": {
            "cached_tokens": 0
        },
        "total_tokens": 542
    }
}

我们只需要解析出content内容即可。

运行结果与说明

在这里插入图片描述
这里只简单的使用了豆包模型中的文本推理功能,后续可加入图片识别等功能,只需修改post请求体即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值