Ponga en marcha su configuración local de RAG: Guía para principiantes sobre el uso de Llama 3 LangChain con Ollama y Milvus
Con el auge de los LLM de código abierto como Llama 3, Mistral, Gemma, etc., se ha hecho evidente que los grandes modelos lingüísticos (LLM) también pueden ser útiles incluso cuando se ejecutan localmente. Este enfoque no sólo es práctico, sino que también resulta esencial, ya que los costes pueden dispararse al escalar con LLM comerciales como GPT-3 o GPT-4.
En esta guía práctica, veremos cómo implementar una Retrieval Augmented Generation (RAG) para crear un chatbot de preguntas y respuestas (Q&A) que pueda responder a preguntas sobre información específica. Esta configuración también utilizará Ollama y Llama 3, con tecnología Milvus, como almacén de vectores. Una implementación típica implica la creación de un canal de generación de texto para Llama 3.
Las diferentes herramientas para construir esta configuración de generación aumentada de recuperación (rag) incluyen:
Ollama: Ollama es una herramienta de código abierto que permite la gestión de Llama 3 en máquinas locales. Lleva la potencia de LLM a tu portátil, simplificando la operación local.
LangChain LangChain es un framework que simplifica el desarrollo de aplicaciones potenciadas por LLM. Es lo que usamos para crear un agente e interactuar con nuestros Datos.
es la base de datos vectorial que utilizamos para almacenar y recuperar sus datos relevantes de forma eficiente.
Llama 3 es un Large Language Model de código abierto desarrollado por Meta y es la última iteración de una línea de LLMs. Proporciona un formato complejo para las interacciones del usuario y soporta múltiples roles de usuario, incluyendo "sistema", "usuario" y "asistente".
Preguntas y respuestas con RAG
Construiremos un sofisticado chatbot de respuesta a preguntas (Q&A) utilizando RAG (Retrieval Augmented Generation). Esto nos permitirá responder a preguntas sobre información específica.
¿Qué es exactamente la generación aumentada de recuperación?
RAG, o Retrieval Augmented Generation, es una técnica que mejora los LLM integrando fuentes de datos adicionales. Una aplicación RAG típica implica:
Indización - una canalización para ingerir datos de una fuente e indizarlos, que normalmente consiste en cargar, dividir y almacenar los datos en Milvus. Los datos almacenados en Milvus son la representación de los datos en forma de incrustaciones vectoriales. Las incrustaciones capturan la esencia del contenido, lo que permite obtener resultados de búsqueda más relevantes en comparación con las búsquedas por palabras clave.
Recuperación y generación - Los sistemas de generación aumentada de recuperación mejoran la calidad de las respuestas recuperando el contexto relevante de una base de datos vectorial y pasándoselo a un LLM antes de generar las respuestas. Cuando se le proporciona contexto, el LLM evitará generar alucinaciones. Más concretamente, en tiempo de ejecución, RAG procesa la consulta del usuario, obtiene datos relevantes del índice almacenado en Milvus y el LLM genera una respuesta basada en este contexto enriquecido.
Esta guía está diseñada para ser práctica y mostrarle cómo se pueden utilizar los LLM locales para configurar una aplicación RAG. No es sólo para expertos, incluso los principiantes pueden sumergirse y empezar a crear su propio chatbot de preguntas y respuestas. ¡Empecemos!
Requisitos previos
Antes de empezar a configurar los diferentes componentes de nuestro tutorial, asegúrate de que tu sistema tiene lo siguiente:
- Docker & Docker-Compose - Asegúrese de que Docker y Docker-Compose están instalados en su sistema.
- Milvus Standalone - Para nuestros propósitos, utilizaremos Milvus Standalone, que es fácil de gestionar a través de Docker Compose; compruebe cómo instalarlo en nuestra documentación
- Ollama - Instala Ollama en tu sistema; visita su sitio web para consultar la última guía de instalación.
##Instalación de Langchain
Una vez que hayas instalado todos los prerrequisitos, estás listo para configurar tu aplicación RAG:
- Inicie una instancia Milvus Standalone con:
docker-compose up -d. - Este comando inicia su instancia Milvus en modo independiente, ejecutándose silenciosamente en segundo plano.
- Obtenga un modelo LLM mediante:
ollama pull <nombre_del_modelo>- Ver la lista de modelos disponibles a través de su biblioteca
- p.ej.
ollama pull llama3
- Este comando descarga la versión por defecto (normalmente la última y más pequeña) del modelo.
- Para chatear directamente con un modelo desde la línea de comandos, utilice
ollama run <nombre-del-modelo>
Instalar dependencias para el almacén de vectores
Para ejecutar esta aplicación, necesitas instalar las librerías de Python. Puedes usar Poetry si usas el código en Github directamente o instalarlas con pip si lo prefieres.
pip install langchain pymilvus ollama pypdf langchainhub langchain-community langchain-experimental
Aplicación RAG para aplicaciones basadas en llm
Como ya se ha dicho, un componente principal de RAG es la indexación de los datos.
- Comienza por la ingesta de datos desde tu PDF usando PyPDFLoader
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
datos = loader.load()
- Dividir los datos
Divide los datos cargados en trozos manejables utilizando el `RecursiveCharacterTextSplitter ``.
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(datos)
- Obtención de las incrustaciones y almacenamiento de los datos en Milvus
A continuación, convertimos los datos de texto en incrustaciones vectoriales utilizando Jina AI's Small English embeddings, y los almacenamos en Milvus.
from langchain_community.embeddings.jina import JinaEmbeddings
from langchain.vectorstores.milvus import Milvus
embeddings = JinaEmbeddings(
jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-es"
)
vector_store = Milvus.from_documents(documents=all_splits, embedding=embeddings)
- Cargue su LLM
Ollama facilita la carga y el uso local de un LLM. En nuestro ejemplo, usaremos Llama 3 de Meta, aquí está cómo cargarlo:
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = Ollama(
model="llama3",
callback_manager=CallbackManager(
[StreamingStdOutCallbackHandler()]
),
stop=["<|eot_id|>"],
)
- Construya su cadena de control de calidad con Langchain
Por último, construye tu cadena de control de calidad para procesar y responder a las consultas de los usuarios:
from langchain import hub
from langchain.chains import RetrievalQA
consulta = input("consulta: ")
prompt = hub.pull("rlm/rag-prompt")
qa_chain = RetrievalQA.from_chain_type(
llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt}
)
result = qa_chain({"consulta": consulta})
print(resultado)
Ejecute su aplicación
Ejecute su aplicación RAG por la última celda con la variable resultado.
Ejecute su aplicación RAG ejecutando:
python rag_ollama.py
Ejemplo de una interacción de control de calidad:
Consulta: ¿De qué trata este documento?
El documento parece ser un archivo de datos interactivos de portada 104 para una presentación ante la SEC. Contiene información sobre los estados financieros y las certificaciones de la empresa.{'query': '¿De qué trata este documento?', 'result': "El documento parece ser un archivo de datos interactivos de página de portada 104 para una presentación ante la SEC. Contiene información sobre los estados financieros y las certificaciones de la empresa."}
Y ya está. Acaba de configurar un sofisticado LLM local utilizando Ollama con Llama 3, Langchain y Milvus. Esta configuración no sólo hace que sea posible manejar grandes conjuntos de datos de manera eficiente, sino que también permite un sistema local de respuesta a preguntas con gran capacidad de respuesta.
No dudes en consultar Milvus, el código en Github y compartir tus experiencias con la comunidad uniéndote a nuestro Discord.
Recapitulación del contexto recuperado
Esta guía proporciona un recorrido para configurar una aplicación de Generación Aumentada de Recuperación (RAG) utilizando Modelos de Lenguaje Grande (LLMs) locales. Aprovechando herramientas como Ollama, Llama 3, LangChain y Milvus, demostramos cómo crear un potente chatbot de preguntas y respuestas (Q&A) capaz de gestionar consultas de información específicas con contexto recuperado de un almacén vectorial.
Los puntos clave son:
Descripción general de RAG: RAG mejora las capacidades de LLM mediante la integración de fuentes de datos externas. Implica la indexación de datos en incrustaciones vectoriales mediante Milvus y la recuperación del contexto relevante durante el procesamiento de consultas para generar respuestas precisas e informadas.
Herramientas destacadas:
- Ollama simplifica la gestión y ejecución local de modelos Llama 3.
LangChain proporciona un marco intuitivo para el desarrollo de aplicaciones basadas en LLM.
Milvus, como almacén de vectores, almacena y recupera eficientemente datos vectorizados, permitiendo un manejo preciso de las consultas.
Llama 3, desarrollado por Meta, soporta funcionalidades avanzadas con características como interacciones multi-rol y avisos de sistema personalizables.
El proceso de configuración abarcó pasos esenciales:
Requisitos previos: Instalación de Docker, Milvus Standalone, Ollama y las bibliotecas Python necesarias.
Indexación de datos: Uso de herramientas como PyPDFLoader y RecursiveCharacterTextSplitter para cargar, dividir y vectorizar datos.
Almacenamiento de incrustaciones: Convirtiendo text into embeddings con el modelo Jina AI y almacenándolos en el almacén de vectores de Milvus.
Construcción de una cadena de control de calidad: Integrando el almacén de vectores con Llama 3 a través de LangChain, configurando un prompt del sistema a medida para procesar y responder a las consultas de los usuarios.
Al ejecutar la aplicación, los usuarios pueden interactuar con su chatbot local para recuperar respuestas precisas y contextualmente relevantes de conjuntos de datos específicos. Una vez recuperados los documentos pertinentes, se transmiten al LLM para que genere las respuestas, un método de eficacia probada. La guía hace hincapié en la practicidad, garantizando la accesibilidad tanto para principiantes como para expertos. Tenga en cuenta que, para una recuperación óptima, puede ser necesario ajustar los parámetros en función de las características específicas de la aplicación.
Con la creciente importancia de los LLM de código abierto, esta configuración pone de relieve cómo las implementaciones localizadas reducen costes, mejoran la seguridad y ofrecen soluciones escalables para la recuperación de información y la generación. Explora el repositorio de GitHub y únete a nuestra comunidad de Discord para compartir tus experiencias y puntos de vista.
Sigue leyendo

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.

Introducing DeepSearcher: A Local Open Source Deep Research
In contrast to OpenAI’s Deep Research, this example ran locally, using only open-source models and tools like Milvus and LangChain.
