Conceptos básicos de LLM
10 ejemplos para empezar con LLM y GenAI: 7 básicos y 3 intermedios.
Prerrequisitos
uv venv && source .venv/bin/activate
uv pip install "openai>=1.60" "anthropic>=0.40" "tiktoken>=0.8"
export OPENAI_API_KEY="sk-..." # o ANTHROPIC_API_KEY- Python 3.14.0 con el SDK del proveedor instalado.
- Clave API para al menos un proveedor (OpenAI o Anthropic).
Ejemplos básicos
1. Tu primera completación de chat
Envía un mensaje y obtén una respuesta de texto.
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Explica las comprensiones de listas de Python en una frase."}],
)
print(response.choices[0].message.content)messageses una lista de diccionarios de rol/contenido.rolepuede sersystem,useroassistant.- El texto de la respuesta está en
choices[0].message.content.
Relacionado: SDK de OpenAI y otros - patrones de proveedor
2. Prompts del sistema y del usuario
Separa las instrucciones de la tarea del usuario.
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Eres un tutor conciso de Python. Responde en un máximo de 2 frases."},
{"role": "user", "content": "¿Qué es una expresión generadora?"},
],
)- El prompt del sistema establece la persona, el tono y las restricciones.
- El prompt del usuario contiene la pregunta o tarea real.
- Los prompts del sistema no son visibles para los usuarios finales en la mayoría de las interfaces de usuario.
Relacionado: Ingeniería de prompts - patrones de prompts
3. Cuenta tokens antes de enviar
Estima el costo y verifica los límites de contexto.
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o-mini")
text = "Explica el descenso de gradiente para un desarrollador junior."
tokens = enc.encode(text)
print(f"tokens: {len(tokens)}")- El recuento de tokens determina el costo de la API y si la entrada cabe en la ventana de contexto.
- Regla aproximada: 1 token ≈ 4 caracteres en inglés.
- Cuenta tanto la entrada como la salida esperada al presupuestar.
Relacionado: Tokens, Costos y Límites de Tasa - presupuestación
4. Controla la aleatoriedad con la temperatura
Temperatura más baja = salida más determinista.
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Dame un nombre creativo de equipo para un proyecto de Python."}],
temperature=0.9, # creativo
)
response2 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "¿Es 2+2 igual a 4?"}],
temperature=0.0, # determinista
)temperature=0para respuestas fácticas y repetibles.temperature=0.7-1.0para escritura creativa.top_p(muestreo de núcleo) es una alternativa a la temperatura.
5. Limita la longitud de la salida
Limita los tokens de respuesta para controlar el costo.
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Resume el GIL de Python."}],
max_tokens=100,
)max_tokenslimita la longitud de la completación, no la entrada.- Establece según el tamaño esperado de la respuesta.
- Detenerse temprano ahorra dinero en modelos verbosos.
6. Conversación de varios turnos
Pasa mensajes anteriores para obtener contexto.
messages = [
{"role": "user", "content": "Mi aplicación usa FastAPI y PostgreSQL."},
{"role": "assistant", "content": "¡Excelente pila! ¿En qué te gustaría ayuda?"},
{"role": "user", "content": "¿Cómo debería estructurar las migraciones de la base de datos?"},
]
response = client.chat.completions.create(model="gpt-4o-mini", messages=messages)- Incluye el historial completo de la conversación para el contexto de varios turnos.
- Un historial más largo usa más tokens; recorta los turnos antiguos cuando sea necesario.
- Las respuestas del asistente deben incluirse para mantener la continuidad.
7. Llama a Anthropic Claude
Mismo patrón, diferente SDK y formato de mensaje.
import anthropic
claude = anthropic.Anthropic()
message = claude.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=256,
system="Eres un asistente útil de Python.",
messages=[{"role": "user", "content": "¿Para qué se usa pydantic?"}],
)
print(message.content[0].text)- Anthropic separa
systemdemessages. contentes una lista de bloques de contenido (texto, imágenes, herramientas).- Los IDs de modelo cambian; consulta la documentación del proveedor para conocer los nombres actuales.
Relacionado: SDK de Anthropic Claude - guía completa de Claude
Ejemplos intermedios
8. Prompting de pocos ejemplos (Few-Shot)
Muestra ejemplos del formato de entrada/salida deseado.
messages = [
{"role": "system", "content": "Clasifica el sentimiento como positivo, negativo o neutral."},
{"role": "user", "content": "Texto: ¡Me encanta esta biblioteca!\nSentimiento: positivo"},
{"role": "assistant", "content": "positivo"},
{"role": "user", "content": "Texto: Se bloqueó dos veces hoy.\nSentimiento:"},
]
response = client.chat.completions.create(model="gpt-4o-mini", messages=messages, temperature=0)- Los ejemplos de pocos ejemplos enseñan el formato sin necesidad de ajuste fino.
- 2-5 ejemplos suelen ser suficientes; más consume tokens.
- Los ejemplos deben cubrir los casos extremos que te importan.
Relacionado: Ingeniería de prompts - patrones de pocos ejemplos
9. Salida JSON estructurada
Solicita JSON para análisis posterior.
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Enumera 3 frameworks web de Python como JSON con campos de nombre y año."}],
response_format={"type": "json_object"},
)
import json
data = json.loads(response.choices[0].message.content)response_format={"type": "json_object"}fuerza un JSON válido.- Menciona "JSON" en el prompt para obtener mejores resultados.
- Valida la salida analizada con Pydantic antes de usarla.
Relacionado: Salida Estructurada - esquemas Pydantic
10. Clave API basada en el entorno
Carga claves del entorno, nunca las codifiques directamente.
import os
from openai import OpenAI
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("Establece OPENAI_API_KEY")
client = OpenAI(api_key=api_key)- Usa archivos
.envlocalmente conpython-dotenv(añade.enva.gitignore). - Producción: gestor de secretos (AWS Secrets Manager, Vault).
- Rota las claves si se comprometen accidentalmente.
Versiones de la pila: Esta página se escribió para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.