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.