ES ▾
Obtener clave de API

GetAiApiKeyLista de verificación de API de IA para producción

Cómo instalar un LLM en Python: local o API

Puedes ejecutar un modelo en tu propia máquina, o instalar un pequeño paquete de Python y llamar a un modelo alojado por HTTP. Esta página cubre ambos casos y luego detalla paso a paso la ruta de la API.

Actualizado

Ilustración de un cable que conecta un script de Python con un cubo de modelo en la nube brillante, mostrando una conexión API

Puntos clave

  1. La instalación local necesita pesos del modelo y suficiente memoria; la ruta de la API solo necesita el paquete openai y una clave.
  2. Configura la URL base en https://api.getaiapikey.com/v1 y el modelo en uncensored.
  3. El streaming, las llamadas a funciones y el modo JSON funcionan a través del cliente estándar de OpenAI.
  4. Maneja el HTTP 429 con un reintento breve y mantén las llamadas concurrentes en 8 o menos.

Dos significados de instalar un LLM

Cuando la gente pregunta cómo instalar llm en python, generalmente se refiere a una de dos cosas. La primera es ejecutar un modelo localmente: descargar pesos y cargarlos con una biblioteca en tu propia CPU o GPU. La segunda es instalar una biblioteca cliente para que tu código de Python pueda comunicarse con un modelo que se ejecuta en otro lugar. Ambas son válidas y la correcta depende de tu hardware y de lo que quieras construir.

La ruta de la API es mucho más corta. Ejecutas pip install openai, apuntas el cliente a una base URL y llamas al modelo. Sin pesos, sin controladores de GPU, sin planificación de memoria. El resto de esta página da los pasos y el código para esa ruta, con una sección breve sobre la local para que puedas comparar.

Instalación local o API alojada: cómo elegir

PreguntaInstalación localAPI alojada
Lo que instalasUna biblioteca de inferencia más los pesos del modeloEl paquete openai
HardwareMemoria y generalmente una GPU adecuada para el modeloCualquier máquina que pueda hacer llamadas HTTPS
CostoTu hardware y electricidadPor token, desde crédito prepago
Funciona sin conexiónSíNo
Tiempo hasta la primera respuestaDescarga, configuración, ajusteUnos pocos minutos

Local tiene sentido si debes mantener todo en una sola máquina, necesitas trabajar sin conexión o quieres experimentar con los pesos mismos. Las bibliotecas como las bindings de llama.cpp o Hugging Face transformers son los puntos de partida habituales; consulta su propia documentación para los requisitos de hardware, ya que estos dependen del tamaño del modelo que elijas.

La API tiene sentido si quieres un resultado funcional rápidamente, tu portátil no puede contener un modelo grande o tu aplicación necesita atender a muchos usuarios. Pagas por token en lugar de comprar hardware. Para este servicio son $0.15 por 1M de tokens de entrada y $0.50 por 1M de tokens de salida, sin suscripción. La página de precios tiene los detalles.

Paso 1: crear un entorno virtual e instalar el paquete

Usa un entorno virtual para que la instalación se mantenga limpia. Cualquier versión reciente de Python 3 funciona con el paquete openai.

python3 -m venv .venv
source .venv/bin/activate
pip install openai

A continuación necesitas una clave. Regístrate en la página de claves de API con Google o con correo electrónico y contraseña. Los usuarios nuevos pueden reclamar $0.50 de crédito de prueba gratis allí con un clic, válido por 7 días y sin tarjeta. Almacena la clave en una variable de entorno en lugar de en tu archivo de origen:

export API_KEY="paste-your-key-here"

Paso 2: hacer tu primera llamada

El servicio es compatible con OpenAI, por lo que los únicos cambios desde un script estándar de OpenAI son la base URL y el ID del modelo. El ID del modelo es uncensored.

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a context window is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

Si esto imprime una respuesta y dos conteos de tokens, la instalación está lista. Para verificar que tu clave funciona y ver el ID del modelo, también puedes llamar a GET /v1/models:

for m in client.models.list():
    print(m.id)

La misma petición desde la shell, sin Python en absoluto, es una única llamada curl a https://api.getaiapikey.com/v1/chat/completions con el encabezado Authorization: Bearer seguido de tu clave. La guía de inicio rápido de la documentación la muestra completa.

Paso 3: transmitir tokens a medida que llegan

Esperar a que termine una respuesta larga antes de imprimir algo se siente lento. Establece stream=True y el servidor envía tokens mediante eventos enviados por el servidor. Puedes solicitar un resumen de uso en el último fragmento con stream_options.

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.total_tokens, "tokens")

Un detalle importante para producción: una petición en streaming mantiene su slot de concurrencia hasta que termina el stream. Una clave completa permite 8 peticiones concurrentes, así que si tu aplicación abre muchos streams largos, ciérralos cuando el usuario se desconecte.

Paso 4: modo JSON y llamadas a funciones

Para una salida estructurada, establece response_format a un objeto JSON. También indícale al modelo en el prompt que responda en JSON, porque la configuración garantiza una sintaxis JSON válida pero no los nombres de campos que deseas.

