Configurar LangChain para ejecutar LLM locales con Ollama y Docker
Published
June 26, 2025
En tutoriales y diversos artículos de LangChain he visto que usan muchos modelos LLMs comerciales como por ejemplo OpenAI, Claude, Gemini, etc. Y me estuve preguntando ¿cómo sería ejecutarlo con modelos locales como Llama3?, y ¿por qué no? Usar Docker1 y uv2.
Luego de un par de horas probando logré ejecutar LangChain usando Llama3 con ChatOllama3 dentro de Docker y en este pequeño blog te comparto algunos detalles importantes de cómo funciona.
1 Descripción del proyecto
El proyecto lo que hace es traducir un texto del idioma Inglés al Español usando Llama3 en local con Ollama.
2 Requerimientos
Para ejecutar el proyecto solo necesitarás tener Docker instalado y si tienes habilitada la GPU con tarjeta Nvidia se ejecutará con mayor rapidez.
3 Explicación del código
Dockerfile
FROM ubuntu:24.04WORKDIR /app# Prepare environmentRUNapt-get update \&&apt-get install -y curl# Install uv and ollama1RUNcurl-LsSf https://astral.sh/uv/install.sh |sh\2&&curl-fsSL https://ollama.com/install.sh |sh# Copy files to the imageCOPY ./ /app/# Run Ollama Serve, get Ollama model and run LangChain with uv3CMD/bin/bash-c"ollama serve & sleep 2 && ollama pull llama3 && $HOME/.local/bin/uv run main.py ; pkill ollama"
1
Instalación de uv.
2
Instalación de Ollama.
3
Iniciar el server de Ollama en segundo plano, hay una espera de 2 segundos en lo que el server se levanta, luego descarga el modelo Llama3 para finalizar ejecutando con uv el proyecto.
Seguimos con el script de ejecución:
run.sh
# Build docker image1docker build -f Dockerfile -t langchain_ollama_local .# Run docker image with Nvidia GPU support2docker run --gpus all -v ollama:/root/.ollama langchain_ollama_local
1
Compila la imagen del Dockerfile y le da como nombre langchain_ollama_local.
2
Crea y ejecuta un contenedor con la imagen construida en el paso anterior y creando un volumen compartido con el host con la intención de que en cada ejecución no descargue el modelo Llama3 (son más de 3GB).
Finalizamos con el siguiente archivo:
main.py
from langchain_ollama import ChatOllamadef main():print("Hello from langchain-local-llm-ollama!") human_request ="They say data is the new oil… and I'm the chemical engineer!"print(human_request) llm = ChatOllama(1 model="llama3",2 temperature=0, ) messages = [3 ("system", "You are a helpful assistant that translates English to Spanish. Be concise don't ask question and translate the user sentence.",), ("human", human_request), ] ai_msg = llm.invoke(messages)4print(ai_msg.content)if__name__=="__main__": main()
1
Debe haberse descargado el model antes de usarse, la imagen se descarga desde Dockerfile.
2
Controla el nivel de “creatividad” del modelo, 0 indica la menor creatividad.
3
Prompt del sistema.
4
El mensaje generado da diferentes métricas de metadata. Usar esta opción si solo quieres el mensaje de salida.
4 Ejecución
Para ejecutar solo basta ejecutar el archivo run.sh con el siguiente comando:
sh ./run.sh
Para el ejemplo de este proyecto dio el siguiente resultado:
5 Notas finales
Usar la GPU hace que la respuesta sea más rápida.
Este proyecto solo traduce texto, pero ya tiene la base para ejecutar otros proyectos con LangChain con LLMs locales con Docker y Ollama.
La imagen de Docker de Ollama permite ejecutarse en GPU de AMD4 no la he probado pero interesante que ya se pueda hacer con gráficas AMD.