Integrar la API de OpenAI en Python es sorprendentemente sencillo. En esta guía construimos un chatbot funcional desde cero — con historial de conversación, manejo de errores y buenas prácticas para no quemar tu presupuesto de API.
Configuración inicial
# Instalar la biblioteca oficial
pip install openai python-dotenv
# Estructura del proyecto
chatbot/
├── .env ← credenciales (NUNCA en git)
├── .gitignore
└── chatbot.py
# .env
OPENAI_API_KEY=sk-proj-tu-clave-aqui
# .gitignore
.env
__pycache__/
El cliente: versión mínima
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv() # carga el .env
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Una sola pregunta
response = client.chat.completions.create(
model="gpt-4o-mini", # más barato que gpt-4o, excelente para pruebas
messages=[
{
"role": "system",
"content": "Eres un asistente experto en redes de computadoras."
},
{
"role": "user",
"content": "¿Qué es el protocolo TCP?"
}
],
max_tokens=500,
temperature=0.7 # 0 = determinista, 1 = creativo
)
print(response.choices[0].message.content)
print(f"\nTokens usados: {response.usage.total_tokens}")
Chatbot con historial de conversación
Para que el modelo "recuerde" la conversación, debes enviar todo el historial en cada petición:
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def chatbot():
"""Chatbot interactivo con historial de conversación."""
system_prompt = """Eres un asistente educativo de tecnología llamado Sol.
Explicas conceptos de redes, ciberseguridad y programación de forma clara y concisa.
Siempre das ejemplos prácticos. Respondes en español."""
# El historial acumula todos los mensajes
historial = [{"role": "system", "content": system_prompt}]
print("🤖 Sol - Asistente de TICs")
print("Escribe 'salir' para terminar\n")
while True:
pregunta = input("Tú: ").strip()
if pregunta.lower() in ['salir', 'exit', 'quit']:
print("Sol: ¡Hasta pronto!")
break
if not pregunta:
continue
# Agregar la pregunta del usuario al historial
historial.append({"role": "user", "content": pregunta})
try:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=historial,
max_tokens=600,
temperature=0.7
)
respuesta = response.choices[0].message.content
# Agregar la respuesta del asistente al historial
historial.append({"role": "assistant", "content": respuesta})
print(f"\nSol: {respuesta}\n")
except Exception as e:
print(f"Error: {e}")
historial.pop() # remover la pregunta si falló
if __name__ == "__main__":
chatbot()
Controlar costos
# Limitar el historial para no acumular tokens infinitamente
MAX_HISTORIAL = 20 # últimos 20 mensajes
def recortar_historial(historial, max_mensajes=MAX_HISTORIAL):
"""Mantiene el system prompt + los últimos N mensajes."""
system = historial[0] # el system prompt siempre se conserva
mensajes = historial[1:]
if len(mensajes) > max_mensajes:
mensajes = mensajes[-max_mensajes:]
return [system] + mensajes
Modelos y costos aproximados (2025)
| Modelo | Input | Output | Cuándo usar |
|---|---|---|---|
| gpt-4o-mini | $0.15/1M tokens | $0.60/1M tokens | Chatbots, clasificación, tareas simples |
| gpt-4o | $2.50/1M tokens | $10/1M tokens | Análisis complejo, código, visión |
⚠️ Protege tu API key: Una API key filtrada puede costarte cientos de dólares en horas. Nunca la pongas en el código fuente. Siempre usa variables de entorno o un gestor de secretos. Activa límites de gasto en platform.openai.com.
"La API de OpenAI democratizó la IA — con 10 líneas de Python tienes acceso al mismo modelo que usa ChatGPT."