Módulo 3: LM Studio - Introducción
Migración de Código OpenAI a LM Studio
Descripción
Tomarás el chatbot del Módulo 2 y lo migrarás a LM Studio local. Cambio mínimo de código, máximo impacto.
Tiempo: 20 minutos
Dificultad: Baja
🎯 Objetivos
- ✅ Migrar chatbot Módulo 2 a LM Studio
- ✅ Verificar funcionamiento local
- ✅ Medir diferencias de performance
- ✅ Comparar costos
🔄 Paso 1: Código Original (Módulo 2)
# chatbot_openai.py (Módulo 2)
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
messages = [
{"role": "system", "content": "Eres un asistente útil."}
]
def chat(user_message):
messages.append({"role": "user", "content": user_message})
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages
)
assistant_message = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_message})
return assistant_message
# CLI
while True:
user_input = input("Tú: ")
if user_input.lower() == "salir":
break
response = chat(user_input)
print(f"Bot: {response}\n")
✅ Paso 2: Código Migrado (LM Studio)
# chatbot_lmstudio.py (Módulo 3)
from openai import OpenAI
# ÚNICO CAMBIO: base_url y api_key
client = OpenAI(
base_url="http://localhost:1234/v1",
api_key="not-needed"
)
messages = [
{"role": "system", "content": "Eres un asistente útil."}
]
def chat(user_message):
messages.append({"role": "user", "content": user_message})
response = client.chat.completions.create(
model="mistral-7b-instruct", # Cambia a modelo local
messages=messages
)
assistant_message = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_message})
return assistant_message
# CLI (IDÉNTICO)
while True:
user_input = input("Tú: ")
if user_input.lower() == "salir":
break
response = chat(user_input)
print(f"Bot: {response}\n")
Cambios totales: 3 líneas
base_urlapunta a localhostapi_keyno necesariamodelcambia a modelo local
📊 Paso 3: Comparación de Performance
Test script:
import time
from openai import OpenAI
# OpenAI Cloud
client_cloud = OpenAI(api_key="sk-...")
# LM Studio Local
client_local = OpenAI(
base_url="http://localhost:1234/v1",
api_key="not-needed"
)
def test_latency(client, model, name):
start = time.time()
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "Hola"}]
)
latency = time.time() - start
print(f"{name}: {latency:.2f}s")
return latency
# Test
lat_cloud = test_latency(client_cloud, "gpt-3.5-turbo", "OpenAI Cloud")
lat_local = test_latency(client_local, "mistral-7b-instruct", "LM Studio")
print(f"\nDiferencia: {lat_local/lat_cloud:.1f}x más lento (local)")
Output esperado:
OpenAI Cloud: 1.5s
LM Studio: 8.2s
Diferencia: 5.5x más lento (local)
💰 Paso 4: Comparación de Costos
1000 queries (500 tokens promedio):
OpenAI API:
1000 queries × 500 tokens × $0.002/1k = $1.00
LM Studio:
$0 (costo operativo)
Ahorro: $1.00 por cada 1000 queries
Break-even: Inmediato (costo $0 desde query 1)
🎯 Cuándo Usar Cada Opción
Usa OpenAI API cuando:
- Necesitas máxima calidad (GPT-4)
- Latency crítica (<2s)
- No tienes hardware potente
- Prototipo rápido
Usa LM Studio cuando:
- Privacidad crítica (on-premise)
- Budget $0 (side projects)
- Alto volumen (>100k queries/mes)
- Desarrollo local (sin internet)
🔄 Paso 5: Estrategia Híbrida
import os
# Detectar entorno
IS_PRODUCTION = os.getenv("ENV") == "production"
if IS_PRODUCTION:
# Producción: OpenAI (calidad máxima)
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
model = "gpt-3.5-turbo"
else:
# Desarrollo: LM Studio (gratis, local)
client = OpenAI(
base_url="http://localhost:1234/v1",
api_key="not-needed"
)
model = "mistral-7b-instruct"
# Resto del código idéntico
response = client.chat.completions.create(
model=model,
messages=[...]
)
Ventaja: Desarrolla gratis localmente, deploy a cloud para producción.
✅ Resumen
- Migración trivial (3 líneas cambiadas)
- Código 95% reutilizable
- Trade-off: Velocidad vs Costo
- Estrategia híbrida posible
Siguiente: 07-comparacion-performance.md