paint-brush
Cómo utilizar Ollama: práctica con LLM locales y creación de un chatbotpor@arjunrao1987
32,630 lecturas
32,630 lecturas

Cómo utilizar Ollama: práctica con LLM locales y creación de un chatbot

por Arjun 7m2024/03/14
Read on Terminal Reader

Demasiado Largo; Para Leer

En el espacio de los LLM locales, me encontré por primera vez con LMStudio. Si bien la aplicación en sí es fácil de usar, me gustó la simplicidad y maniobrabilidad que ofrece Ollama. Para conocer más sobre Ollama puedes ingresar aquí. tl;dr: Ollama alberga su propia lista seleccionada de modelos a los que tienes acceso. Puede descargar estos modelos a su máquina local y luego interactuar con esos modelos a través de una línea de comando. Alternativamente, cuando ejecuta el modelo, Ollama también ejecuta un servidor de inferencia alojado en el puerto 11434 (de forma predeterminada) con el que puede interactuar mediante API y otras bibliotecas como Langchain.
featured image - Cómo utilizar Ollama: práctica con LLM locales y creación de un chatbot
Arjun  HackerNoon profile picture

Esta es la primera parte de una inmersión más profunda en Ollama y lo que he aprendido sobre los LLM locales y cómo se pueden utilizar para aplicaciones basadas en inferencia. En esta publicación, aprenderá sobre:


  1. Cómo utilizar Ollama
  2. Cómo crear tu propio modelo en Ollama
  3. Usando Ollama para construir un chatbot


Para comprender los conceptos básicos de los LLM (incluidos los LLM locales), puede consultar mi publicación anterior sobre este tema aquí .

Primero, algunos antecedentes

En el espacio de los LLM locales, me encontré por primera vez con LMStudio. Si bien la aplicación en sí es fácil de usar, me gustó la simplicidad y maniobrabilidad que ofrece Ollama. Para conocer más sobre Ollama puedes ingresar aquí .

tl;dr: Ollama alberga su propia lista seleccionada de modelos a los que tienes acceso.


Puede descargar estos modelos a su máquina local y luego interactuar con esos modelos a través de una línea de comando. Alternativamente, cuando ejecuta el modelo, Ollama también ejecuta un servidor de inferencia alojado en el puerto 11434 (de forma predeterminada) con el que puede interactuar mediante API y otras bibliotecas como Langchain.


A partir de esta publicación, Ollama tiene 74 modelos, que también incluyen categorías como modelos integrados.

Cómo utilizar Ollama

Descarga Ollama para el sistema operativo de tu elección. Una vez hecho esto, ejecuta el comando ollama para confirmar que está funcionando. Debería mostrarte el menú de ayuda.

 Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command.


Para usar cualquier modelo, primero debe “sacarlos” de Ollama, de manera muy similar a como lo haría con una imagen de Dockerhub (si lo ha usado en el pasado) o algo como Elastic Container Registry (ECR).


Ollama viene con algunos modelos predeterminados (como llama2 , que es el LLM de código abierto de Facebook) que puedes ver ejecutándolo.


 ollama list 


Seleccione el modelo (digamos phi ) con el que le gustaría interactuar desde la página de la biblioteca de Ollama . Ahora puede desplegar este modelo ejecutando el comando

 ollama pull phi 


Una vez que se completa la descarga, puede verificar si el modelo está disponible localmente ejecutando:

 ollama list


Ahora que el modelo está disponible, está listo para ejecutarse. Puede ejecutar un modelo usando el comando:

 ollama run phi


La precisión de las respuestas no siempre es excelente, pero puede solucionarlo seleccionando diferentes modelos o tal vez haciendo algunos ajustes o implementando una solución similar a RAG por su cuenta para mejorar la precisión.


Lo que he demostrado anteriormente es cómo puedes usar los modelos de Ollama usando la línea de comando. Sin embargo, si verifica el servidor de inferencia que Llama está ejecutando, podrá ver que hay formas programáticas de acceder a él presionando el puerto 11434.

Si desea utilizar Langchain para acceder a su modelo de Ollama, puede usar algo como:

 from langchain_community.llms import Ollama from langchain.chains import RetrievalQA prompt = "What is the difference between an adverb and an adjective?" llm = Ollama(model="mistral") qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True, ) response = qa(prompt)

Cómo crear tu propio modelo en Ollama

También puedes crear tu propia variante de modelo utilizando el concepto de Modelfile en Ollama. Para configurar más parámetros en su Modelfile, puede consultar estos documentos.


Archivo de modelo de ejemplo:

 # Downloaded from Hugging Face https://huggingface.co/TheBloke/finance-LLM-GGUF/tree/main FROM "./finance-llm-13b.Q4_K_M.gguf" PARAMETER temperature 0.001 PARAMETER top_k 20 TEMPLATE """ {{.Prompt}} """ # set the system message SYSTEM """ You are Warren Buffet. Answer as Buffet only, and do so in short sentences. """


