このページでは

ChatGPT RESTful API クライアント

OpenAPIジェネレータを使用して、OpenAIモデルと通信するためのRESTful APIクライアントを作成する方法の例です。

モデル選択ドロップダウンメニューと、ウィザード、サイエンティスト、レギュラーモード、お好みと書かれた4つのモードカード

この例では、RESTful API クライアントコードを作成するために、OpenAI API の最新のOpenAPI 仕様を使用しています。これは単なる例なので、公式のOpenAI仕様に記述されているモデルや操作の全セットを実装しているわけではありません。特に、この例ではresponse_api.yaml ファイルに記述されている 2 つの操作に限定しています:

  • listModels - 利用可能なモデルのリストを受け取ります。
  • createResponse - 選択したモデルにユーザリクエストを送信し、レスポンスメッセージを受け取ります。

例の実行

から例を実行するには、 モードを開き、 から例を選択します。 Qt Creatorからサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Qt Creator:Tutorialを参照してください:ビルドと実行

注: このサンプルでは、モデルと対話するために OpenAI の秘密鍵が必要です。キーを指定するにはCHAT_OPENAI_KEY 環境変数を使用します。このサンプルを Qt Creatorから実行する場合は、Projects -> Run Settings -> Environment の下で実行できます。

アプリケーションの機能

このサンプルでは、利用可能なモデルのリストからOpenAIのモデルを選択し、そのモデルとチャットすることができます。通信は4つの設定モードで提供されます:

  • Wizard - セットアップは魔法使いのように振る舞い、魔法に関する話題を好みます。
  • Scientist - セットアップはアルバート・アインシュタインのように振る舞い、物理学の議論を楽しみます。
  • 通常モード - 追加機能のない標準的なChatGPTセットアップです。
  • あなたの選択 - ChatGPTの動作に関するカスタム説明を作成できます。

モードを選択すると、チャットページが表示されます。

テキスト入力フィールドと「戻る」「送信」ボタンを備えたチャット会話

OpenAPI仕様からクライアントコードを生成する

Qt 6 OpenAPI ジェネレータは、CMakeLists.txt ファイルから呼び出され、qt_add_openapi_client() 関数を呼び出すことで、response_api.yaml 仕様からクライアントコードを生成します。

qt_add_library(openAIResponseApi)
qt_add_openapi_client(openAIResponseApi
    SPEC_FILE
        ${CMAKE_CURRENT_SOURCE_DIR}/response_api.yaml
)

生成された API クラスResponsesApiModelsApi は、すべての低レベル HTTP の詳細を処理します:

  • サーバー構成
  • すべての標準HTTPメソッドに対するHTTPリクエストの構築
  • 仕様に従った入力パラメータのシリアライズ
  • 型付きオブジェクトへのサーバーレスポンスのデシリアライズ
  • Qt シグナルによる成功とエラーの報告

あとは、ResponsesApi クラスのcreateResponse() オペレーションを呼び出してモデルにリクエストを送信し、そのレスポンスをパースするだけです:

m_responseApi>createResponse(response, this, [&](constQRestReply&reply, constResponse&summary) {if(!reply.isSuccess()) {if(!reply.isSuccess())        qWarning() << "createResponse:" << reply.errorString() << reply.error();
    }else{// openAIモデルとの会話のコンテキストを保存するために、 // 最後のモデルのメッセージのResponseIdを返すことを追跡する必要がある m_responseId=summary.getIdValue();constQList<OutputMessage>outputMessage=summary.getOutputValue();for(qsizetype msgIndex= 0; msgIndex<outputMessage.size(); msgIndex++) {constQList<OutputTextContent>messages=outputMessage.at(msgIndex).getContentValue();for(qsizetype contentIndex= 0; contentIndex<messages.size(); contentIndex++)emitresponseReady(messages.at(contentIndex).getTextValue()); } } });

生成されたAPIをQMLに公開する

ヘルパークラスOpenAIChatManager は、生成されたAPIクラスResponsesApiModelsApi をQMLに公開します。このクラスはopenaichatmanager.h で定義されています。

このヘルパークラスはQML_ELEMENTQML_SINGLETONマクロを使い、 C++ のインスタンスをシングルトンとして登録します:

class OpenAIChatManager : public QObject
{
    Q_OBJECT
    QML_ELEMENT
    QML_SINGLETON

    Q_PROPERTY(QString modelName READ modelName WRITE setModelName NOTIFY modelNameChanged FINAL)
    Q_PROPERTY(QString userRequest READ userRequest
               WRITE setUserRequest NOTIFY userRequestChanged FINAL)
    Q_PROPERTY(QStringList modelList READ modelList
               WRITE setModelList NOTIFY modelListChanged FINAL)
    Q_PROPERTY(CharacterMode characterId READ characterId
               WRITE setCharacterId NOTIFY characterIdChanged FINAL)
    Q_PROPERTY(QString customUserCharacter READ customUserCharacter
               WRITE setCustomUserCharacter NOTIFY customUserCharacterChanged FINAL)

createResponse() の操作は、OpenAIChatManager シングルトンの呼び出し可能な関数を介して公開されます:

    Q_INVOKABLE void sendUserRequest();

詳細については、Qt QMLのドキュメント「シングルトンを提供するクラスの登録」を参照してください。

QMLのAPIを使う

一度登録されたシングルトンは、QML内でグローバルに利用できるようになります。これにより、QMLコンポーネントは以下のようにシングルトンメソッドを使ってResponsesApiModelsApi にアクセスできるようになります:

function editingFinished() {
    var messageObject = {"name": "Me", "message": messageField.text };
    conversationModel.append(messageObject);
    OpenAIChatManager.userRequest = messageField.text;
    OpenAIChatManager.sendUserRequest();
    messageField.text = "";
}

ソースファイル

サンプルプロジェクト @ code.qt.io

すべてのQtサンプルと ColorPalette RESTful APIクライアントも参照してください

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.