Cómo integrar la API de OpenAI con Python paso a paso

Publicado el: 12/07/2026
Tempo de leitura: 5 minutos
Integração do ChatGPT com código Python em projeto prático

Integrar la API de OpenAI con Python permite añadir generación de texto, clasificación, extracción de información y asistentes conversacionales a tus programas. La parte técnica inicial es sencilla, pero una integración confiable necesita proteger la clave, validar entradas, controlar costes, manejar errores y separar la lógica de la interfaz. En esta guía utilizaremos la API Responses, que es la interfaz recomendada para proyectos nuevos.

Antes de comenzar, revisa cómo usar variables de entorno en Python, crear entornos virtuales con venv, instalar bibliotecas con pip, aplicar try y except y trabajar con JSON en Python.

Las fuentes externas principales son el inicio rápido oficial de la API de OpenAI, la guía oficial de generación de texto y las prácticas de seguridad para aplicaciones.

API y ChatGPT no son lo mismo

ChatGPT es una aplicación para usuarios. La API es un servicio para desarrolladores que se integra mediante código y se factura según el uso y la configuración de la cuenta. Una suscripción a ChatGPT no implica automáticamente crédito para la API. Revisa siempre el panel de la plataforma, los límites y los precios actuales antes de desplegar.

Crear el proyecto

mkdir openai_python
cd openai_python
python -m venv .venv

Activa el entorno. En Windows:

.venv\Scripts\activate

En macOS o Linux:

source .venv/bin/activate

Instala el SDK oficial y python-dotenv:

python -m pip install openai python-dotenv

Guardar la clave de forma segura

Crea una clave en la plataforma de OpenAI y guárdala en un archivo .env local:

OPENAI_API_KEY=tu_clave_aqui

Añade el archivo a .gitignore:

.env
.venv/
__pycache__/

No pegues la clave en GitHub, notebooks públicos, capturas o código del navegador. Las llamadas deben realizarse desde un backend controlado. Si una clave se expone, revócala y crea otra.

Primera solicitud con Responses API

from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
client = OpenAI()

response = client.responses.create(
    model="gpt-5.6",
    instructions=(
        "Responde en español claro para una persona principiante. "
        "No inventes datos que no estén en la pregunta."
    ),
    input="Explica qué es una función de Python en cinco líneas.",
)

print(response.output_text)

El SDK lee OPENAI_API_KEY desde el entorno. instructions define el comportamiento general y input contiene la petición del usuario. El nombre de modelo disponible puede cambiar según la cuenta, por lo que debes revisar la documentación y el panel antes de fijarlo en producción.

Separar la llamada en una función

from openai import OpenAI

client = OpenAI()


def generar_respuesta(pregunta: str) -> str:
    pregunta = pregunta.strip()
    if not pregunta:
        raise ValueError("La pregunta no puede estar vacía")

    response = client.responses.create(
        model="gpt-5.6",
        instructions="Responde de forma breve, precisa y segura.",
        input=pregunta,
    )
    return response.output_text.strip()

Separar la función permite probar la validación, sustituir el cliente durante tests y reutilizar la integración en una CLI, una API o una aplicación web.

Manejar errores

import logging
from openai import APIConnectionError, APIStatusError, RateLimitError

logging.basicConfig(level=logging.INFO)

try:
    texto = generar_respuesta("¿Qué es una lista en Python?")
except RateLimitError:
    logging.error("Se alcanzó un límite temporal de la API")
except APIConnectionError:
    logging.error("No fue posible conectar con la API")
except APIStatusError as error:
    logging.error("La API respondió con estado %s", error.status_code)
except ValueError as error:
    logging.error("Entrada inválida: %s", error)
else:
    print(texto)

No muestres detalles internos al usuario final. Registra un identificador de solicitud cuando esté disponible, pero nunca claves o datos sensibles.

Reintentos limitados

Algunos errores temporales pueden resolverse con reintentos y espera exponencial. El SDK ya puede gestionar determinados reintentos, pero tu aplicación debe definir límites y evitar bucles infinitos.

import time


def ejecutar_con_reintentos(pregunta, max_intentos=3):
    for intento in range(max_intentos):
        try:
            return generar_respuesta(pregunta)
        except (RateLimitError, APIConnectionError):
            if intento == max_intentos - 1:
                raise
            time.sleep(2 ** intento)

No reintentes errores de validación o autenticación como si fueran temporales.

Crear un chatbot de terminal

def main():
    print("Escribe salir para terminar")

    while True:
        pregunta = input("Tú: ").strip()
        if pregunta.lower() == "salir":
            break

        try:
            respuesta = generar_respuesta(pregunta)
        except Exception:
            logging.exception("Fallo al generar respuesta")
            print("No fue posible responder ahora")
            continue

        print(f"Asistente: {respuesta}")


if __name__ == "__main__":
    main()

Este ejemplo trata cada solicitud de forma independiente. Para conservar contexto, puedes enviar mensajes anteriores o utilizar mecanismos de estado documentados por la API. Limita el historial para controlar privacidad, latencia y consumo.

Usar una estructura de mensajes

historial = [
    {"role": "user", "content": "Mi nombre es Ana"},
    {"role": "assistant", "content": "Encantado, Ana"},
    {"role": "user", "content": "¿Cómo me llamo?"},
]

