6. Introducción a ollama#
Ollama es una herramienta diseñada para facilitar la ejecución de modelos de inteligencia artificial en dispositivos locales sin depender de servidores en la nube. Se enfoca principalmente en modelos de lenguaje grandes (LLMs), permitiendo a los usuarios ejecutar, personalizar y compartir estos modelos con facilidad.
6.1. Principales características de Ollama#
Ejecución local de modelos
Ollama permite a los usuarios descargar y ejecutar modelos de lenguaje en su propia computadora, reduciendo la latencia y evitando la necesidad de enviar datos a servidores externos.Simplicidad en el uso
Con una interfaz sencilla y comandos directos, es fácil interactuar con modelos sin necesidad de configuraciones complicadas.Compatibilidad con múltiples modelos
Ollama soporta varios modelos de lenguaje, incluyendo versiones optimizadas para diferentes necesidades, como generación de texto, asistencia en programación y más.Privacidad y seguridad
Al ejecutarse localmente, Ollama evita el envío de datos sensibles a terceros, ofreciendo mayor privacidad y control sobre la información.Personalización y ajuste fino
Permite modificar modelos existentes y adaptarlos a tareas específicas mediante técnicas de ajuste fino.Código abierto y comunidad activa
Ollama es un proyecto de código abierto con una comunidad activa que contribuye a su mejora continua.
En resumen, Ollama es una solución potente para aquellos que buscan ejecutar modelos de inteligencia artificial de forma eficiente, segura y personalizable en sus propios dispositivos.
Para poder utilizar ollma, lo primero que tenemos que hacer es descargar la aplicación desde su página web (elegir el tipo de sistema operativo para el que se descarga y posteriormente ejecutar el fichero que se ha descargado desde la red.
Una vez que el servidor de ollama se encuentre en ejecución, debemos cargar el modelo que queramos La lista de modelos disponibles se pueden encontrar en este enlace .
Existen en internet muchos vídeos sobre esta herramienta, uno de ellos lo puedes encontrar en este enlace . Se debe tener en cuenta que para todas las exposiciones que se hacen en este apartado el modelo utilizado ha sido el denominado deepseek-r1 que es el último que ha sacado en estos momentos deepseek.
Para ejecutar todas las líneas de código que se muestran a continuación, ncesitamos que el servidor de ollama esté activado, y para ello debemos ejecutar los siguientes comandos:
ollama serve
ollama run deepseek-r1:latest
Como es de esperar estos modelos requieren mucho espacio de almacenamiento, por que lo más seguro es que el usuario quiera cambiar la carpeta donde se almacenen estos ficheros tan pesados. Para conseguir esto, se debe crear una variable de entorno denominada ‘OLLAMA_MODELS’ e indicar la ruta donde se desee sean almacenados los ficheros.
6.2. Ejecutar ollama con request#
La forma originaria de utilizar ollama es mediante llamadas al servido mediante una instrucción ‘cur’. Un ejemplo de este tipo de instrucciones puede ser el siguiente:
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "why is the sky blue?"
}
]
}'
Para ejecutar este tipo de código, existe en python la librería denomianda requests que será la que utilicemos para este tipo de instrucciones.
Lo primero que debemos hacer es instalarla en nuestro equipo en el supuesto de que no la tengamos instalada ya.
#!pip install requests
Después la traducción de la petición anterior se trasladaría a python de la siguiente manera
import requests
import json
url= "http://localhost:11434/api/generate"
headers = {
"Content-Type": "application/json"
}
data ={
"model" : "deepseek-r1:latest",
"prompt": "Hablame de Real Madrid",
"stream": False
}
response = requests.post(url,headers=headers, data=json.dumps(data))
if response.status_code == 200:
response_text = response.text
data = json.loads(response_text)
actual_response = data["response"]
print("*******")
print(actual_response)
else:
print("Error: ", response.status_code, response.text)
*******
<think>
Okay, the user wants me to talk about Real Madrid. I should start by mentioning how they are one of the most successful teams in Spanish football history.
I'll note their rich history dating back to 1899 and how they've won multiple titles over the years.
It's important to highlight their current status as a top-tier club with a strong fan base both in Spain and internationally.
I should mention some of their famous players like Zidane, Ramos, Benzoni, and Guardiola to give a sense of their legendary teams.
Also, emphasizing their commitment to innovation on the field and their global influence would add depth to the response.
</think>
El Real Madrid CF, fundado el 13 de noviembre de 1899 por Ramón Treserras y Emilio Ferrán, es una equipa argentina que actualmente gira en la Llana (Primera División) de la Liga Spanish. Es uno de los clubes más relevantes del fútbol, con una historia repleta de éxito y celebridad.
Entre sus muchos logros se encuentran winos como el Campeonato de España Cup 1930, la Copa del Mundo 1982 (con Zidane) y multos campeones de la Spanish League. Actualmente, Real Madrid está una de las equipas más potentes del mundo, con un fanado worldwide y una ergonomía deportiva que combinaquality y innovación.
Además, el club cuenta con un notable pasión de fútbol, lo que lo hace uno de los clubes más celebrados en todo el mundo. Actualmente, Real Madrid está actualmente en la 2ª posición de la Llana de la Liga, con una Campaigna goals de 8-0.
6.3. Ollama desde Python#
Existe una librería creada para poder utilizar ollama desde python. Esta librería se denomona ollama y su api se puede encontrar en este enlace:
Para su instalación se debe utilizar el siguiente comando
#!pip install ollama
A continuación se muestra un ejemplo, para su tilización. Como ya se ha dicho antes debemos tener activado en local el servidor de ollama, con el modelo que se indica en el ejemplo:
NOTA: El campo ‘role’ puede tener los mismos valores que en la API de OpenAI: “system”, “user”,assistant”. Para una ampliación de esto ver el siguiente enlace:
from ollama import chat
from ollama import ChatResponse
response: ChatResponse = chat(model='deepseek-r1', messages=[
{
'role': 'user',
'content': 'Dime algo sobre Valladolid',
},
])
print(response['message']['content'])
# or access fields directly from the response object
print(response.message.content)
6.4. ollama desde OpenAi.#
Igualmente ollama se puede utilizar desde la librería de OpenAi. Primero se instala la librería de la siguiente manera
#!pip install openai
Un ejemplo de utilización de la librería es el siguiente (como siempre debe estar el servidor de ollama levantado):
from openai import OpenAI
client = OpenAI(
base_url = 'http://localhost:11434/v1',
api_key='ollama', # campo requerido pero no usado
)
response = client.chat.completions.create(
model="deepseek-r1:latest",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The LA Dodgers won in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
print(response.choices[0].message.content)
<think>
Alright, so the user first asked, "Who won the World Series in 2020?" and I responded that the LA Dodgers won.
Now they're following up with a question about where the series took place. They want to know the location of the game.
I should make sure my response is clear and concise, providing both the city or country where it happened and specifically mentioning LA since that's relevant from their previous query about the winning team.
Also, using bold might help if they were expecting a specific formatting in the future, but for now, keeping it straightforward.
Alright, let me structure this so it's helpful.
</think>
The 2020 World Series was played in **Los Angeles**, California. Specifically, the final game was hosted at **Brookline Park** in Los Angeles.
from openai import OpenAI
client = OpenAI(
base_url = 'http://localhost:11434/v1',
api_key='ollama', # campo requerido pero no usado
)
stream = client.chat.completions.create(
model="deepseek-r1:latest",
messages=[{"role": "user", "content": "Dime cual es la capital de España"}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
<think>
Okay, the user is asking "dime cual es la capital de España," which means "Name the capital of Spain."
I know that the capital of Spain is Madrid.
Madrid is a major city in central Spain famous for places like the Príncipe Square and La Latina Street.
It's a significant cultural and economic center.
</think>
La capital de España es **MADRID**.
MADRID es una ciudad muy importante en España, conocida por su disponibilidad turística, su ubicación estratégica y por la celebración de multitud de eventos como la Feria de San Fermán.
6.5. ollama desde LangChain.#
LangChain es un marco de desarrollo diseñado para crear aplicaciones impulsadas por modelos de lenguaje, como chatbots, agentes autónomos y sistemas de recuperación de información. Su principal objetivo es facilitar la integración de modelos de inteligencia artificial con diversas fuentes de datos, herramientas y entornos de ejecución.
Este framework permite conectar modelos de lenguaje como GPT con bases de datos, API externas, documentos y otras herramientas para construir aplicaciones más dinámicas y contextualmente enriquecidas. Además, LangChain proporciona componentes reutilizables y modulares, como Chains (cadenas de procesamiento), Agents (agentes autónomos) y Memory (memoria conversacional), que permiten una mejor gestión de las interacciones con la IA.
LangChain es compatible con múltiples entornos y se puede usar tanto en Python como en JavaScript. Su flexibilidad lo hace ideal para desarrollar asistentes virtuales, generación de texto personalizada, automatización de tareas y otras aplicaciones avanzadas de IA.
LangChain se puede enfocar para modelos ollama de “text completion” o también para modelos “chat completions”
En esta introducción nos vamos a centrar en los modelo “text completion” , para el otro tipo de modelos, se remite al lector a este enlace . Los distintos modelos de Langchain para ollama se pueden ver en este enlace .
6.5.1. Modelos text completion#
Lo primero que debemos saber es si tenemos instalado o no en nuestro equipo el paquete ‘langcain-ollama’. Si no lo tenemos instalado debemos ejecutar lo siguiente:
#!pip install -U langchain-ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama.llms import OllamaLLM
template = """Question: {question}
Answer: Let's think step by step."""
prompt = ChatPromptTemplate.from_template(template)
model = OllamaLLM(model="deepseek-r1:latest")
chain = prompt | model
chain.invoke({"question": "Dame una introducción a Langchain?"})
"<think>\nOkay, I need to understand what LangChain is. From the previous introduction, it's an open-source framework developed by Hugging Face. It seems like it's used for building conversational AI systems. The user mentioned it supports chaining different models and custom code through a pipeline interface. That makes sense because building complex NLP tasks often requires combining multiple components.\n\nThe key features include modularity, extensibility, multi-modal capabilities, support for distributed training, and integration with other tools like LLMs and Databases. I should probably elaborate on each of these points to show a comprehensive understanding.\n\nModularity means you can use pre-trained models or custom ones without much hassle. Extensibility is important because it allows adding new components as needed. Multi-modal support would be beneficial for integrating images, videos, etc., into applications.\n\nDistributed training with LangChain probably refers to scaling up AI systems across multiple GPUs or nodes, which is useful for handling larger datasets or more complex models.\n\nIntegration with LLMs and databases suggests it's versatile in different application environments, whether standalone or part of a bigger system.\n\nI should also mention its use cases like customer support chatbots or personal assistants. Explaining how it helps build scalable applications would be good because scalability is a big concern in AI deployment.\n\nIn summary, my answer needs to cover these points clearly and concisely, showing that I understand LangChain's purpose, features, benefits, and applicable scenarios.\n</think>\n\n**Introducción a LangChain**\n\nLangChain es un framework abierto fuente desarrollado por Hugging Face, diseñado para construir sistemas de inteligencia artificial (IA) basados en la interacción humano-AI. Este framework permite integrar múltiples modelos y código personalizado a través de una interfaz pipeline, facilitando la construcción de tareas NLP complejas que requieren combinar diversos componentes.\n\nCaracterísticas principales de LangChain incluyen su modularidad, extensibilidad, apoyo por modalidades múltiples, posibilidad de entrenamiento distribuido y integración con herramientas adicionales como los modelos Large Language Models (LLMs) y bases de datos. Esta versatile Herramienta es ideal para aplicaciones como asistentes personales, soporte al cliente mediante chatbots, o sistemas más complejos que requieren escalabilidad.\n\nLangChain ajuda a construir aplicaciones IA de forma escalable y eficiente, permitiendo el uso de modelos pre-entrenados o personalizados y la integración de datos multimodales para ampliar su funcionalidad."
6.5.2. Modelos de tipo chat#
A continuación un ejemplo de código de tipo chat hecho desde Langchaim. La clase ChatOllama se puede ver sus propiedades en este enlace .
from langchain_ollama import ChatOllama
# Instanciamos la clase
llm = ChatOllama(
model = "llama3.1",
temperature = 0.8,
num_predict = 256,
)
messages = [
("system", "You are a helpful translator. Translate the user sentence to Spanish."),
("human", "I love programming."),
]
llm.invoke(messages)
AIMessage(content='Me encanta programar.', additional_kwargs={}, response_metadata={'model': 'llama3.1', 'created_at': '2025-02-14T17:29:53.0197799Z', 'done': True, 'done_reason': 'stop', 'total_duration': 4145183500, 'load_duration': 38339900, 'prompt_eval_count': 32, 'prompt_eval_duration': 2703000000, 'eval_count': 7, 'eval_duration': 1401000000, 'message': Message(role='assistant', content='', images=None, tool_calls=None)}, id='run-de06622e-e44d-435b-9099-fc22576282ee-0', usage_metadata={'input_tokens': 32, 'output_tokens': 7, 'total_tokens': 39})
messages = [
("human", "Return the words Hello World!"),
]
for chunk in llm.stream(messages):
print(chunk)
content='Hello' additional_kwargs={} response_metadata={} id='run-4d0c55f6-3f8f-4463-885c-d794e931d162'
content=' World' additional_kwargs={} response_metadata={} id='run-4d0c55f6-3f8f-4463-885c-d794e931d162'
content='!' additional_kwargs={} response_metadata={} id='run-4d0c55f6-3f8f-4463-885c-d794e931d162'
content='' additional_kwargs={} response_metadata={'model': 'llama3.1', 'created_at': '2025-02-14T17:30:56.9842802Z', 'done': True, 'done_reason': 'stop', 'total_duration': 3373773000, 'load_duration': 68521000, 'prompt_eval_count': 16, 'prompt_eval_duration': 2580000000, 'eval_count': 4, 'eval_duration': 720000000, 'message': Message(role='assistant', content='', images=None, tool_calls=None)} id='run-4d0c55f6-3f8f-4463-885c-d794e931d162' usage_metadata={'input_tokens': 16, 'output_tokens': 4, 'total_tokens': 20}
from langchain_community.llms.ollama import Ollama
#from langchain.callbacks.manager import CallbackManager
#from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
MODEL='deepseek-r1:latest'
llm = Ollama(model=MODEL)
llm.invoke("Dime la capital de España")
"<think>\nAlright, the user is asking for the capital of Spain. I know that Madrid is the capital.\n\nI should confirm it and maybe add a bit more information about why it's important.\n\nAlso, mentioning some key facts like its population could give more context.\n</think>\n\nLa capital de España es **Madrid**. Es un centro político, administrativo y cultural de la nation, con una población de más de 3 millones de habitantes."
Otro ejemplo, pero utilizando templates, puede ser el siguiente, en el que se construye una especie de chat-bot
from langchain_ollama import OllamaLLM
from langchain_core.prompts import ChatPromptTemplate
template ="""
Answer the question below.
Here is the conversation history: {context}
Question: {question}
"""
model = OllamaLLM(model=MODEL)
prompt =ChatPromptTemplate.from_template(template)
cahin = prompt | model
def handle_conversation():
context =""
print("Welcome to the AI ChatBot! Type 'exit' to quit.")
while True:
user_input =input("You: ")
if user_input.lower() == "exit":
break
result =chain.invoke({"context":context,"question":user_input})
print("Bot: ", result)
context += f"\nUser: {user_input}\nAI: {result}"
handle_conversation()
Welcome to the AI ChatBot! Type 'exit to quit.
Bot: <think>
Alright, so the user greeted me with "hey how are u doing." Hmm, that's pretty casual. I need to respond in a friendly and approachable way. Maybe start with acknowledging their greeting.
Wait, but looking back at my response template, it just says "Let's think step by step." That might not be appropriate here since the user asked for an answer, not some problem-solving process.
Okay, so I should adjust that. Instead of using the template, I'll craft a more conversational reply. Let me consider the possible ways to respond.
I could say something like, "Hey! I'm just a program, so I don't have feelings, but thanks for asking!" That's light and fun.
Or maybe, "Not bad, thanks! How about you?" But since they already asked how I am, that might not be necessary. Alternatively, acknowledge their greeting and then answer the question in a friendly manner.
Wait, perhaps "Hey! I'm just an AI, so I don't have feelings, but thanks for asking!" That's simple and clear.
Alternatively, I could say, "I'm doing well, thank you! How about you?" But since they already asked, maybe it's better to answer their question directly. Wait no, they asked how am I, not them. So I should address that in my response.
So, putting it all together: "Hey! I'm just an AI, so I don't have feelings or a body, but thanks for asking!" That seems appropriate and friendly.
</think>
Hey! Just an AI here, so no feelings or body, but thanks for asking! How about you?
6.6. Apéndice#
A continuación se muestra una serie de enlaces donde se explican diferentes aspectos de ollama