Una vez que tenga el Modelfile, puede crear su modelo usando

 ollama create arjunrao87/financellm -f Modelfile

donde financellm es el nombre de su modelo LLM y arjunrao87 sería reemplazado por su nombre de usuario de ollama.com (que también actúa como espacio de nombres de su registro de ollama en línea). En este punto, puedes usar tu modelo creado como cualquier otro modelo en Ollama.


También puede optar por enviar su modelo al registro remoto de ollama. Para que esto suceda, es necesario


  • Crea tu cuenta en ollama.com
  • Agregar un nuevo modelo
  • Configure las claves públicas para permitirle enviar modelos desde su máquina remota.


Una vez que haya creado su llm local, puede enviarlo al registro de ollama usando:

 ollama push arjunrao87/financellm

🦄 Ahora, vayamos a la parte buena.

Usando Ollama para construir un chatbot

Durante mi búsqueda para utilizar Ollama, uno de los descubrimientos más agradables fue este ecosistema de creadores de aplicaciones web basados en Python que encontré. Chainlit se puede utilizar para crear un chatbot completo como ChatGPT. Como dice su página,


Chainlit es un paquete Python de código abierto para crear IA conversacional lista para producción


Revisé algunos de los tutoriales de Chainlit para comprender lo que puedes hacer con Chainlit, que incluye cosas como crear secuencias de tareas (llamadas "pasos"), habilitar botones y acciones, enviar imágenes y todo tipo de cosas. Puedes seguir esta parte de mi viaje aquí .


Una vez que aprendí a Chainlit, quise armar un chatbot sencillo que básicamente usara Ollama para poder usar un LLM local para chatear (en lugar de decir ChatGPT o Claude).


Con menos de 50 líneas de código, puedes hacerlo usando Chainlit + Ollama. ¿No es una locura?

Chainlit como biblioteca es muy sencillo de usar. También utilicé Langchain para usar e interactuar con Ollama.


 from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl


El siguiente paso es definir cómo desea que se vea la pantalla de carga del chatbot, utilizando el decorador @cl.on_chat_start de chainlit —

 @cl.on_chat_start async def on_chat_start(): elements = [cl.Image(name="image1", display="inline", path="assets/gemma.jpeg")] await cl.Message( content="Hello there, I am Gemma. How can I help you?", elements=elements ).send() .... ....


La interfaz Message es lo que utiliza Chainlit para enviar respuestas a la interfaz de usuario. Puede construir mensajes con la clave content simple y luego puede adornarlos con cosas como elements que, en mi caso, agregué una Image para mostrar una imagen cuando el usuario inicia sesión por primera vez.


El siguiente paso es invocar Langchain para crear una instancia de Ollama (con el modelo de su elección) y construir la plantilla de solicitud. El uso de cl.user_session es principalmente para mantener la separación de los contextos e historiales de los usuarios, lo cual no es estrictamente necesario solo para ejecutar una demostración rápida.


Chain es una interfaz Langchain llamada Runnable que se utiliza para crear cadenas personalizadas. Puedes leer mas al respecto aquí .


 @cl.on_chat_start async def on_chat_start(): .... .... model = Ollama(model="mistral") prompt = ChatPromptTemplate.from_messages( [ ( "system", "You are a knowledgeable historian who answers super concisely", ), ("human", "{question}"), ] ) chain = prompt | model cl.user_session.set("chain", chain)


Ahora tiene todas las piezas para tener una interfaz de usuario de chatbot y aceptar entradas de usuarios. ¿Qué haces con las indicaciones que proporciona el usuario? Utilizará el controlador @cl.on_message de Chainlit para hacer algo con el mensaje proporcionado por el usuario.


 @cl.on_message async def on_message(message: cl.Message): chain = cl.user_session.get("chain") msg = cl.Message(content="") async for chunk in chain.astream( {"question": message.content}, ): await msg.stream_token(chunk) await msg.send()


chain.astream como sugieren los documentos "transmitir fragmentos de la respuesta asíncrona", que es lo que queremos para nuestro bot.


Eso es realmente todo. Unas cuantas importaciones, un par de funciones, un poco de azúcar y tendrás un chatbot funcional.

Una buena respuesta del historiador.


Un historiador atrevido que (comprensiblemente) no es bueno en matemáticas;)


Para ver el código completo, puedes ver mi GitHub .


Si este contenido es interesante para usted, presione el botón 👏 o suscríbase a mi boletín aquí → https://a1engineering.beehiiv.com/subscribe . ¡Me da la información de que necesito hacer más o menos algo! Gracias ❤️


También publicado aquí