Привет, Хабр! Я Мичил Егоров, руководитель команды разработки продуктов искусственного интеллекта в X5 Tech.
В последнее время языковые модели (LLM) стали неотъемлемой частью многих бизнес-процессов, начиная от чат-ботов и заканчивая автоматической обработкой отзывов клиентов. Однако, чтобы эффективно использовать такие модели, необходима мощная и гибкая инфраструктура.
За последний год команда X5 Tech значительно выросла, проверила множество гипотез и протестировала различные модели. Основные кейсы использования включают чат-боты, суфлёры для модераторов, автоматическое резюмирование и обработку отзывов клиентов.
В этой статье расскажу, как команда X5 Tech построила инфраструктуру для работы с языковыми моделями, какие вызовы преодолели и какие решения были приняты.
Требования к инфраструктуре
Прежде чем перейти к архитектуре, важно понять, какие требования предъявлялись к инфраструктуре:
Пропускная способность: пользователи не должны ждать ответа более нескольких секунд, даже при высокой нагрузке.
Безопасность: необходимо защитить коммерческую тайну и персональные данные клиентов.
Стабильное качество ответов: качество генерации текста должно оставаться высоким даже после обновления моделей.
Масштабируемость: инфраструктура должна легко масштабироваться для обработки растущего числа запросов.
Почему мы выбрали локальные модели?
Одним из ключевых решений было использовать локальные модели вместо сторонних сервисов, таких как OpenAI. Это связано с несколькими проблемами:
Безопасность данных: передача данных третьим лицам может привести к утечке коммерческой тайны или персональных данных.
Зависимость от внешних систем: обновления моделей у сторонних провайдеров могут привести к снижению качества ответов без предупреждения.
Линейная зависимость стоимости от числа запросов: чем больше запросов, тем выше затраты на использование сторонних сервисов.
Ограничения на использование: провайдеры могут заблокировать доступ по различным причинам, включая географические ограничения.
Архитектура
Наша архитектура для работы с языковыми моделями состоит из нескольких ключевых компонентов:
Маскировщик: сервис для маскирования и демаскирования данных перед отправкой к внешним моделям. Это позволяет защитить персональные данные и коммерческую тайну.
API Gateway: сервис, который обрабатывает входящие запросы, авторизует их и направляет либо к локальным моделям, либо к внешним через маскирование данных.
Система квот: управляет токенами и ограничивает количество запросов для каждого клиента, чтобы избежать перегрузки системы.
Инференс моделей: сервис для работы с локальными моделями, где происходит инференс (генерация ответов). Используются инструменты, такие как vLLM и TensorRT, для ускорения генерации.
Логирование: используется langfuse для логирования и анализа работы моделей, что позволяет отслеживать этапы обработки запросов и выявлять проблемы.
Компоненты системы
Маскировщик
Маскировщик заменяет чувствительные данные (например, имена, номера телефонов, адреса) на вымышленные перед отправкой к внешним моделям. После получения ответа данные демаскируются обратно. Это позволяет использовать сторонние модели без риска утечки информации.
Требования к маскированию:
Высокая точность распознавания чувствительных данных.
Согласованность: замена данных должна быть логичной (например, женские имена заменяются на женские, мужские — на мужские).
Консистентность: если в тексте заменяется имя, оно должно быть заменено везде.
Невозможность восстановления исходных данных из замаскированных.
API Gateway
API Gateway — это центральный узел, который обрабатывает все входящие запросы. Он обеспечивает авторизацию, балансировку нагрузки и маршрутизацию запросов к локальным или внешним моделям.
Система квот
Система квот управляет токенами и ограничивает количество запросов для каждого клиента. Это позволяет избежать перегрузки системы и обеспечивает равномерное распределение ресурсов между всеми клиентами.
Инференс моделей
Для инференса моделей мы используем инструменты, такие как vLLM и TensorRT, которые позволяют ускорить генерацию текста. Например, vLLM поддерживает динамический батчинг, что увеличивает пропускную способность системы.
Сравнение разных инференсов представлена ниже:
Логирование
Логирование осуществляется с помощью langfuse, который позволяет отслеживать этапы обработки запросов и выявлять проблемы. langfuse также поддерживает версионирование моделей и хранение датасетов для тестирования.
Выбор новой модели
Проблема
Одной из ключевых проблем, с которой столкнулась команда, было обновление моделей. Новая модель, которая показывала отличные результаты на публичных бенчмарках, на практике начала генерировать ответы, которые не соответствовали контексту. Это привело к ухудшению качества ответов и необходимости срочного отката к старой версии.
Бенчмарк
Для оценки качества моделей команда разработала внутренний бенчмарк, который включает запросы пользователей, контекст и эталонные ответы. Метрики, такие как BLEU и DPV, используются для сравнения качества генерации.
Сбор данных
Для автоматизации процесса сбора данных и тестирования моделей команда построила Feature Store. Все запросы пользователей собираются во время пилотов и промышленной эксплуатации, после чего отправляются на разметку. Размеченные данные используются для тестирования новых моделей и обновления бенчмарков.
Итоги
Построение инфраструктуры для работы с языковыми моделями — это сложный, но необходимый процесс для компаний, которые хотят использовать LLM в своих продуктах. Опыт X5 Tech показывает, что ключевыми аспектами являются безопасность данных, масштабируемость и постоянное тестирование моделей на реальных задачах. Использование локальных моделей и сервисов маскирования данных позволяет минимизировать риски и обеспечивать стабильное качество ответов.
Если вы хотите узнать больше по теме, посмотрите моё выступление: Построение инфраструктуры LLM с нуля на основе опыта X5 Tech.