Protegendo a integridade dos dados: implantação RAG on-premises com LLMware e Milvus
Durante nossa sessão mais recente do Unstructured Data Meetup, tivemos o privilégio de receber Darren Oberst, CEO da AI Blocks. Ele se formou na UC Berkeley com diplomas em física e filosofia e atualmente está focado em transformar o desenvolvimento de grandes modelos de linguagem (LLM) para serviços financeiros e jurídicos. Neste meetup, Darren discutiu por que a Geração Aumentada por Recuperação (RAG) deve ser implantada on-premises para grandes empresas de serviços financeiros e jurídicos.
Neste blog, não apenas recapitularemos os principais pontos de Darren, mas também forneceremos um exemplo prático de construção de RAG em uma nuvem privada usando LLMware e o banco de dados vetorial Milvus. Este exemplo foi desenvolvido para inspirar e motivar você a aplicar esse conhecimento aos seus projetos. Também recomendamos assistir à sessão completa no YouTube.
Principais desafios na implantação de RAG
Grandes modelos de linguagem podem ser inconsistentes. Às vezes, oferecem respostas precisas, mas também podem produzir informações irrelevantes. Essa inconsistência surge porque os LLMs entendem relações estatísticas entre palavras sem realmente compreender seus significados. Além disso, os LLMs são pré-treinados em dados desatualizados e disponíveis publicamente, limitando sua capacidade de fornecer respostas precisas específicas aos seus dados privados ou às informações mais recentes.
A Geração Aumentada por Recuperação (RAG) é uma técnica popular para lidar com essa limitação, aprimorando as respostas do LLM com fontes externas de conhecimento armazenadas em um banco de dados vetorial como o Milvus, melhorando assim a qualidade do conteúdo. Embora a RAG seja uma técnica excepcional, sua implantação apresenta desafios.
Na palestra, Darren ****compartilhou os desafios comuns que muitas empresas enfrentam.
Preocupações com privacidade e segurança de dados: Muitas empresas, especialmente as dos setores financeiro e jurídico, hesitam em usar serviços de nuvem pública devido a preocupações com privacidade e segurança. Muitas soluções existentes também se concentram em nuvens públicas em vez de on-premise, o que representa desafios para empresas que precisam garantir a segurança dos dados e a conformidade.
Custos elevados: A infraestrutura de nuvem pública que usa frequentemente modelos em larga escala pode gerar contas altas. Pagar uma conta tão pesada sem ter controle e propriedade totais da infraestrutura, dos dados e das aplicações resulta em uma situação em que todos perdem.
Negligenciar estratégias de recuperação: Um aspecto crucial frequentemente negligenciado é a importância das estratégias de recuperação na implantação de RAG. Embora as equipes de IA tendam a se concentrar nas capacidades de IA generativa, a qualidade dos documentos recuperados é igualmente vital.
Implantação de RAG on-prem
Os desafios discutidos acima podem ser abordados de forma eficaz com uma solução comum: implantar RAG em uma nuvem privada. Essa abordagem aborda os problemas das seguintes maneiras:
- Melhor segurança de dados: Documentos comerciais sensíveis, informações regulatórias e outros dados proprietários devem permanecer dentro dos limites seguros de uma nuvem privada para atender aos padrões de conformidade e segurança. Se tudo estiver acontecendo de forma privada, não haverá violações.
- Menor custo: Implantar modelos de IA em infraestrutura de nuvem privada pode oferecer uma solução mais econômica do que serviços de nuvem pública, especialmente quando o uso frequente é necessário. O custo fica ainda menor quando usamos modelos menores, pois eles alcançam resultados práticos de forma mais eficiente do que modelos maiores e mais intensivos em recursos. Devido à sua rápida inovação e às capacidades de personalização, LLMs e tecnologias de código aberto são uma ótima opção para sua RAG.
- Aprimorando a geração com recuperação em uma nuvem privada: Um mecanismo de recuperação melhor pode complementar um modelo menor com habilidades generativas limitadas. Somente criando um sistema de recuperação melhor é que a precisão e a eficiência de aplicações de IA, como análise de documentos, segmentação de texto e consultas semânticas, podem ser significativamente aprimoradas.
Em resumo, Darren defende a adoção de soluções de nuvem privada para IA, particularmente LLMs, para lidar com preocupações relacionadas à privacidade dos dados, custo e resultados. A seguir, discutiremos os modelos Dragon projetados e otimizados para RAG na biblioteca Huggingface Transformers.
Modelos dRAGon (Delivering RAG On)🐉
Dragon é uma série de modelos lançada pela AI Blocks, projetada especificamente para Retrieval Augmented Generation (RAG). É uma série de sete modelos open-source ajustados em datasets proprietários, como contratos, documentos regulatórios e informações financeiras complexas. Há três categorias de modelos:
Classes de modelos e suas descrições
Classes de modelos e suas descrições
- Modelos Bling: Modelos compactos, ajustados por instruções, otimizados para prototipagem rápida e capazes de rodar em CPUs, tornando-os ideais para fases iniciais de teste e desenvolvimento. Eles exigem menos da memória, pois incluem apenas de 1 a 3 bilhões de parâmetros.
- Modelos Dragon RAG: Versões ajustadas de modelos de base líderes com 6 e 7 bilhões de parâmetros, como Llama, Mistral, Red-pajama, Falcon e Deci. Adaptados para tarefas como resposta a perguntas baseada em fatos e análise de documentos regulatórios.
- Modelos ****BERT**** Industry: Especializados para aplicações específicas de setores, os modelos Industry BERT são sentence transformers ajustados, adaptados para tarefas como análise de contratos.
Além disso, esses modelos foram rigorosamente avaliados usando benchmarks de estrutura RAG de senso comum. Diferentemente dos modelos open-source que dependem de métricas científicas como MMLU e ARC, os modelos Dragon são testados quanto à precisão no mundo real e a casos de uso práticos. Esta coleção de modelos está disponível no HuggingFace, como mostrado abaixo:
Modelos LLMware hospedados no HuggingFace
Modelos LLMware hospedados no HuggingFace
Os principais benefícios de usar esses modelos são os seguintes:
Precisão aprimorada: Ajustados em datasets extensos, esses modelos oferecem alta precisão na análise de documentos, segmentação de texto e consultas semânticas.
Custo-benefício: Otimizados para uso em infraestrutura de nuvem privada, esses modelos oferecem uma solução econômica em comparação com modelos maiores e intensivos em recursos em nuvens públicas.
Open source e personalizáveis: Disponíveis no Hugging Face, esses modelos open-source permitem inovação rápida e personalização para atender a necessidades empresariais específicas.
Desempenho de nível de produção: Avaliados quanto à confiabilidade, esses modelos fornecem desempenho consistente e confiável em vários fluxos de trabalho.
Integração perfeita: Com suporte abrangente e scripts de geração fáceis de usar, integrar esses modelos a fluxos de trabalho existentes é simples.
Esses modelos não comprometem custo, precisão ou personalização; sua integração no LLMware facilita o acesso a eles.
Um vislumbre do LLMware
LLMware é uma biblioteca projetada para aplicações baseadas em LLM em nível empresarial. Ela utiliza modelos pequenos e especializados que podem ser implantados de forma privada, integrados com segurança a fontes de conhecimento empresariais e adaptados de maneira econômica para qualquer processo de negócios. Este toolkit é comparável ao LangChain ****ou LlamaIndex, mas é adaptado para alta escalabilidade e gerenciamento robusto de documentos em ambientes empresariais.
Componentes do LLMware:
Pipeline RAG: Fornece componentes integrados para todo o ciclo de vida da conexão de fontes de conhecimento a modelos de IA generativa.
Modelos Especializados: Inclui mais de 50 modelos pequenos e ajustados para tarefas empresariais como perguntas e respostas baseadas em fatos, classificação, sumarização e extração. Esses modelos também incluem aqueles discutidos acima; usaremos um em nossa implementação na seção a seguir.
Recursos do LLMware:
Ingestão Massiva de Documentos:
Escalabilidade: Criado para lidar com a ingestão de centenas de milhares de documentos, o LLMware oferece suporte a processamento paralelo e distribuição entre múltiplos workers.
Análise de Documentos: Implementa especificações completas para analisar PDFs, documentos Word, PowerPoints e arquivos Excel usando parsers personalizados baseados em C.
Modelo de Dados de Ponta a Ponta:
Armazenamentos de Dados Persistentes: Integra-se ao MongoDB para armazenamento persistente de dados, permitindo o particionamento e a indexação eficientes de coleções de texto.
Integração Empresarial: Projetado para integrar-se perfeitamente aos fluxos de trabalho de dados empresariais, garantindo gerenciamento de dados seguro e escalável.
Framework para Aplicações Baseadas em LLM:
Compatibilidade com Open Source: Este recurso prioriza o suporte a uma ampla variedade de modelos open-source e Hugging Face, facilitando a criação e implantação de aplicações LLM.
Ambiente Rico em Recursos: Desenvolvido continuamente para incluir novos recursos e capacidades que dão suporte a diversos casos de uso em ambientes empresariais.
Facilidade de Uso:
Exemplos e Documentação: Fornece exemplos e documentação abrangentes para ajudar os usuários a começar de forma rápida e eficiente.
Foco Empresarial: Criado especificamente para atender às necessidades exclusivas de implantações de LLM em nível empresarial, desde o gerenciamento de documentos até o processamento escalável.
Geração Aumentada por Recuperação em uma Nuvem Privada Usando Milvus e LLMware
Esta seção explicará e implementará uma solução RAG on-premise. Vamos analisar a arquitetura para RAG usando o LLMware e o banco de dados vetorial Milvus.
A Arquitetura
Este diagrama de arquitetura ilustra o fluxo de trabalho de RAG on premises usando LLMware e Milvus.
Diagrama de arquitetura para RAG on premises usando LLMware e Milvus
Diagrama de arquitetura para RAG on premises usando LLMware e Milvus
Aqui está uma explicação de cada componente:
Documentos: Os dados de entrada consistem em vários documentos a serem processados. Neste exemplo, os ~80 documentos de exemplo são obtidos do bucket S3.
Pipeline de Ingestão: Esta é a etapa inicial na qual os documentos são ingeridos no sistema. Este pipeline prepara os documentos para processamento adicional, extraindo informações relevantes e possivelmente realizando tarefas de pré-processamento, como limpeza ou formatação dos dados.
Gerar Embeddings: Após a ingestão, os documentos são passados para um modelo de embedding. Neste caso, um modelo Industry BERT converte os documentos em representações numéricas (embeddings vetoriais) que capturam o significado semântico do texto.
Banco de Dados Vetorial: Os embeddings gerados pelo modelo Industry BERT são armazenados em um banco de dados vetorial, Milvus, juntamente com os documentos. Esse banco de dados vetorial especializado é projetado para lidar com dados vetoriais em larga escala e pesquisá-los de forma eficiente.
Consulta: Um usuário envia uma consulta ao sistema.
Embeddings da Consulta: Essa consulta também é convertida em um embedding para compará-la com os embeddings dos documentos armazenados no Milvus.
Pesquisar Documentos: A similaridade entre os embeddings da consulta e dos documentos é calculada, com os documentos classificados em posições mais altas com base em maior similaridade.
Documentos Recuperados: Documentos relevantes com alta similaridade são recuperados. O número de documentos recuperados e o limite de similaridade podem ser personalizados.
LLM: Os documentos recuperados e a consulta serão enviados ao LLM; no nosso caso, o LLM é Bling 7B.
Resultado: A resposta do LLM é fornecida ao usuário.
A próxima seção mostrará a implementação da aplicação RAG na nuvem privada.
Implementação
Nesta implementação, criaremos a aplicação RAG ingerindo ~80 documentos jurídicos no banco de dados vetorial Milvus e fazendo perguntas usando um LLM. Assumimos que o usuário já instalou o Milvus para este blog e pode iniciar o serviço.
Imports
Primeiro instalaremos as bibliotecas necessárias e as importaremos para o nosso ambiente. Precisaremos de llmware e PyMilvus. Veja como instalá-las:
pip install llmware
Pip install pymilvus>=2.4.2
Após esta etapa, vamos importar os módulos necessários 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
Depois de importar os dados, configuraremos a configuração.
Configuração
A etapa de configuração é bem simples. Nesta etapa, armazenamos os nomes do modelo de embedding, do banco de dados vetorial e do LLM.
embedding_model = "industry-bert-contracts"
vector_db = "milvus"
llm = "llmware/bling-1b-0.1"
A configuração inclui o modelo de embedding industry-bert-contracts, Milvus para o banco de dados vetorial e o modelo de linguagem llmware/bling-1b-0.1 para processamento e análise de documentos otimizados e impulsionados por IA.
Configurando o Milvus
Devido à sua integração, é muito simples configurar o Milvus usando llmware. Após a instalação do PyMilvus, precisamos definir o vector_db como Milvus enquanto active_db como sqlite, conforme mostrado abaixo:
LLMWareConfig().set_active_db("sqlite")
MilvusConfig().set_config("lite", True) # No dependency
LLMWareConfig().set_vector_db("milvus")
llmware oferece suporte ao Milvus-lite, que é autocontido e não requer outras dependências.
Criando uma Biblioteca
No llmware, uma biblioteca é o principal construto organizacional para informações não estruturadas. Os usuários podem criar uma grande biblioteca com conteúdo diverso ou várias bibliotecas, cada uma dedicada a um assunto, projeto, caso, negócio, conta, usuário ou departamento específico.
Para criar uma biblioteca, podemos simplesmente chamar a função create_new_library da classe Library, que requer um nome arbitrário como argumento. Vamos dar uma olhada.
Library_name = "contracts-Rag"
library = Library().create_new_library(library_name)
Ingerindo documentos
A classe Setup no LLMware baixa arquivos de amostra de um bucket AWS S3, incluindo vários documentos de amostra, como contratos, faturas, relatórios financeiros etc. Você sempre pode obter a versão mais recente dessas amostras usando load_sample_files. Neste exemplo, faremos upload dos “Agreements”.
sample_files_path = Setup().load_sample_files(over_write=False)
contracts_path = os.path.join(sample_files_path, "Agreements")
Llmware tem uma função útil chamada add_files, uma ferramenta universal de ingestão. Aponte-a para uma pasta local contendo tipos de arquivos mistos, e ela encaminhará automaticamente os arquivos pela extensão para o analisador apropriado. Os arquivos são então analisados, o texto é dividido em partes e indexado no banco de dados de coleção de texto.
library.add_files(input_folder_path=contracts_path)
Os documentos são carregados. Vamos criar seus embeddings.
Criar Embeddings
Tudo nesta implementação está sendo executado de forma privada. Portanto, o modelo de embedding é baixado localmente. Como mencionado, o modelo de embedding é industry-bert-contracts, enquanto Milvus é o banco de dados vetorial.
library.install_new_embedding(embedding_model_name=embedding_model, vector_db=vector_db)
Depois de instalar os embeddings na biblioteca, você pode verificar o status dos embeddings para verificar os embeddings atualizados e confirmar que o modelo foi capturado com precisão.
Status().get_embedding_status(library_name, embedding_model)
Vamos ver como invocar uma chamada de LLM nas próximas seções.
Carregar o Large Language Model
Usaremos a função load_model para carregar o modelo Bling. Eles são pequenos e bons para testes rápidos.
prompter = Prompt().load_model(llm)
Pesquisar Documentos
No Llmware, a classe Query é usada para pesquisa e recuperação, exigindo uma Library como parâmetro obrigatório. Essa abordagem permite que as recuperações aproveitem a abstração da Library, oferecendo suporte a várias bases de conhecimento distintas alinhadas com diferentes casos de uso, usuários, contas e permissões.
Essa classe permite muitas funções de pesquisa, como pesquisa de texto e pesquisa semântica. Usaremos pesquisa semântica para o nosso exemplo.
query = "what is the executive's base annual salary"
results = Query(library).semantic_query(query, result_count=50, embedding_distance_threshold=1.0)
Juntando Todas as Partes
Esta seção percorrerá todos os contratos, filtrará os resultados relevantes e gerará as respostas usando LLM. Aqui está o trecho 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()
Aqui está o guia para isso.
Iterar Sobre Contratos: Para cada arquivo de contrato no diretório, ele inicializa uma lista para armazenar resultados de consulta relevantes.
Filtrar Resultados Relevantes: Ele filtra os resultados que correspondem ao contrato atual e imprime as principais recuperações.
Gerar Respostas: Os resultados filtrados geram uma resposta com um modelo de linguagem e imprimem as respostas geradas.
Redefinir para o Próximo Contrato: Ele limpa os materiais de origem para preparar para o próximo contrato.
O resultado para a consulta é fornecido da seguinte forma:
>>> 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.
Observe que apenas a primeira recuperação é exibida aqui.
Acima, criamos com sucesso uma aplicação RAG para documentos jurídicos usando Milvus e LLMware. A melhor parte é que nenhum dado é enviado para fornecedores externos; tudo, incluindo o banco de dados vetorial, o modelo de embeddings e o LLM, fica on-premises
Conclusão
Com a crescente adoção da IA, interagir com dados tornou-se mais fácil do que nunca. No entanto, muitas empresas ainda hesitam em enviar seus dados para a nuvem, e com razão. A LLMware fornece uma solução para criar sistemas de IA on-premises em vez de na nuvem pública. Essa solução garante a privacidade dos dados, reduz custos e oferece mais controle.
Usando a LLMware e o banco de dados vetorial Milvus, podemos combinar o poder da busca por similaridade vetorial e dos LLMs para fazer perguntas sobre nossos documentos privados. O Milvus é um banco de dados vetorial open-source robusto que armazena, processa e pesquisa dados vetoriais em escala de bilhões. Depois que o Milvus recupera os top-K resultados mais relevantes para o LLM, os LLMs terão o contexto para responder às suas consultas.
Continue lendo

Introducing Zilliz CLI and Agent Skills for Zilliz Cloud
Manage your vector database from your terminal or AI coding agent. Zilliz CLI and Agent Skills work with Claude Code, Cursor, Codex, and Copilot.

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.

Proactive Monitoring for Vector Database: Zilliz Cloud Integrates with Datadog
we're excited to announce Zilliz Cloud's integration with Datadog, enabling comprehensive monitoring and observability for your vectorDB deployments.



