ChatGPT RESTful API 클라이언트
OpenAPI 생성기를 사용하여 OpenAI 모델과 통신하기 위한 RESTful API 클라이언트를 만드는 방법에 대한 예시입니다.

이 예제는 OpenAI API의 최신 OpenAPI 사양을 사용하여 RESTful API 클라이언트 코드를 생성합니다. 이 예제는 단순한 예시일 뿐이므로, 공식 OpenAI 사양에 설명된 모든 모델과 연산을 구현하지는 않습니다. 특히, 이 예제는 ` response_api.yaml ` 파일에 설명된 두 가지 연산으로만 제한됩니다:
- listModels - 사용 가능한 모델 목록을 반환합니다.
- createResponse - 선택한 모델에 사용자 요청을 전송하고, 응답 메시지를 수신합니다.
예제 실행
다음 위치에서 예제를 실행할 수 있습니다:
- Qt Creator
Welcome 모드를 열고 Examples 에서 예제를 선택하십시오. 자세한 내용은 Qt Creator: 튜토리얼: 빌드 및 실행을 참조하십시오.
- Qt Extension for Visual Studio Code
Command Palette 에서 Qt: Open Qt examples 명령을 실행하고 목록에서 예제를 선택하십시오. 자세한 내용은 Qt Extension for Visual Studio Code: 튜토리얼: 빌드 및 실행을 참조하십시오.
참고: 이 예제는 모델과 상호작용하기 위해 OpenAI 개인 키가 필요합니다. CHAT_OPENAI_KEY 환경 변수를 사용하여 키를 지정하십시오. Qt Creator에서 예제를 실행하는 경우, Projects -> Run Settings -> Environment 하에서 실행할 수 있습니다.
애플리케이션 기능
이 예제를 통해 사용 가능한 모델 목록에서 OpenAI 모델을 선택한 후, 해당 모델과 대화를 나눌 수 있습니다. 통신은 다음 네 가지 구성 모드로 제공됩니다:
- 마법사 - 설정 과정이 마법사처럼 진행되며, 주로 마법과 관련된 주제를 논의하는 것을 선호합니다.
- 과학자 - 알버트 아인슈타인처럼 행동하며, 물리학에 대한 토론을 즐깁니다.
- 일반 모드 - 추가 기능이 없는 표준 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 클래스인 ResponsesApi 와 ModelsApi 는 모든 저수준 HTTP 세부 사항을 처리합니다:
- 서버 구성
- 모든 표준 HTTP 메서드에 대한 HTTP 요청 생성
- 사양에 따른 입력 매개변수의 직렬화
- 서버 응답을 타입 지정된 객체로 역직렬화
- Qt 신호를 통한 성공 및 오류 보고
이제 아래 예시와 같이 ResponsesApi 클래스의 createResponse() 메서드를 호출하여 모델에 요청을 보내고, 그 응답을 파싱하기만 하면 됩니다:
m_responseApi->createResponse(response, this, [&](const QRestReply&reply,
const Response &summary) {
if (!reply.isSuccess()) {
qWarning() << "createResponse:" << reply.errorString() << reply.error();
} else {
// OpenAI 모델과의 대화 컨텍스트를 저장하려면,
// 마지막 모델 메시지의 ResponseId를 추적해야 합니다.
// 다른 모델로 전환하면 컨텍스트는 더 이상 관련이 없어집니다. 모델이
// 컨텍스트 ID를 알지 못하면, ResponseId가 비어 있는 경우와 마찬가지로 응답합니다.
m_responseId = summary.getId();
const QList<OutputMessage> outputMessage = summary.getOutput();
for (qsizetype msgIndex = 0; msgIndex < outputMessage.size(); msgIndex++) {
const QList<OutputTextContent> messages
= outputMessage.at(msgIndex).getContent();
for (qsizetype contentIndex = 0; contentIndex < messages.size(); contentIndex++)
emit responseReady(messages.at(contentIndex).getText());
}
}
});생성된 API를 QML에 노출하기
헬퍼 클래스 ` OpenAIChatManager `는 생성된 API 클래스인 ` ResponsesApi ` 및 ` ModelsApi `를 QML에 노출합니다. 이 클래스는 ` openaichatmanager.h`에 정의되어 있습니다.
이 헬퍼 클래스는 QML_ELEMENT 및 QML_SINGLETON 매크로를 사용하여 기본 C++ 인스턴스를 싱글톤으로 등록함으로써, 소유권은 C++에 남아 있는 상태에서 QML이 동일한 객체에 접근할 수 있도록 합니다:
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 컴포넌트는 아래와 같이 싱글톤 메서드를 사용하여 ` ResponsesApi ` 및 ` ModelsApi `에 접근할 수 있습니다:
function editingFinished() {
var messageObject = {"name": "Me", "message": messageField.text };
conversationModel.append(messageObject);
OpenAIChatManager.userRequest = messageField.text;
OpenAIChatManager.sendUserRequest();
messageField.text = "";
}소스 파일
관련 항목: 모든 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.