Para aprovechar los modelos de lenguaje grandes (LLMs) gestionados por Ollama desde ubicaciones remotas, es fundamental configurar el servicio para que sea accesible a través de la red. A continuación, se detallan los pasos para una configuración inicial y consideraciones importantes:
1. Lanzamianto del Servidor Ollama con Acceso de Red
Cuando se ejecuta Ollama, por defecto, el servicio solo escucha en la interfaz local (127.0.0.1:11434). Para permitir conexiones desde otras máquinas en la red, es necesario ajustar la variable de entorno OLLAMA_HOST. Además, para controlar las fuentes de las solicitudes permitidas, se puede configurar OLLAMA_ORIGINS. Un valor de "*" permite solicitudes desde cualquier origen, útil para entornos de desarrollo o pruebas.
export OLLAMA_HOST="0.0.0.0:11434"
export OLLAMA_ORIGINS="*"
# Iniciar el servicio Ollama en segundo plano
ollama serve &
# Descargar y ejecutar un modelo, por ejemplo, Llama2
ollama run llama2
Los modelos descargados por Ollama se almacenan por defecto en ~/.ollama/models/. Esta ubicación incluye las carpetas blobs y manifests. Si se desea cambiar la ubicación predeterminada para el almacenamiento de modelos, se puede definir la variable de entorno OLLAMA_MODELS, por ejemplo:
export OLLAMA_MODELS="/mnt/ollama_data/models"
Para la migración de modelos a una nueva ubicación o sistema, es necesario identificar los archivos correspondientes. Cada modelo tiene un archivo manifest que referencia los blobs (archivos binarios del modelo). Por ejemplo, para un modelo específico, se puede examinar su manifest:
cat /root/.ollama/models/manifests/registry.ollama.ai/library/llama2/latest
Una vez identificados los hashes SHA256 de los blobs, se deben copiar los archivos correspondientes de las carpetas manifests y blobs a la nueva ubicación configurada en OLLAMA_MODELS.
2. Acceso Remoto a la API de Ollama
Una vez que el servidor Ollama está operativo y configurado para aceptar conexiones externas, se puede interactuar con él utilizando peticiones HTTP POST a la ruta /api/generate. Esto permite enviar instrucciones a los modelos cargados y recibir respuestas de texto. A continuación, se muestran ejemplos utilizanod curl para interactuar con un modelo específico.
Ejemplo Básico de Generación:
curl -X POST http://<DIRECCION_IP_DEL_SERVIDOR>:11434/api/generate -d '{
"model": "llama2",
"prompt": "¿Cuál es la capital de España?",
"stream": false
}'
Ejemplo con Opciones Avanzadas:
Es posible controlar el comportamiento de la generación de texto mediante un conjunto de opciones configurables, como la temperatura para la creatividad o la longitud máxima de la respuesta.
curl -X POST http://<DIRECCION_IP_DEL_SERVIDOR>:11434/api/generate -d '{
"model": "mistral",
"prompt": "Explica la importancia de la computación cuántica en el futuro de la tecnología.",
"stream": false,
"options": {
"temperature": 0.7,
"top_k": 40,
"top_p": 0.9,
"num_predict": 500,
"repeat_penalty": 1.1,
"presence_penalty": 0.5
}
}'
3. Integración con el Cliente OpenAI para Python
Ollama ofrece una capa de compatibilidad con la API de OpenAI, lo que permite utilizar la biblioteca cliente de OpenAI para Python para interactuar con los modelos de Ollama. Esto facilita la migración de aplicaciones existentes o el desarrollo de nuevas utilizando una interfaz familiar.
from openai import OpenAI
# Configuración del cliente para apuntar al servidor Ollama
cliente_ollama = OpenAI(
base_url='http://<DIRECCION_IP_DEL_SERVIDOR>:11434/v1/',
api_key='ollama_key', # Requerida pero su valor es ignorado por Ollama
)
# Definición de los mensajes para la interacción con el modelo
mensajes_conversacion = [
{
"role": "system",
"content": "Eres un asistente de IA útil que proporciona resúmenes concisos y puntos clave sobre temas complejos en español neutro.",
},
{
"role": "user",
"content": "¿Puedes explicar los principios fundamentales de la inteligencia artificial generativa y sus aplicaciones?",
}
]
# Realizar la solicitud de completado de chat
respuesta_chat = cliente_ollama.chat.completions.create(
messages=mensajes_conversacion,
model='mistral', # Usar un modelo cargado en Ollama, por ejemplo, mistral
max_tokens=2048,
temperature=0.8,
top_p=0.85,
frequency_penalty=0.1,
presence_penalty=0.5,
)
# Imprimir la respuesta generada por el modelo
print(respuesta_chat.choices[0].message.content)
Es importante notar que pueden surgir problemas de importación (ImportError: cannot import name 'OpenAI' from 'openai') si la versión de Python o la del paquete openai no son compatibles. Se recomienda utilizar Python 3.10 o superior, y asegurarse de que el paquete openai esté actualizado a la última versión compatible con su entorno.
4. Resolución de Errores HTTP 400
Un error HTTP 400 (Bad Request) indica que el servidor no pudo procesar la solicitud debido a un problema con la sintaxis o los parámetros de la misma. En el contexto de las APIs de modelos de lenguaje, esto a menudo se debe a:
- Formato JSON incorrecto en el cuerpo de la petición.
- Parámetros obligatorios ausentes.
- Valores de parámetros inválidos.
Se ha observado que, en algunas configuraciones o versiones de Ollama, incluir comillas simples directamente dentro del campo content del prompt en una petición JSON puede provocar un error 400. Asegúrese de que todo el contenido JSON esté correctamente escapado o que no contenga caracteres que rompan la estructura JSON, especialmente dentro de las cadenas de texto que forman parte del prompt.
5. Opciones de Configuración Avanzadas
Además de los parámetros básicos mostrados, la API de Ollama y el Modelfile permiten configurar un amplio rango de opciones para ajustar el comportamiento de los modelos, incluyendo control de creatividad (temperature), muestreo (top_k, top_p), y muchas otras. Para una lista completa y detallada de todas las opciones disponibles, se recomienda consultar la documentación oficial de la API de Ollama y la documentación de Modelfile.