现成的Assistant API调用代码几乎都是Python,这里提供一份Qt C++实现,调用用时使用
createthreadandrun(userInput);
message变量就会储存输出的值。tool之类指令未实现,每次对话使用的最简单的重新创建一个thread。后续可能会更新重新创建一个thread对话以及在同一个thread继续对话两种交互共存的代码。 比较粗糙的代码如下:
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QTimer>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkReply>
//.h定义部分
class Core : public QWidget
{
Q_OBJECT
public:
explicit Core(QWidget *parent = nullptr);
~Core();
void getthreadandrunid();
void createthreadandrun(QString& input);
void getrunstatus();
void checkrunstatus();
void sendgetmessagerequest();
void getmessage();
void getstepidrequest();
void getmessageid();
int getstate=0;
QNetworkAccessManager *networkManager;
QNetworkReply *runthreadreply;
QNetworkReply *getrunreply;
QNetworkReply *getstepreply;
QNetworkReply *getmessagereply;
QString openaiApiKey;//你的openai apikey
QString run_id;
QString thread_id;
QString status="0";
QString message_id;
QString message;
}
//.cpp部分
//创建thread和run 包含message发出
void Core::createthreadandrun(QString& input) {
QString userInput = input;
QJsonObject messageObject;
messageObject["role"] = "user";
messageObject["content"] = input;
QJsonArray messagesArray;
messagesArray.append(messageObject);
QJsonObject threadObject;
threadObject["messages"] = messagesArray;
QJsonObject mainObject;
mainObject["assistant_id"] = "你的预先在openai platform训练好的assistant_id";
mainObject["thread"] = threadObject;
if(getstate==1)
{
QNetworkRequest request(QUrl("https://api.openai.com/v1/threads/runs"));
request.setRawHeader("OpenAI-Beta", "assistants=v2");
request.setHeader