Обеспечение целостности данных: локальное развертывание RAG с LLMware и Milvus
Во время нашей последней сессии из Unstructured Data Meetup нам выпала честь принять Даррена Оберста, генерального директора AI Blocks. Он окончил UC Berkeley со степенями по физике и философии и в настоящее время сосредоточен на трансформации разработки приложений на основе больших языковых моделей (LLM) для финансовых и юридических услуг. На этой встрече Даррен обсудил, почему Retrieval Augmented Generation (RAG) следует развертывать локально для крупных компаний в сфере финансовых и юридических услуг.
В этом блоге мы не только кратко изложим ключевые тезисы Даррена, но и приведем практический пример построения RAG в частном облаке с использованием LLMware и векторной базы данных Milvus. Этот пример призван вдохновить и мотивировать вас применить эти знания в ваших проектах. Мы также рекомендуем посмотреть полную сессию на YouTube.
Ключевые проблемы развертывания RAG
Большие языковые модели могут быть непоследовательными. Иногда они дают точные ответы, но также могут выдавать нерелевантную информацию. Эта непоследовательность возникает потому, что LLM понимают статистические связи между словами, не осознавая по-настоящему их значения. Кроме того, LLM предварительно обучаются на устаревших и общедоступных данных, что ограничивает их способность давать точные ответы, относящиеся к вашим частным данным или самой актуальной информации.
Retrieval Augmented Generation (RAG) — популярный метод решения этого ограничения за счет улучшения ответов LLM с помощью внешних источников знаний, хранящихся в векторной базе данных, такой как Milvus, что повышает качество контента. Хотя RAG является исключительным методом, его развертывание сопряжено с трудностями.
В докладе Даррен ****поделился распространенными проблемами, с которыми сталкиваются многие предприятия.
Проблемы конфиденциальности и безопасности данных: Многие предприятия, особенно в финансовом и юридическом секторах, не решаются использовать публичные облачные сервисы из-за опасений по поводу конфиденциальности и безопасности. Многие существующие решения также ориентированы на публичные облака, а не на локальное развертывание, что создает сложности для компаний, которым необходимо обеспечивать безопасность данных и соответствие требованиям.
Повышенные затраты: Инфраструктура публичного облака при частом использовании крупномасштабных моделей может приводить к росту счетов. Оплата такого внушительного счета при отсутствии полного контроля и владения инфраструктурой, данными и приложениями приводит к ситуации, в которой проигрывают все.
Игнорирование стратегий поиска: Один важный аспект, который часто упускается из виду, — это важность стратегий поиска при развертывании RAG. Хотя команды AI склонны сосредотачиваться на возможностях генеративного AI, качество найденных документов не менее важно.
Локальное развертывание RAG
Обсуждавшиеся выше проблемы можно эффективно решить с помощью общего подхода: развертывания RAG в частном облаке. Этот подход решает проблемы следующим образом:
- Повышенная безопасность данных: Конфиденциальные бизнес-документы, нормативная информация и другие проприетарные данные должны оставаться в защищенных пределах частного облака, чтобы соответствовать стандартам комплаенса и безопасности. Если всё происходит приватно, утечек не будет.
- Более низкая стоимость: Развертывание моделей AI в инфраструктуре частного облака может предложить более экономически эффективное решение, чем публичные облачные сервисы, особенно когда требуется частое использование. Стоимость становится еще ниже, когда мы используем модели меньшего размера, поскольку они достигают практических результатов эффективнее, чем более крупные и ресурсоемкие модели. Благодаря быстрым инновациям и возможностям кастомизации LLM и технологии с открытым исходным кодом являются отличным вариантом для вашего RAG.
- Улучшение генерации с помощью поиска в частном облаке: Более эффективный движок поиска может дополнять меньшую модель с ограниченными генеративными возможностями. Только создав более совершенную систему поиска, можно значительно повысить точность и эффективность AI-приложений, таких как парсинг документов, разбиение текста на фрагменты и семантические запросы.
В итоге Darren выступает за внедрение решений частного облака для AI, особенно LLM, чтобы решать проблемы, связанные с конфиденциальностью данных, стоимостью и результатами. Далее мы обсудим модели Dragon, разработанные и оптимизированные для RAG в библиотеке Huggingface Transformers.
Модели dRAGon (Delivering RAG On)🐉
Dragon — это серия моделей, выпущенная AI Blocks и специально разработанная для Retrieval Augmented Generation (RAG). Это серия из семи open-source моделей, дообученных на проприетарных наборах данных, таких как контракты, нормативные документы и сложная финансовая информация. Существует три категории моделей:
Классы моделей и их описание
Классы моделей и их описание
- Модели Bling: Компактные instruct-tuned модели, оптимизированные для быстрого прототипирования и способные работать на CPU, что делает их идеальными для начальных этапов тестирования и разработки. Они создают меньшую нагрузку на память, поскольку содержат всего от 1 до 3 миллиардов параметров.
- Модели Dragon RAG: Дообученные версии ведущих базовых моделей с 6 и 7 миллиардами параметров, таких как Llama, Mistral, Red-pajama, Falcon и Deci. Адаптированы для таких задач, как ответы на вопросы на основе фактов и анализ нормативных документов.
- Отраслевые ****BERT**** модели: Специализированные для отраслевых приложений, отраслевые модели BERT представляют собой дообученные sentence transformers, адаптированные для таких задач, как анализ контрактов.
Кроме того, эти модели были тщательно протестированы с использованием common sense RAG structure benchmarks. В отличие от open-source моделей, которые опираются на научные метрики, такие как MMLU и ARC, модели Dragon тестируются на точность в реальных условиях и практических сценариях использования. Эта коллекция моделей доступна на HuggingFace, как показано ниже:
Модели LLMware, размещенные на HuggingFace
Модели LLMware, размещенные на HuggingFace
Ключевые преимущества использования этих моделей следующие:
Повышенная точность: Дообученные на обширных наборах данных, эти модели обеспечивают высокую точность при парсинге документов, разбиении текста на фрагменты и семантических запросах.
Экономическая эффективность: Оптимизированные для использования в инфраструктуре частного облака, эти модели предлагают экономичное решение по сравнению с более крупными, ресурсоемкими моделями в публичных облаках.
Open Source и настраиваемость: Доступные на Hugging Face, эти open-source модели позволяют быстро внедрять инновации и выполнять настройку под конкретные потребности предприятия.
Производительность уровня production: Протестированные на надежность, эти модели обеспечивают стабильную и надежную производительность в различных рабочих процессах.
Бесшовная интеграция: Благодаря комплексной поддержке и простым в использовании скриптам генерации интеграция этих моделей в существующие рабочие процессы выполняется без сложностей.
Такие модели не требуют компромисса между стоимостью, точностью или настраиваемостью; их интеграция в LLMware делает их легкодоступными.
Краткий обзор LLMware
LLMware — это библиотека, разработанная для корпоративных приложений на основе LLM. Она использует небольшие специализированные модели, которые можно развертывать в частной среде, безопасно интегрировать с корпоративными источниками знаний и экономически эффективно адаптировать для любого бизнес-процесса. Этот инструментарий сопоставим с LangChain ****или LlamaIndex, но адаптирован для высокой масштабируемости и надежного управления документами в корпоративных средах.
Компоненты LLMware:
RAG Pipeline: Предоставляет интегрированные компоненты для всего жизненного цикла подключения источников знаний к моделям генеративного ИИ.
Специализированные модели: Включает более 50 небольших дообученных моделей для корпоративных задач, таких как фактологические ответы на вопросы, классификация, суммаризация и извлечение. Эти модели также включают те, что обсуждались выше; одну из них мы используем в нашей реализации в следующем разделе.
Возможности LLMware:
Массовая загрузка документов:
Масштабируемость: Создана для обработки загрузки сотен тысяч документов; LLMware поддерживает параллельную обработку и распределение между несколькими рабочими процессами.
Парсинг документов: Реализует полные спецификации для парсинга PDF, документов Word, PowerPoint и файлов Excel с использованием пользовательских парсеров на основе C.
Сквозная модель данных:
Постоянные хранилища данных: Интегрируется с MongoDB для постоянного хранения данных, обеспечивая эффективное разбиение на фрагменты и индексирование текстовых коллекций.
Корпоративная интеграция: Спроектирована для бесшовной интеграции в корпоративные рабочие процессы с данными, обеспечивая безопасное и масштабируемое управление данными.
Фреймворк для приложений на основе LLM:
Совместимость с Open Source: Эта возможность делает приоритетной поддержку широкого спектра open-source-моделей и моделей Hugging Face, что упрощает создание и развертывание LLM-приложений.
Среда с богатым набором возможностей: Постоянно развивается, включая новые функции и возможности, которые поддерживают разнообразные варианты использования в корпоративных условиях.
Простота использования:
Примеры и документация: Предоставляет подробные примеры и документацию, чтобы помочь пользователям быстро и эффективно приступить к работе.
Корпоративная направленность: Специально создана для удовлетворения уникальных потребностей корпоративных развертываний LLM — от управления документами до масштабируемой обработки.
Retrieval Augmented Generation в частном облаке с использованием Milvus и LLMware
В этом разделе будет объяснено и реализовано локальное RAG-решение. Рассмотрим архитектуру RAG с использованием LLMware и векторной базы данных Milvus.
Архитектура
Эта архитектурная диаграмма иллюстрирует рабочий процесс RAG в локальной среде с использованием LLMware и Milvus.
Архитектурная диаграмма для RAG в локальной среде с использованием LLMware и Milvus
Архитектурная диаграмма для RAG в локальной среде с использованием LLMware и Milvus
Вот объяснение каждого компонента:
Документы: Входные данные состоят из различных документов, подлежащих обработке. В этом примере ~80 образцов документов извлекаются из S3 bucket.
Конвейер загрузки: Это начальный этап, на котором документы загружаются в систему. Этот конвейер подготавливает документы к дальнейшей обработке, извлекая релевантную информацию и, возможно, выполняя задачи предварительной обработки, такие как очистка или форматирование данных.
Генерация embeddings: После загрузки документы передаются в embedding model. В данном случае модель Industry BERT преобразует документы в числовые представления (векторные embeddings), которые отражают семантическое значение текста.
Векторная база данных: Эмбеддинги, сгенерированные моделью Industry BERT, хранятся в векторной базе данных, Milvus, вместе с документами. Эта специализированная векторная база данных предназначена для обработки и эффективного поиска по крупномасштабным векторным данным.
Запрос: Пользователь отправляет запрос в систему.
Эмбеддинги запроса: Этот запрос также преобразуется в эмбеддинг, чтобы сравнить его с эмбеддингами документов, хранящимися в Milvus.
Поиск документов: Рассчитывается сходство между эмбеддингами запроса и документов, при этом документы ранжируются выше на основе большей схожести.
Извлеченные документы: Извлекаются релевантные документы с высокой схожестью. Количество извлекаемых документов и порог схожести можно настроить.
LLM: Извлеченные документы и запрос будут отправлены в LLM; в нашем случае LLM — это Bling 7B.
Результат: Ответ от LLM предоставляется пользователю.
В следующем разделе будет показана реализация приложения RAG в частном облаке.
Реализация
В этой реализации мы создадим приложение RAG, загрузив ~80 юридических документов в векторную базу данных Milvus, и будем задавать вопросы с помощью LLM. Мы предполагаем, что для этого блога пользователь уже установил Milvus и может запустить сервис.
Импорты
Сначала мы установим необходимые библиотеки и импортируем их в нашу среду. Нам потребуются llmware и PyMilvus. Вот как это установить:
pip install llmware
Pip install pymilvus>=2.4.2
После этого шага давайте импортируем необходимые модули из 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
После импорта данных мы настроим конфигурацию.
Конфигурация
Шаг конфигурации довольно прост. На этом шаге мы сохраняем названия модели эмбеддингов, векторной базы данных и LLM.
embedding_model = "industry-bert-contracts"
vector_db = "milvus"
llm = "llmware/bling-1b-0.1"
Настройка включает модель эмбеддингов industry-bert-contracts, Milvus для векторной базы данных и языковую модель llmware/bling-1b-0.1 для оптимизированной обработки и анализа документов на основе ИИ.
Настройка Milvus
Благодаря интеграции настроить Milvus с помощью llmware очень просто. После установки PyMilvus нам нужно установить vector_db как Milvus, а active_db как sqlite, как показано ниже:
LLMWareConfig().set_active_db("sqlite")
MilvusConfig().set_config("lite", True) # No dependency
LLMWareConfig().set_vector_db("milvus")
llmware поддерживает Milvus-lite, который является самодостаточным и не требует других зависимостей.
Создание библиотеки
В llmware библиотека является основной организационной структурой для неструктурированной информации. Пользователи могут создать одну большую библиотеку с разнообразным содержимым или несколько библиотек, каждая из которых посвящена определенной теме, проекту, делу, сделке, учетной записи, пользователю или отделу.
Чтобы создать библиотеку, мы можем просто вызвать функцию create_new_library из класса Library, которая требует произвольное имя в качестве аргумента. Давайте посмотрим.
Library_name = "contracts-Rag"
library = Library().create_new_library(library_name)
Загрузка документов
Класс Setup в LLMware загружает примеры файлов из бакета AWS S3, включая различные примерные документы, такие как контракты, счета, финансовые отчеты и т. д. Вы всегда можете получить последнюю версию этих примеров, используя load_sample_files. В этом примере мы загрузим “Agreements”.
sample_files_path = Setup().load_sample_files(over_write=False)
contracts_path = os.path.join(sample_files_path, "Agreements")
Llmware имеет полезную функцию под названием add_files — универсальный инструмент для загрузки данных. Укажите ей локальную папку, содержащую смешанные типы файлов, и она автоматически направит файлы по их расширению в соответствующий парсер. Затем файлы будут разобраны, текст разбит на фрагменты и проиндексирован в базе данных текстовой коллекции.
library.add_files(input_folder_path=contracts_path)
Документы загружены. Давайте создадим для них эмбеддинги.
Создание эмбеддингов
Всё в этой реализации выполняется приватно. Поэтому модель эмбеддингов загружается локально. Как упоминалось, модель эмбеддингов — это industry-bert-contracts, а Milvus — векторная база данных.
library.install_new_embedding(embedding_model_name=embedding_model, vector_db=vector_db)
После установки эмбеддингов в библиотеку можно проверить статус эмбеддингов, чтобы убедиться, что они обновлены, и подтвердить, что модель была корректно зафиксирована.
Status().get_embedding_status(library_name, embedding_model)
Давайте посмотрим, как вызвать LLM-запрос в следующих разделах.
Загрузка большой языковой модели
Мы будем использовать функцию load_model, чтобы загрузить модель Bling. Эти модели небольшие и хорошо подходят для быстрого тестирования.
prompter = Prompt().load_model(llm)
Поиск документов
В Llmware класс Query используется для поиска и извлечения данных, при этом Library является обязательным параметром. Такой подход позволяет извлечениям использовать абстракцию Library, поддерживая несколько отдельных баз знаний, согласованных с различными сценариями использования, пользователями, аккаунтами и разрешениями.
Этот класс поддерживает множество поисковых функций, таких как текстовый поиск и семантический поиск. В нашем примере мы будем использовать семантический поиск.
query = "what is the executive's base annual salary"
results = Query(library).semantic_query(query, result_count=50, embedding_distance_threshold=1.0)
Объединение всех частей вместе
В этом разделе будет выполнен цикл по всем контрактам, отфильтрованы релевантные результаты и сгенерированы ответы с использованием LLM. Вот фрагмент кода:
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()
Вот руководство к нему.
Итерация по контрактам: Для каждого файла контракта в каталоге инициализируется список для хранения релевантных результатов запроса.
Фильтрация релевантных результатов: Выполняется фильтрация результатов, соответствующих текущему контракту, и выводятся лучшие результаты извлечения.
Генерация ответов: Отфильтрованные результаты используются для генерации ответа с помощью языковой модели, после чего сгенерированные ответы выводятся на экран.
Сброс для следующего контракта: Исходные материалы очищаются, чтобы подготовиться к следующему контракту.
Результат для запроса представлен ниже:
>>> 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.
Обратите внимание, что здесь отображается только первый результат извлечения.
Выше мы успешно создали RAG-приложение для юридических документов с использованием Milvus и LLMware. Самое важное, что данные не отправляются внешним поставщикам; всё, включая векторную базу данных, модель эмбеддингов и LLM, находится локально
Заключение
С ростом внедрения ИИ взаимодействовать с данными стало проще, чем когда-либо. Однако многие предприятия всё ещё не решаются отправлять свои данные в облако, и на то есть веские причины. LLMware предоставляет решение для создания систем ИИ локально, а не в публичном облаке. Это решение обеспечивает конфиденциальность данных, снижает затраты и предоставляет больше контроля.
Используя LLMware и векторную базу данных Milvus, мы можем объединить возможности поиска по векторному сходству и LLM, чтобы задавать вопросы по нашим приватным документам. Milvus — это надёжная векторная база данных с открытым исходным кодом, которая хранит, обрабатывает и выполняет поиск по векторным данным миллиардного масштаба. После того как Milvus извлечёт top-K наиболее релевантных результатов для LLM, LLM получат контекст для ответа на ваши запросы.
Читать далее

Zilliz Skills Breakdown: How AI Agents Master Vector Databases
Zilliz's Milvus Skill (pymilvus, 7 files) and Zilliz Cloud Skill (zilliz-cli, 14 modules) bring vector-DB dev and ops into one Claude Code session.

Why I’m Against Claude Code’s Grep-Only Retrieval? It Just Burns Too Many Tokens
Learn how vector-based code retrieval cuts Claude Code token consumption by 40%. Open-source solution with easy MCP integration. Try claude-context today.

DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding
Explore DeepSeek-VL2, the open-source MoE vision-language model. Discover its architecture, efficient training pipeline, and top-tier performance.



