Разворачиваем Langfuse в Kubernetes: open-source альтернатива Langsmith
Привет, Хабр! Меня зовут Арсений @kazars24, я студент 2 курса магистратуры [AI] Talent Hub и ML инженер в компании Вита. Последнее время я активно занимаюсь разработкой LLM-приложений, и в процессе работы столкнулся с необходимостью их мониторинга. После долгих поисков и экспериментов я нашел отличное решение — Langfuse, о котором сегодня и поговорим.
Почему Langfuse, а не Langsmith?
Прежде чем погрузиться в технические детали, давайте разберемся, почему стоит обратить внимание на Langfuse:
Open Source — Langfuse является проектом с открытым исходным кодом, что предоставляет пользователям возможность изучать, изменять и улучшать его по своему усмотрению. В отличие от него, Langsmith — это закрытый проект, что ограничивает доступ к его внутреннему устройству и возможностям кастомизации.
Интеграция с LangChain — Langsmith разработан командой LangChain и интегрируется только с их фреймворком. Langfuse также поддерживает интеграции с Langchain, но не ограничивается только этим фреймворком, что делает его более универсальным инструментом для разработчиков.
Бесплатный self-hosting — Langfuse можно развернуть бесплатно, тогда как Langsmith требует платной Enterprise-лицензии.
Что такое Langfuse?
Langfuse — это open-source платформа для разработки LLM-приложений, которая помогает командам совместно отлаживать, анализировать и итеративно улучшать свои решения на базе языковых моделей. Все функции платформы нативно интегрированы между собой, что существенно ускоряет процесс разработки. Исходный код доступен на GitHub.
Архитектура
Одно из главных преимуществ Langfuse — это его гибкая архитектура, построенная исключительно на open-source компонентах. Систему можно развернуть где угодно: локально на вашем ноутбуке, в облаке или в корпоративном дата-центре.
Архитектура Langfuse включает в себя два основных контейнера приложений, компоненты хранения данных и опциональный API/шлюз для работы с языковыми моделями (LLM).
Контейнеры приложений
Langfuse Web: Это основное веб-приложение, которое предоставляет интерфейс пользователя (UI) и API для взаимодействия с Langfuse.
Langfuse Worker: Этот контейнер выполняет асинхронную обработку событий.
Рекомендации по размеру и масштабированию
Для обеспечения стабильной работы рекомендуется выделить как минимум 2 CPU и 4 ГБ оперативной памяти для всех контейнеров Langfuse. Это минимальные требования, которые обеспечат достаточную производительность и надежность системы.
Для достижения высокой доступности следует развернуть как минимум два инстанса контейнера Langfuse Web. Это позволит распределить нагрузку и обеспечить бесперебойную работу приложения.
Для автоматического масштабирования рекомендуется добавлять новые инстансы контейнеров, когда загрузка CPU превышает 50% на любом из контейнеров. Это позволит динамически адаптироваться к изменяющимся нагрузкам и поддерживать оптимальную производительность системы.
Компоненты хранения данных
Для хранения данных используется набор специализированных компонентов:
PostgreSQL — основная база данных для транзакционных операций;
Clickhouse — высокопроизводительная OLAP БД, где хранятся трейсы, наблюдения и оценки;
Redis — быстрое in-memory хранилище для очередей и кэширования;
S3/Blob Storage — объектное хранилище для входящих событий, мультимодальных данных и больших экспортов.
Опциональный LLM API/шлюз
Langfuse предоставляет возможность интеграции с внешними API или шлюзами для работы с языковыми моделями, что позволяет расширить функциональность системы.
Langfuse поддерживает интеграцию с рядом популярных LLM API, включая:
OpenAI;
Azure OpenAI;
Anthropic;
Google Vertex;
Amazon Bedrock.
Поднимаем в Kubernetes
Теперь перейдем к практической части.
Для начала убедитесь, что у вас есть доступ к Kubernetes-кластеру и установлен Helm на локальной машине. В этом руководстве мы будем использовать локальный minikube, но шаги также применимы для управляемых сервисов Kubernetes.
Шаг 1: Добавляем Helm-чарт
Сначала нужно добавить репозиторий Helm-чартов Langfuse и обновить его:
helm repo add langfuse https://langfuse.github.io/langfuse-k8s
helm repo update
Для локального тестирования предустановленные переменные в файле values.yaml обычно достаточны. Однако, если вы планируете отправлять чувствительные данные или использовать приложение в течение длительного времени, рекомендуется настроить values.yaml в соответствии с вашими потребностями.
Шаг 2: Устанавливаем Helm-чарт
Создайте новое пространство имен для развертывания Langfuse (опционально):
kubectl create namespace langfuse
Установите Helm-чарт в ваше пространство имен:
helm install langfuse langfuse/langfuse -n langfuse
По умолчанию чарт развернет все необходимые компоненты, включая базы данных. При желании можно использовать существующие инстансы PostgreSQL, Clickhouse и Redis, настроив соответствующие параметры в values.yaml.
Шаг 3: Проверяем развертывание
Kubernetes начнет развертывание приложения Langfuse и его зависимостей. Этот процесс может занять до 5 минут. Вы можете следить за прогрессом, проверяя статус подов:
kubectl get pods -n langfuse
Шаг 4: Получаем доступ к UI
После успешного развертывания Langfuse, его пользовательский интерфейс будет доступен через ClusterIP сервис по умолчанию. Чтобы получить доступ к интерфейсу, выполните следующие действия:
Используйте команду kubectl get services -n langfuse, чтобы получить список сервисов в пространстве имен langfuse. Найдите сервис langfuse-web, чтобы увидеть, на каком порту он работает.
Выполните команду для создания порт-форварда, заменив
и на соответствующие значения:
kubectl port-forward svc/langfuse-web -n langfuse:
Это позволит вам перенаправить трафик с локального порта на порт, на котором работает сервис langfuse-web.Откройте браузер и перейдите по адресу http://localhost:
, чтобы получить доступ к пользовательскому интерфейсу Langfuse.
Шаг 5: Радуемся результату
Наслаждайтесь результатом вашей работы! Теперь у вас есть мощный инструмент для мониторинга и анализа приложений на основе языковых моделей, который развернут в вашей инфраструктуре.
Заключение
Langfuse — это мощный инструмент для наблюдения и аналитики LLM-приложений, который предлагает открытый исходный код и возможность бесплатного самохостинга. Развертывание Langfuse в Kubernetes с использованием Helm — это простой и эффективный способ интеграции этого инструмента в вашу инфраструктуру. Надеюсь, что это руководство поможет вам начать работу с Langfuse и извлечь максимальную пользу из его возможностей.
Материал подготовил магистрант 2 курса [AI] Talent Hub, Арсений Казанцев.