【Qt网络】调用gpt示例

1. 相关知识

主要用到QNetwork和QJson。

2. 示例程序

首先,创建UI,PlainText用于输入想说的话,Label用于显示生成的话,一个按钮用于生成。

在这里插入图片描述

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

namespace Ui {
    
    
class MainWindow;
}

class MainWindow : public QMainWindow
{
    
    
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void onNetworkReply(QNetworkReply *reply);

private slots:
    void on_btnGenerate_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.pp
需要将API-Key替换成自己的。

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);

    connect(ui->btnGenerate, SIGNAL(clicked()), this, SLOT(on_btnGenerate_clicked()));
}

MainWindow::~MainWindow()
{
    
    
    delete ui;
}

void MainWindow::onNetworkReply(QNetworkReply *reply)
{
    
    
    if (reply->error() != QNetworkReply::NoError) {
    
    
        QMessageBox::critical(this, "Error", "Network error: " + reply->errorString());
        return;
    }

    QByteArray data = reply->readAll();
    QJsonDocument json = QJsonDocument::fromJson(data);

    if (json.isNull()) {
    
    
        QMessageBox::critical(this, "Error", "JSON error: invalid data received from server");
        return;
    }

    QJsonObject result = json.object()["choices"].toArray()[0].toObject();

    QString generated_text = result["text"].toString();

    qDebug() << generated_text;

    ui->txtGenerated->setText(generated_text);
}

void MainWindow::on_btnGenerate_clicked()
{
    
    
    QString prompt = ui->txtPrompt->toPlainText();
    QString api_key = "xxx";
    QString api_url = "https://api.openai.com/v1/engines/davinci-codex/completions";
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);

    QNetworkRequest request;
    request.setUrl(QUrl(api_url));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    request.setRawHeader("Authorization", api_key.toUtf8());

    QJsonObject input;
    input.insert("prompt", prompt);
    input.insert("temperature", 0.7);
    input.insert("max_tokens", 100);
    input.insert("top_p", 1.0);
    input.insert("frequency_penalty", 0.5);
    input.insert("presence_penalty", 0.5);
    input.insert("stop", "");

    QJsonObject data;
    data.insert("inputs", input);

    QJsonDocument json(data);

    manager->post(request, json.toJson());

    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onNetworkReply(QNetworkReply*)));
}

效果如下:

在这里插入图片描述

但是生成时有一个问题,可能是加密的问题,还未解决。

在这里插入图片描述

扫描二维码关注公众号,回复: 14605758 查看本文章

以上。

猜你喜欢

转载自blog.csdn.net/qq_40344790/article/details/129776892