Integración de la API de OpenAI con vLLM y Ollama para Inferencia Local

El estándar de la API de OpenAI se ha consolidado como la interfaz predominante para interactuar con modelos de lenguaje de gran escala (LLM). Herramientas como vLLM (motor de inferencia de alto rendimiento) y Ollama (solución ligera para ejecución local) han adoptado esta especificación para permitir que los desarrolladores migren sus aplicaciones desde servicios en la nube hacia infraestructuras privadas o locales sin reescribir su código base.

Matriz de compatibilidad de endpoints

La siguiente tabla detalla la disponibilidad de los principales servicios de OpenAI dentro de los ecosistemas de vLLM y Ollama:

Categoría Endpoint (OpenAI) Descripción Soporte en vLLM Soporte en Ollama
Chat y Texto /v1/chat/completions Conversaciones estructuradas y seguimianto de instrucciones. Total (Optimizado) Total
Completado /v1/completions Generación de texto base (Legacy). Soportado Soportado
Vectores /v1/embeddings Transformación de texto a representaciones numéricas (RAG). Soportado (Requiere modelo específico) Limitado / No nativo
Multimedia /v1/images/generations Generación de imágenes (DALL-E). No disponible No disponible
Audio /v1/audio/* Transcripción y traducción (Whisper). No disponible No disponible
Gestión /v1/models Listado de modelos cargados actualmente. Soportado Soportado

Análisis funcional por categoría

1. Generación de Chat y Texto

Esta es la funcionalidad central de ambos frameworks. El endpoint /v1/chat/completions es compatible con roles de system, user y assistant.

  • vLLM: Al iniciar el servidor, se expone automáticamente una API compatible. Su principal ventaja es el throughput masivo mediante técnicas como PagedAttention.
  • Ollama: Proporciona un servidor local que traduce las peticiones de OpenAI a su motor interno de forma transparente, facilitando la integración con herramientas como LangChain.

2. Embeddings (Vectores)

Mientras que OpenAI ofrece modelos como text-embedding-3-small, vLLM permite servir modelos de embedding de código abierto (como los de la familia BERT o modelos especializados de Hugging Face). Ollama, por su parte, se centra primordialmente en la generación de texto, por lo que el soporte para vectores suele requerir configuraciones adicionales o modelos específicos cargados manualmente.

3. Gestión de Modelos

Ambos frameworks implementan el endpoint /v1/models. Esto permite que las aplicaciones consulten qué modelos están "vivos" o listos para recibir peticiones. En vLLM, esto devolverá el modelo con el que se inició el proceso de Python; en Ollama, listará los modelos descargados en el sistema local.

Implementación técnica y ejemplos

Configuración con vLLM

Para interactuar con un servidor vLLM (usualmente en el puerto 8000), podemos utilizar la librería oficial de OpenAI en Python ajustando el punto de enlace.


from openai import OpenAI

# Definición de la conexión local
llm_endpoint = "http://localhost:8000/v1"
api_token = "NOT_REQUIRED"

servidor_vllm = OpenAI(
    base_url=llm_endpoint,
    api_key=api_token
)

respuesta = servidor_vllm.chat.completions.create(
    model="meta-llama/Llama-3-8B-Instruct",
    messages=[
        {"role": "system", "content": "Actúa como un experto en ciberseguridad."},
        {"role": "user", "content": "¿Cómo mitigar un ataque de inyección SQL?"}
    ],
    temperature=0.7
)

print(f"Respuesta de vLLM: {respuesta.choices[0].message.content}")

Mediante curl, la petición se estructuraría de la siguiente manera:


curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta-llama/Llama-3-8B-Instruct",
    "messages": [{"role": "user", "content": "Explicación breve de computación cuántica."}],
    "max_tokens": 100
  }'

Configuración con Ollama

Ollama opera por defecto en el puerto 11434. Su integración es idéntica en estructura, cambiando únicamente el puerto y el identificador del modelo.


from openai import OpenAI

# Configuración para Ollama
instancia_ollama = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"
)

flujo_chat = instancia_ollama.chat.completions.create(
    model="mistral:latest",
    messages=[
        {"role": "user", "content": "Genera una función en Python para ordenar una lista."}
    ],
    stream=False
)

print(f"Código generado: {flujo_chat.choices[0].message.content}")

Uso de curl con la API de Ollama:


curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mistral",
    "messages": [
      {
        "role": "user",
        "content": "¿Cuál es la capital de Francia?"
      }
    ]
  }'

Consideraciones sobre la compatibilidad

La adopción del formato de OpenAI por parte de estos frameworks no implica una paridad absoluta de funciones. Aspectos como el entrenamiento (Fine-tuning) y la gestión de archivos (Files API) para personalización no están disponibles a través de estas interfaces de inferencia local. vLLM y Ollama están diseñados estrictamente para el consumo de modelos ya entrenados.

Etiquetas: vLLM ollama OpenAI-API LLM Python

Publicado el 6-2 01:37