import json

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
        {"role": "user", "content": "Give me a title and tags for a post about slow travel."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

Las llamadas a funciones siguen el patrón estándar. Describes una función, el modelo puede pedir llamarla, la ejecutas tú mismo y envías el resultado de vuelta con role: "tool".

tools = [{
    "type": "function",
    "function": {
        "name": "get_time",
        "description": "Return the current time for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)

msg = first.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps({"time": "14:05"}),
    })
    final = client.chat.completions.create(
        model="uncensored", messages=messages, tools=tools
    )
    print(final.choices[0].message.content)

Prueba las llamadas a funciones con algunos prompts antes de confiar en ellas. Cualquier modelo puede elegir la función incorrecta o rellenar un argumento mal, así que valida los argumentos en tu propio código antes de ejecutar cualquier cosa con efectos secundarios.

Paso 5: manejar límites y errores

Las claves completas permiten 8 peticiones concurrentes y 300 peticiones por minuto. Las claves de prueba permiten 2 y 60. Al superar esos límites recibes HTTP 429. El código de error rate_limited significa demasiadas peticiones por minuto, y concurrency significa demasiadas a la vez. En caso de sobrecarga temporal, la API también devuelve 429 con un encabezado Retry-After: 5.

El cliente de Python de OpenAI reintenta algunos fallos por sí mismo, pero un envoltorio explícito mantiene el comportamiento obvio:

import time
from openai import RateLimitError

def ask(messages, tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited after retries")

Cada respuesta lleva X-Request-Id, X-Balance-USD y encabezados de límite de peticiones, que puedes registrar. Incluye el ID de la petición si contactas con soporte. Las peticiones fallidas o rechazadas no se cobran, por lo que reintentar no cuesta extra.

Planifica también los límites de tamaño. La ventana de contexto es de 100.000 tokens, prompt más completación, y el cuerpo máximo de la petición es de 8 MB. Los historiales de chat largos deben recortarse o resumirse antes de alcanzar esos números.

Cuando la llamada no funciona

La mayoría de los problemas de la primera ejecución provienen de un puñado de errores. Verifica estos en orden antes de sospechar de cualquier otra cosa.

  • Base URL sin la ruta de la versión. El valor debe terminar en /v1. El cliente añade /chat/completions a ella, por lo que una falta de /v1 envía la petición a la ruta incorrecta.
  • Clave incorrecta o faltante. La clave va en el encabezado Authorization: Bearer, que el cliente construye a partir de api_key. Si la variable de entorno está vacía, el cliente o bien lanza un error al inicio o envía una clave en blanco. Imprime bool(os.environ.get("API_KEY")) para verificar.
  • Un nombre de modelo de otro servicio. El único ID de modelo aquí es uncensored. Nombres como los de otros tutoriales no coincidirán.
  • Sin saldo. Mira el encabezado X-Balance-USD. Una prueba que pasó sus 7 días, o un saldo gastado, necesita una recarga desde $20.
  • Paquete antiguo. Si un ejemplo usa OpenAI( y Python dice que no puede importar ese nombre, tienes el paquete pre-1.0. Ejecuta pip install --upgrade openai.

Para ver la respuesta cruda incluyendo encabezados, usa el envoltorio de respuesta cruda del cliente:

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)

Esto imprime el ID de la petición y tu saldo restante junto con la respuesta, lo cual es una verificación rápida de salud que puedes ejecutar desde un trabajo cron o un script de inicio.

Uso desde otras herramientas

Como el endpoint sigue el formato de OpenAI, otras bibliotecas de Python pueden usarlo con los mismos dos ajustes. Los frameworks que aceptan una base URL personalizada de OpenAI solo necesitan base_url y api_key. Para Node, el paquete oficial openai toma los mismos campos:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.getaiapikey.com/v1",
  apiKey: process.env.API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);

Este es un servicio solo de texto: sin generación de imágenes o audio, sin embeddings ni ajuste fino. Si tu proyecto necesita eso, combina esta API con otra herramienta para esa parte. El modelo es un modelo de pesos abiertos ejecutado por un proveedor independiente y ajustado para responder sin rechazos de contenido para uso adulto lícito. El contenido sexual que involucre a menores de edad nunca está permitido.

Preguntas y respuestas

¿Necesito una GPU para usar un LLM en Python de esta forma?

No. El modelo se ejecuta en el lado del proveedor. Tu máquina solo necesita Python y una conexión a internet para llamar al endpoint.

¿Qué paquete instalo?

Instala el paquete oficial openai con pip. Luego establece la Base URL en https://api.getaiapikey.com/v1 y el modelo en uncensored.

¿Hay una forma gratuita de probarlo?

Los nuevos usuarios pueden reclamar $0.50 de crédito de prueba gratis con un solo clic después de registrarse. Es válido por 7 días, no requiere tarjeta y está limitado a uno por persona.

¿Cuánto cuesta una petición?

Una petición con 2,000 tokens de entrada y 500 tokens de salida cuesta $0.00055, a $0.15 y $0.50 por 1M de tokens. Solo pagas por las peticiones exitosas.

¿Admite streaming y llamadas a funciones?

Sí. El streaming sobre SSE, las llamadas a funciones y el modo JSON funcionan a través del cliente estándar de OpenAI.

Tu clave está a un formulario de distancia

Crea una cuenta, copia la clave, cambia la URL base. Esa es toda la configuración.