Protección de la integridad de los datos: implementación de RAG local con LLMware y Milvus
Durante nuestra sesión más reciente del Unstructured Data Meetup, tuvimos el privilegio de recibir a Darren Oberst, CEO de AI Blocks. Se graduó de UC Berkeley con títulos en física y filosofía y actualmente se centra en transformar el desarrollo de aplicaciones de modelos de lenguaje grandes (LLM) para servicios financieros y legales. En este meetup, Darren explicó por qué Retrieval Augmented Generation (RAG) debería implementarse en entornos locales para grandes empresas de servicios financieros y legales.
En este blog, no solo recapitularemos los puntos clave de Darren, sino que también proporcionaremos un ejemplo práctico de cómo crear RAG en una nube privada usando LLMware y la base de datos vectorial Milvus. Este ejemplo está diseñado para inspirarte y motivarte a aplicar este conocimiento a tus proyectos. También recomendamos ver la sesión completa en YouTube.
Desafíos clave con la implementación de RAG
Los modelos de lenguaje grandes pueden ser inconsistentes. A veces, ofrecen respuestas precisas, pero también pueden producir información irrelevante. Esta inconsistencia surge porque los LLM comprenden relaciones estadísticas entre palabras sin captar realmente sus significados. Además, los LLM se entrenan previamente con datos obsoletos y disponibles públicamente, lo que limita su capacidad para proporcionar respuestas precisas específicas para tus datos privados o la información más reciente.
Retrieval Augmented Generation (RAG) es una técnica popular para abordar esta limitación al mejorar las respuestas del LLM con fuentes externas de conocimiento almacenadas en una base de datos vectorial como Milvus, mejorando así la calidad del contenido. Aunque RAG es una técnica excepcional, implementarla presenta desafíos.
En la charla, Darren ****compartió los desafíos comunes a los que se enfrentan muchas empresas.
Preocupaciones sobre privacidad y seguridad de los datos: Muchas empresas, especialmente las de los sectores financiero y legal, dudan en usar servicios de nube pública debido a preocupaciones de privacidad y seguridad. Muchas soluciones existentes también se centran en nubes públicas en lugar de entornos locales, lo que plantea desafíos para las empresas que necesitan garantizar la seguridad de los datos y el cumplimiento normativo.
Costos elevados: La infraestructura de nube pública que utiliza con frecuencia modelos a gran escala puede generar facturas elevadas. Pagar una factura tan considerable sin tener control y propiedad completos de la infraestructura, los datos y las aplicaciones resulta en una situación en la que todos pierden.
Descuidar las estrategias de recuperación: Un aspecto crucial que a menudo se pasa por alto es la importancia de las estrategias de recuperación en la implementación de RAG. Aunque los equipos de IA tienden a centrarse en las capacidades de IA generativa, la calidad de los documentos recuperados es igualmente vital.
Implementación de RAG en entornos locales
Los desafíos mencionados anteriormente pueden abordarse eficazmente con una solución común: implementar RAG en una nube privada. Este enfoque aborda los problemas de las siguientes maneras:
- Mejor seguridad de los datos: Los documentos empresariales sensibles, la información regulatoria y otros datos propietarios deben permanecer dentro de los límites seguros de una nube privada para cumplir con los estándares de cumplimiento y seguridad. Si todo ocurre de forma privada, no habrá filtraciones.
- Menor costo: Implementar modelos de IA en infraestructura de nube privada puede ofrecer una solución más rentable que los servicios de nube pública, especialmente cuando se requiere un uso frecuente. El costo disminuye aún más cuando usamos modelos más pequeños, ya que logran resultados prácticos de manera más eficiente que los modelos más grandes y con mayor consumo de recursos. Debido a su rápida innovación y capacidades de personalización, los LLM y las tecnologías de código abierto son una excelente opción para tu RAG.
- Mejora de la generación con recuperación en una nube privada: Un mejor motor de recuperación puede complementar un modelo más pequeño con habilidades generativas limitadas. Solo creando un mejor sistema de recuperación se pueden mejorar significativamente la precisión y la eficiencia de las aplicaciones de IA, como el análisis de documentos, la fragmentación de texto y las consultas semánticas.
En resumen, Darren aboga por adoptar soluciones de nube privada para la IA, en particular los LLM, para abordar preocupaciones relacionadas con la privacidad de los datos, el costo y los resultados. A continuación, analizaremos los modelos Dragon diseñados y optimizados para RAG en la biblioteca Huggingface Transformers.
Modelos dRAGon (Delivering RAG On)🐉
Dragon es una serie de modelos lanzada por AI Blocks diseñada específicamente para la generación aumentada por recuperación (RAG). Es una serie de siete modelos de código abierto ajustados finamente con conjuntos de datos propietarios como contratos, documentos regulatorios e información financiera compleja. Hay tres categorías de modelos:
Clases de modelos y su descripción
Clases de modelos y su descripción
- Modelos Bling: Modelos compactos ajustados por instrucciones, optimizados para la creación rápida de prototipos y capaces de ejecutarse en CPU, lo que los hace ideales para las fases iniciales de prueba y desarrollo. Ejercen menos presión sobre la memoria, ya que solo incluyen entre 1 y 3 mil millones de parámetros.
- Modelos Dragon RAG: Versiones ajustadas finamente de modelos fundacionales líderes de 6 y 7 mil millones de parámetros como Llama, Mistral, Red-pajama, Falcon y Deci. Adaptados para tareas como la respuesta a preguntas basada en hechos y el análisis de documentos regulatorios.
- Modelos ****BERT**** industriales: Especializados para aplicaciones específicas de la industria, los modelos Industry BERT son sentence transformers ajustados finamente y adaptados a tareas como el análisis de contratos.
Además, estos modelos han sido evaluados rigurosamente mediante benchmarks de estructura RAG de sentido común. A diferencia de los modelos de código abierto que dependen de métricas científicas como MMLU y ARC, los modelos Dragon se prueban para determinar su precisión en el mundo real y casos de uso prácticos. Esta colección de modelos está disponible en HuggingFace como se muestra a continuación:
Modelos LLMware alojados en HuggingFace
Modelos LLMware alojados en HuggingFace
Los beneficios clave de usar estos modelos son los siguientes:
Precisión mejorada: Ajustados finamente con extensos conjuntos de datos, estos modelos ofrecen alta precisión en el análisis de documentos, la fragmentación de texto y las consultas semánticas.
Rentables: Optimizados para su uso en infraestructura de nube privada, estos modelos ofrecen una solución rentable en comparación con modelos más grandes y de uso intensivo de recursos en nubes públicas.
Código abierto y personalizables: Disponibles en Hugging Face, estos modelos de código abierto permiten una innovación rápida y una personalización para satisfacer necesidades empresariales específicas.
Rendimiento de nivel de producción: Evaluados en cuanto a confiabilidad, estos modelos proporcionan un rendimiento consistente y fiable en diversos flujos de trabajo.
Integración fluida: Con soporte integral y scripts de generación fáciles de usar, integrar estos modelos en flujos de trabajo existentes es sencillo.
Estos modelos no comprometen el costo, la precisión ni la personalización; su integración en LLMware facilita el acceso a ellos.
Un vistazo a LLMware
LLMware es una biblioteca diseñada para aplicaciones basadas en LLM de nivel empresarial. Utiliza modelos pequeños y especializados que pueden desplegarse de forma privada, integrarse de manera segura con fuentes de conocimiento empresariales y adaptarse de forma rentable a cualquier proceso de negocio. Este conjunto de herramientas es comparable a LangChain ****o LlamaIndex, pero está adaptado para una alta escalabilidad y una gestión robusta de documentos dentro de entornos empresariales.
Componentes de LLMware:
Canalización RAG: Proporciona componentes integrados para todo el ciclo de vida de la conexión de fuentes de conocimiento con modelos de IA generativa.
Modelos especializados: Incluye más de 50 modelos pequeños y ajustados para tareas empresariales como respuestas a preguntas basadas en hechos, clasificación, resumen y extracción. Estos modelos también incluyen los mencionados anteriormente; utilizaremos uno en nuestra implementación en la siguiente sección.
Características de LLMware:
Ingesta masiva de documentos:
Escalabilidad: Diseñado para gestionar la ingesta de cientos de miles de documentos, LLMware admite el procesamiento paralelo y la distribución entre múltiples trabajadores.
Análisis de documentos: Implementa especificaciones completas para analizar PDF, documentos de Word, PowerPoints y archivos de Excel utilizando analizadores personalizados basados en C.
Modelo de datos de extremo a extremo:
Almacenes de datos persistentes: Se integra con MongoDB para el almacenamiento persistente de datos, lo que permite una fragmentación e indexación eficientes de colecciones de texto.
Integración empresarial: Diseñado para integrarse sin problemas en flujos de trabajo de datos empresariales, garantizando una gestión de datos segura y escalable.
Framework para aplicaciones basadas en LLM:
Compatibilidad con código abierto: Esta característica prioriza el soporte para una amplia gama de modelos de código abierto y de Hugging Face, lo que facilita la creación y el despliegue de aplicaciones LLM.
Entorno rico en funciones: Se desarrolla continuamente para incluir nuevas características y capacidades que admiten diversos casos de uso en entornos empresariales.
Facilidad de uso:
Ejemplos y documentación: Proporciona ejemplos y documentación completos para ayudar a los usuarios a comenzar de forma rápida y eficiente.
Enfoque empresarial: Creado específicamente para abordar las necesidades únicas de los despliegues de LLM a nivel empresarial, desde la gestión de documentos hasta el procesamiento escalable.
Generación aumentada por recuperación en una nube privada usando Milvus y LLMware
Esta sección explicará e implementará una solución RAG local. Veamos la arquitectura para RAG usando LLMware y la base de datos vectorial Milvus.
La arquitectura
Este diagrama de arquitectura ilustra el flujo de trabajo de RAG en instalaciones locales usando LLMware y Milvus.
Diagrama de arquitectura para RAG en instalaciones locales usando LLMware y Milvus
Diagrama de arquitectura para RAG en instalaciones locales usando LLMware y Milvus
Aquí hay una explicación de cada componente:
Documentos: Los datos de entrada consisten en diversos documentos que se procesarán. En este ejemplo, los ~80 documentos de muestra se extraen del bucket S3.
Canalización de ingesta: Este es el paso inicial en el que los documentos se ingieren en el sistema. Esta canalización prepara los documentos para su posterior procesamiento extrayendo información relevante y posiblemente realizando tareas de preprocesamiento como limpiar o dar formato a los datos.
Generar incrustaciones: Después de la ingesta, los documentos se pasan a un modelo de incrustaciones. En este caso, un modelo Industry BERT convierte los documentos en representaciones numéricas (incrustaciones vectoriales) que capturan el significado semántico del texto.
Base de datos vectorial: Las incrustaciones generadas por el modelo Industry BERT se almacenan en una base de datos vectorial, Milvus, junto con los documentos. Esta base de datos vectorial especializada está diseñada para manejar y buscar eficientemente en datos vectoriales a gran escala.
Consulta: Un usuario envía una consulta al sistema.
Incrustaciones de la consulta: Esta consulta también se convierte en una incrustación para compararla con las incrustaciones de los documentos almacenadas en Milvus.
Buscar documentos: Se calcula la similitud entre las incrustaciones de la consulta y de los documentos, y los documentos se clasifican más alto en función de una mayor similitud.
Documentos recuperados: Se recuperan documentos relevantes con alta similitud. Se puede personalizar el número de documentos recuperados y el umbral de similitud.
LLM: Los documentos recuperados y la consulta se enviarán al LLM; en nuestro caso, el LLM es Bling 7B.
Resultado: La respuesta del LLM se proporciona al usuario.
La siguiente sección mostrará la implementación de la aplicación RAG en la nube privada.
Implementación
En esta implementación, construiremos la aplicación RAG ingiriendo ~80 documentos legales en la base de datos vectorial Milvus y haciendo preguntas mediante un LLM. Asumimos que el usuario ya ha instalado Milvus para este blog y puede iniciar el servicio.
Importaciones
Primero instalaremos las bibliotecas requeridas y las importaremos a nuestro entorno. Necesitaremos llmware y PyMilvus. Así es como se instala:
pip install llmware
Pip install pymilvus>=2.4.2
Después de este paso, importemos los módulos requeridos de llmware.
import os
from llmware.library import Library
from llmware.retrieval import Query
from llmware.setup import Setup
from llmware.status import Status
from llmware.prompts import Prompt
from llmware.configs import LLMWareConfig, MilvusConfig
Después de importar los datos, configuraremos la configuración.
Configuración
El paso de configuración es bastante simple. En este paso, almacenamos los nombres del modelo de incrustación, la base de datos vectorial y el LLM.
embedding_model = "industry-bert-contracts"
vector_db = "milvus"
llm = "llmware/bling-1b-0.1"
La configuración incluye el modelo de incrustación industry-bert-contracts, Milvus para la base de datos vectorial y el modelo de lenguaje llmware/bling-1b-0.1 para el procesamiento y análisis de documentos optimizados impulsados por IA.
Configuración de Milvus
Debido a su integración, es muy sencillo configurar Milvus usando llmware. Después de la instalación de PyMilvus, debemos establecer vector_db como Milvus y active_db como sqlite, como se muestra a continuación:
LLMWareConfig().set_active_db("sqlite")
MilvusConfig().set_config("lite", True) # Sin dependencia
LLMWareConfig().set_vector_db("milvus")
llmware admite Milvus-lite, que es autónomo y no requiere otras dependencias.
Crear una biblioteca
En llmware, una biblioteca es la estructura organizativa principal para la información no estructurada. Los usuarios pueden crear una gran biblioteca con contenido diverso o múltiples bibliotecas, cada una dedicada a un tema, proyecto, caso, acuerdo, cuenta, usuario o departamento específico.
Para crear una biblioteca, simplemente podemos llamar a la función create_new_library de la clase Library, que requiere un nombre arbitrario como argumento. Echemos un vistazo.
Library_name = "contracts-Rag"
library = Library().create_new_library(library_name)
Ingesta de documentos
La clase Setup en LLMware descarga archivos de muestra de un bucket de AWS S3, incluidos varios documentos de muestra como contratos, facturas, informes financieros, etc. Siempre puedes obtener la versión más reciente de estas muestras usando load_sample_files. En este ejemplo, cargaremos los “Agreements”.
sample_files_path = Setup().load_sample_files(over_write=False)
contracts_path = os.path.join(sample_files_path, "Agreements")
Llmware tiene una función útil llamada add_files, una herramienta de ingesta universal. Apúntala a una carpeta local que contenga tipos de archivos mixtos, y automáticamente enrutará los archivos por su extensión al analizador adecuado. Luego, los archivos se analizan, el texto se divide en fragmentos y se indexa en la base de datos de colección de texto.
library.add_files(input_folder_path=contracts_path)
Los documentos están cargados. Creemos sus embeddings.
Crear Embeddings
Todo en esta implementación se ejecuta de forma privada. Por lo tanto, el modelo de embeddings se descarga on-prem. Como se mencionó, el modelo de embeddings es industry-bert-contracts, mientras que Milvus es la base de datos vectorial.
library.install_new_embedding(embedding_model_name=embedding_model, vector_db=vector_db)
Después de instalar los embeddings en la biblioteca, puedes comprobar el estado de los embeddings para verificar los embeddings actualizados y confirmar que el modelo se ha capturado con precisión.
Status().get_embedding_status(library_name, embedding_model)
Veamos cómo invocar una llamada a un LLM en las siguientes secciones.
Cargar el Modelo de Lenguaje Grande
Usaremos la función load_model para cargar el modelo Bling. Estos son pequeños y buenos para pruebas rápidas.
prompter = Prompt().load_model(llm)
Buscar Documentos
En Llmware, la clase Query se utiliza para búsqueda y recuperación, y requiere una Biblioteca como parámetro obligatorio. Este enfoque permite que las recuperaciones aprovechen la abstracción de Biblioteca, admitiendo múltiples bases de conocimiento distintas alineadas con diferentes casos de uso, usuarios, cuentas y permisos.
Esta clase permite muchas funciones de búsqueda, como búsqueda de texto y búsqueda semántica. Usaremos búsqueda semántica para nuestro ejemplo.
query = "what is the executive's base annual salary"
results = Query(library).semantic_query(query, result_count=50, embedding_distance_threshold=1.0)
Unir Todas las Piezas
Esta sección iterará sobre todos los contratos, filtrará los resultados relevantes y generará las respuestas usando LLM. Aquí está el fragmento de código:
for i, contract in enumerate(os.listdir(contracts_path)):
qr = []
for j, entries in enumerate(results):
if entries["file_source"] == contract:
print("Top Retrieval: ", j, entries["distance"], entries["text"])
qr.append(entries)
source = prompter.add_source_query_results(query_results=qr)
response = prompter.prompt_with_source(query, prompt_name="default_with_context", temperature=0.3)
for resp in response:
if "llm_response" in resp:
print("\nupdate: llm answer - ", resp["llm_response"])
# start fresh for next document
prompter.clear_source_materials()
Aquí está la guía para ello.
Iterar Sobre Contratos: Para cada archivo de contrato en el directorio, inicializa una lista para almacenar resultados de consulta relevantes.
Filtrar Resultados Relevantes: Filtra los resultados que coinciden con el contrato actual e imprime las recuperaciones principales.
Generar Respuestas: Los resultados filtrados generan una respuesta con un modelo de lenguaje e imprimen las respuestas generadas.
Restablecer para el Siguiente Contrato: Borra los materiales fuente para prepararse para el siguiente contrato.
El resultado de la consulta se proporciona de la siguiente manera:
>>> Contract Name: Rhea EXECUTIVE EMPLOYMENT AGREEMENT.pdf
Top Retrieval: 1 0.6237360223214722
The Board (or its compensation committee) will annually review the Executive's base salary following the Employer's standard compensation and performance review policies for senior executives. While the salary may be increased, it cannot be decreased. The specific amount of any yearly increase will be determined based on these policies. For the purposes of this Agreement, "Base Salary" refers to the Executive's base salary as periodically established in accordance with Section 2.2.
Ten en cuenta que aquí solo se muestra la primera recuperación.
Arriba, hemos creado con éxito una aplicación RAG para documentos legales utilizando Milvus y LLMware. La mejor parte es que no se envía ningún dato a proveedores externos; todo, incluida la base de datos vectorial, el modelo de embeddings y el LLM, está en las instalaciones
Conclusión
Con la creciente adopción de la IA, interactuar con los datos se ha vuelto más fácil que nunca. Sin embargo, muchas empresas aún dudan en enviar sus datos a la nube, y con razón. LLMware proporciona una solución para crear sistemas de IA en las instalaciones en lugar de en la nube pública. Esta solución garantiza la privacidad de los datos, reduce los costos y ofrece más control.
Utilizando LLMware y la base de datos vectorial Milvus, podemos combinar el poder de la búsqueda por similitud vectorial y los LLMs para hacer preguntas sobre nuestros documentos privados. Milvus es una sólida base de datos vectorial de código abierto que almacena, procesa y busca datos vectoriales a escala de miles de millones. Una vez que Milvus recupera los top-K resultados más relevantes para el LLM, los LLMs tendrán el contexto para responder a sus consultas.
Sigue leyendo

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.

DeepSeek Always Busy? Deploy It Locally with Milvus in Just 10 Minutes—No More Waiting!
Learn how to set up DeepSeek-R1 on your local machine using Ollama, AnythingLLM, and Milvus in just 10 minutes. Bypass busy servers and enhance AI responses with custom data.

DeepRAG: Thinking to Retrieval Step by Step for Large Language Models
Discover DeepRAG, an advanced retrieval-augmented generation (RAG) model that improves LLM accuracy by retrieving only essential data through step-by-step reasoning.



