Cliente API RESTful de ChatGPT
Ejemplo de cómo utilizar el generador OpenAPI para crear un cliente API RESTful para comunicarse con modelos OpenAI.

Este ejemplo utiliza la última especificación OpenAPI para la API OpenAI para crear código de cliente de API RESTful. Dado que sólo se trata de un ejemplo, no implementa todo el conjunto de modelos y operaciones descritos en la especificación oficial de OpenAI. En concreto, el ejemplo se limita a dos operaciones descritas en el archivo response_api.yaml:
- listModels - recibe la lista de modelos disponibles.
- createResponse - envía una petición de usuario al modelo elegido, recibe un mensaje de respuesta.
Ejecución del ejemplo
Para ejecutar el ejemplo desde Qt Creator, abra el modo Welcome y seleccione el ejemplo de Examples. Para más información, consulte Qt Creator: Tutorial: Construir y ejecutar.
Nota: El ejemplo requiere una clave privada OpenAI para poder interactuar con los modelos. Utilice la variable de entorno CHAT_OPENAI_KEY para especificar la clave. Si ejecutas el ejemplo desde Qt Creatorpuede hacerlo bajo Projects -> Run Settings -> Environment.
Funcionalidad de la aplicación
El ejemplo permite elegir un modelo OpenAI de la lista de modelos disponibles y luego chatear con él. La comunicación se proporciona en cuatro modos de configuración:
- Mago - La configuración se comporta como un mago y prefiere discutir temas relacionados con la magia.
- Científico - La configuración se comporta como Albert Einstein y disfruta discutiendo sobre física.
- Modo Normal - Configuración estándar de ChatGPT sin características adicionales.
- Tu elección - puedes crear una descripción personalizada para el comportamiento de ChatGPT.
Una vez seleccionado un modo, aparece la página de chat.

Generación de código cliente a partir de una especificación OpenAPI
El generador OpenAPI de Qt 6 se invoca desde el archivo CMakeLists.txt para generar código cliente a partir de la especificación response_api.yaml llamando a la función qt_add_openapi_client().
qt_add_library(openAIResponseApi)
qt_add_openapi_client(openAIResponseApi
SPEC_FILE
${CMAKE_CURRENT_SOURCE_DIR}/response_api.yaml
)Las clases API generadas ResponsesApi y ModelsApi manejan todos los detalles HTTP de bajo nivel:
- Configuración del servidor
- Construcción de peticiones HTTP para todos los métodos HTTP estándar
- Serialización de parámetros de entrada según la especificación
- Deserialización de las respuestas del servidor en objetos tipados
- Notificación de errores y aciertos mediante señales Qt
Ahora, todo lo que necesitas hacer es enviar una petición al modelo llamando a la operación createResponse() de la clase ResponsesApi y analizar su respuesta, como se muestra a continuación:
m_responseApi->createResponse(response, this, [&](const QRestReply &reply, const Response &summary) { if (!reply.isSuccess()) { qWarning() << "createResponse:" << reply.errorString() << reply.error(); } else { // Para guardar el contexto de la conversación con el modelo openAI, // necesitamos rastrear el ResponseId de retorno del último mensaje del modelo. // El contexto se vuelve irrelevante después de cambiar al otro modelo. Si el modelo // no conoce el id del contexto, responderá como si el ResponseId estuviera vacío.m_responseId = summary.getIdValue(); const QList<OutputMessage> outputMessage = summary.getOutputValue(); for (qsizetype msgIndex = 0; msgIndex < outputMessage.size(); msgIndex++) { const QList<OutputTextContent> messages = outputMessage.at(msgIndex).getContentValue(); for (qsizetype contentIndex = 0; contentIndex < messages.size(); contentIndex++) emite responseReady(messages.at(contentIndex).getTextValue()); } } });
Exposición de las API generadas a QML
La clase de ayuda OpenAIChatManager expone las clases de API generadas ResponsesApi y ModelsApi a QML. Se define en openaichatmanager.h.
La clase helper utiliza las macros QML_ELEMENT y QML_SINGLETON y registra la instancia C++ subyacente como un singleton, lo que permite a QML acceder al mismo objeto mientras la propiedad permanece en 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)
La operación createResponse() se expone a través de la función invocable del singleton OpenAIChatManager:
Q_INVOKABLE void sendUserRequest();Para más detalles, consulte la documentación de Qt Qml sobre el registro de una clase para proporcionar singletons.
Utilización de las API de QML
Una vez registrado, el singleton está disponible globalmente en QML. Esto permite a los componentes QML acceder a ResponsesApi y ModelsApi utilizando los métodos del singleton, como se muestra a continuación:
function editingFinished() { var messageObject = {"name": "Me", "message": messageField.text }; conversationModel.append(messageObject); OpenAIChatManager.userRequest = messageField.text; OpenAIChatManager.sendUserRequest(); messageField.text = ""; }
Archivos fuente
Ver también Todos los ejemplos Qt y ColorPalette RESTful API client.
© 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.