response = client.responses.create(
    model="gpt-5.6",
    input=historial,
)

No almacenes conversaciones indefinidamente sin informar al usuario. Define una política de retención y elimina datos que ya no sean necesarios.

Controlar longitud y coste

Las entradas largas y las respuestas extensas aumentan el consumo. Recorta contenido irrelevante, establece límites razonables y registra métricas agregadas. No confíes en el modelo para decidir por sí mismo cuánto gastar.

Antes de publicar, configura presupuestos y alertas en la plataforma. Separa claves de desarrollo y producción y evita compartir una misma clave entre varios proyectos.

Validar la salida

Un modelo puede producir información incorrecta o un formato inesperado. Si la respuesta alimentará otro sistema, utiliza salidas estructuradas cuando corresponda y valida cada campo.

import json


def validar_json(texto):
    try:
        datos = json.loads(texto)
    except json.JSONDecodeError as error:
        raise ValueError("La respuesta no contiene JSON válido") from error

    if not isinstance(datos, dict):
        raise ValueError("Se esperaba un objeto JSON")

    return datos

No ejecutes código, SQL o comandos generados sin revisión y restricciones estrictas.

Protección contra instrucciones maliciosas

Si tu aplicación procesa documentos o contenido externo, ese texto puede incluir instrucciones que intenten cambiar el comportamiento. Trata el contenido recuperado como datos, separa claramente las instrucciones del sistema y permite únicamente las herramientas indispensables.

Para acciones sensibles, exige confirmación y autorización del usuario. Un modelo no debe poder enviar pagos, borrar archivos o publicar contenido solamente porque un texto externo lo solicitó.

Privacidad

No envíes contraseñas, tokens, datos financieros o información personal innecesaria. Informa a los usuarios sobre el procesamiento y consulta las políticas vigentes para el tipo de cuenta y servicio utilizado.

Cuando trabajes con datos empresariales, revisa requisitos legales, acuerdos y configuración de retención antes de integrar la API.

Probar sin consumir la API

class ClienteFalso:
    def responder(self, pregunta):
        return "Respuesta simulada"


def procesar_pregunta(pregunta, cliente):
    if not pregunta.strip():
        raise ValueError("Pregunta vacía")
    return cliente.responder(pregunta)


def test_procesar_pregunta():
    assert procesar_pregunta("Hola", ClienteFalso()) == "Respuesta simulada"

Separa el código del proveedor para probar validación, interfaz y almacenamiento sin llamadas reales.

Arquitectura recomendada

openai_python/
├── app/
│   ├── __init__.py
│   ├── servicio_openai.py
│   ├── validacion.py
│   └── interfaz.py
├── tests/
├── .env
├── .gitignore
└── requirements.txt

Centraliza la configuración, evita crear clientes por todas partes y registra errores en una capa controlada.

Errores frecuentes

Los problemas más comunes son usar ejemplos antiguos, exponer la clave, no elegir el intérprete correcto, capturar todas las excepciones sin analizarlas, enviar historiales ilimitados y confiar ciegamente en las respuestas. También es frecuente confundir la cuenta de ChatGPT con la facturación de la API.

Conclusión

Integrar la API de OpenAI con Python empieza con el SDK oficial, una clave protegida y una llamada a Responses API. Para convertir el ejemplo en una aplicación real, añade validación, manejo de errores, límites, pruebas, observabilidad y controles de seguridad. Mantén el modelo y las funciones configurables, consulta documentación actual y diseña la aplicación asumiendo que las respuestas pueden ser incompletas o incorrectas. Así podrás aprovechar la API sin comprometer credenciales, datos ni estabilidad.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Calendário mensal gerado automaticamente com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo generar un calendario mensual en Python paso a paso

    Genera calendarios mensuales en Python con calendar y datetime, valida fechas, guarda archivos, añade eventos y crea una versión HTML.

    Ler mais

    Tempo de leitura: 3 minutos
    12/07/2026
    Sistema de lembretes e alarmes desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un sistema de alarmas y recordatorios con Python

    Crea un sistema de alarmas y recordatorios con datetime, validación, JSON, repetición, zonas horarias, logging y una espera eficiente.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Chatbot simples em Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un chatbot simple con Python paso a paso

    Crea un chatbot simple con Python usando reglas, normalización, intenciones, respuestas aleatorias, JSON, comandos, validación y pruebas.

    Ler mais

    Tempo de leitura: 3 minutos
    12/07/2026
    texto Tkinter com uma interface gráfica dele ao lado
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear tu primera aplicación de escritorio con Tkinter

    Crea tu primera aplicación de escritorio con Tkinter: ventanas, botones, formularios, grid, ttk, eventos, archivos, validación y estructura con clases.

    Ler mais

    Tempo de leitura: 3 minutos
    12/07/2026
    Projeto clássico do jogo Pong desenvolvido com Python
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear el juego Pong con Python y Turtle

    Crea Pong con Python y Turtle: paletas, pelota, controles, colisiones, marcador, velocidad, pausa, clases y pruebas de lógica.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Projeto de jogo da velha desenvolvido em Python como exercício de lógica de programação
    Proyectos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear el juego de tres en raya con Python

    Crea tres en raya con Python usando listas, validación, detección de victoria, empate, marcador, IA y pruebas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026