Как добавить резервный вариант LLM в ваше приложение LangChain

Как добавить резервный вариант LLM в ваше приложение LangChain


Введение

При создании приложений с использованием LLM доступность модели может быть непредсказуемой. Ограничения по количеству запросов, временные сбои или проблемы с доступностью в регионах могут сломать ваше приложение в самый неподходящий момент. В этом посте показано, как создать устойчивость в вашем приложении LangChain с помощью автоматического перехода на резервную модель через серверный сервис DigitalOcean. Вы научитесь:

Ключевые выводы

  • Реализуйте автоматическое переключение LLM без повторных попыток для быстрой смены — Узнайте, как создавать устойчивые AI-приложения, которые автоматически переключаются между моделями в случае сбоев, обеспечивая пользователям отсутствие простоев.
  • Используйте безсерверный API вывода DigitalOcean — Получите доступ к нескольким ИИ моделям через единый унифицированный API без управления инфраструктурой или сложной интеграции с поставщиками.
  • Создание готовой к производству обработки ошибок для приложений LLM — Реализуйте надежные шаблоны обработки ошибок, которые плавно справляются с процессами сбоя модели, ограничениями по количеству запросов и проблемами доступности в условиях производства
  • Освойте интеграцию платформы LangChain-Gradient — Используйте официальную интеграцию LangChain для бесшовного подключения ваших приложений к AI-платформе DigitalOcean.
  • Оптимизация стоимости и производительности — Узнайте, как стратегически заказывать модели, основываясь на требованиях к производительности вашего приложения и бюджетных ограничениях.

Предварительные условия

  • LangChain — Фреймворк для разработки приложений на основе языковых моделей. Если вы новичок в LangChain, ознакомьтесь с нашим руководством по началу работы с LangChain для основ.
  • Платформа DigitalOcean Gradient — ИИ-платформа DigitalOcean, которая предоставляет доступ к нескольким ИИ-моделям через безсерверное выведение. Узнайте больше в нашем обзоре Платформы Gradient и руководстве по безсерверному выведению.
  • Python — Версия 3.8 или выше. Если вам нужно установить Python, следуйте нашему руководству по установке Python
  • uv — Быстрый установщик пакетов Python и разрешатель зависимостей. Мы будем использовать это для управления зависимостями в этом руководстве.
  • Аккаунт DigitalOcean — Вам понадобится аккаунт DigitalOcean для доступа к платформе AI GGradient™. Зарегистрируйтесь здесь, если у вас его нет.
  • Базовое понимание API — Знание REST API и переменных окружения будет полезным. Ознакомьтесь с нашим учебником по основам API, если вам нужно освежить знания.

Почему безсерверная инференция?

Платформа DigitalOcean Gradient революционизирует разработку AI-приложений, обеспечивая бесшовную интеграцию различных AI-моделей. Функция бессерверного вывода является изменяющим правила игры аспектом, позволяющим вам получить доступ к широкому спектру популярных открытых и проприетарных моделей через единый, унифицированный API. Этот подход предлагает множество преимуществ, включая:

  • Безсерверный: Масштабируемый доступ к ИИ-моделям без необходимости управления инфраструктурой, что гарантирует, что ваше приложение сможет справляться с внезапными всплесками трафика или спроса, не беспокоясь о ёмкости серверов.
  • Мульти-модельный доступ: Возможность доступа к более чем десятку ИИ моделей через единое API, что дает вам гибкость для экспериментов с различными моделями и нахождения наилучшего варианта для вашего приложения.
  • Единый биллинг: Консолидированное выставление счетов за все использование моделей на одной платформе, что упрощает управление затратами и отслеживание использования различных моделей.
  • Оплата по мере использования: Экономичная ценовая модель, которая взимает плату только за ресурсы, которые вы используете, обеспечивая оплату только за время вычислений и ресурсы, необходимые для работы ваших AI-моделей.

Используя серверлесс-инференс, вы можете сосредоточиться на создании и развертывании AI-приложений, не беспокоясь о базовой инфраструктуре, управлении моделями или сложных процессах биллинга. Это позволяет вам ускорить разработку AI, сократить затраты и повысить общую эффективность ваших проектов.

Быстрый старт

Выполните приведенный ниже код, чтобы клонировать и запустить репозиторий — вы можете прочитать объяснение кода ниже. Этот проект использует менеджер пакетов uv, поэтому убедитесь, что он установлен на вашей системе.

Clone the repository git clone https://github.com/do-community/langchain-gradient-ai-switch-providers.git cd langchain-gradient-ai-switch-providers  Install dependencies with uv uv sync  Set up environment cp .env.example .env 

Далее перейдите в консоль DigitalOcean Cloud, выберите Agent Platform в боковом меню, затем нажмите на вкладку Serverless inference, а затем на кнопку Create model access key. Назовите свой ключ, а затем вставьте его значение в файл .env в качестве значения для переменной окружения DIGITALOCEAN_INFERENCE_KEY.

Теперь вы можете запустить код:

uv run main.py 

Это вызовет LLaMa 3 70B (Instruct), и если произойдет ошибка, перейдет на LLaMa 3 8B (Instruct). Чтобы смоделировать сбой, используйте флаг --mock:

uv run main.py --mock 

Это создаст имитацию сбоя для первого вызова, перейдя на вторичную модель для успешного завершения запроса.

Объяснение кода

Перечисление модели

Файл models.py содержит перечисление всех моделей, доступных в DigitalOcean Serverless Inference, включая Claude, GPT и Llama. Определение перечисления обеспечивает поддержку статической проверки типов, автодополнение в IDE и предотвращает опечатки, которые могут привести к ошибкам во время выполнения.

from enum import Enum  class GradientModel(Enum):     LLAMA3_3_70B_INSTRUCT = "llama3.3-70b-instruct"     ANTHROPIC_CLAUDE_3_5_SONNET = "anthropic-claude-3.5-sonnet"     OPENAI_GPT_4O = "openai-gpt-4o"     # ...  

Основная реализация резервного копирования

ChatGradientAI в интеграции langchain-gradientai является объектом LangChain, который предоставляет доступ к платформе Gradient AI. Мы расширяем этот класс, чтобы добавить механизм резервного копирования.

Класс FallbackChatGradientAI принимает список моделей для последовательного использования при вызове LLM. Если одна модель не срабатывает, она переходит к следующей и повторяет вызов, пока не получится успешный результат. Если все модели терпят неудачу, возникает исключение.

class FallbackChatGradientAI:         def __init__(         self,          models: List[GradientModel],          api_key: Optional[str] = None,         **kwargs     ):         if not models:             raise ValueError("At least one model must be provided")                      self.models = models         self.api_key = api_key or os.getenv("DIGITALOCEAN_INFERENCE_KEY")         self.kwargs = kwargs                  if not self.api_key:             raise ValueError("API key must be provided or set in DIGITALOCEAN_INFERENCE_KEY")           def invoke(self, input_data: Any) -> Any:         last_exception = None                  for i, model in enumerate(self.models):             logger.info(f"Attempting request with model: {model.value}")                          try:                 llm = self._create_llm(model)                 result = llm.invoke(input_data)                                  if i > 0:                     logger.info(f"Successfully fell back to model: {model.value}")                                  return result                              except Exception as e:                 logger.warning(f"Model {model.value} failed: {str(e)}")                 last_exception = e                 continue                  # If we get here, all models failed         raise Exception(f"All models failed. Last error: {str(last_exception)}")  

Этот дизайн включает в себя:

  • Без повторных попыток — Немедленный запасной вариант для более быстрой реакции (по умолчанию предполагая постоянный сбой, если поставщик вообще дает сбой)
  • Последовательное испытание — Модели пробуются в порядке предпочтения, что позволяет вам оценивать стоимость/производительность для вашего приложения.
  • Комплексное ведение журнала — Отслеживайте, какие модели терпят неудачу, а какие успешны

Насмехаясь над неудачами

MockFallbackChatGradientAI переопределяет FallbackChatGradientAI, создавая макет объекта вместо первого LLM, который намеренно вызывает исключение при вызове:

class MockFallbackChatGradientAI(FallbackChatGradientAI):     def _create_llm(self, model: GradientModel) -> ChatGradientAI:         if self.fail_first and model == self.models[0]:             mock_instance = Mock()             mock_instance.invoke.side_effect = Exception("Mocked failure for testing")             return mock_instance                  return super()._create_llm(model) 

Главный сценарий

Главный скрипт, main.py содержит три изолированных примера, доступных через различные флаги командной строки:

  1. Простой пример (без резервного варианта), показывающий, как использовать серверную инфраструктуру DigitalOcean для инференса (запустите с помощью uv run main.py --basic)
  2. Реальный пример резервирования, где предоставляется резервная модель в случае сбоя первой (запустите с помощью uv run main.py)
  3. Пример имитации резервного механизма, где имитируется неудачный вызов для демонстрации поведения резервирования (запустите с uv run main.py --mock)

Часто задаваемые вопросы

1. Как улучшение резервирования LLM повышает надежность приложения?

Резервное копирование LLM значительно улучшает надежность приложения, автоматически переключаясь на резервные ИИ-модели, когда основная модель дает сбой. Этот подход устраняет единичные точки отказа и гарантирует, что ваше приложение продолжает функционировать даже во время сбоев модели, ограничения по частоте запросов или проблем с доступностью в регионе. С безсерверной инференцией DigitalOcean вы можете получить доступ к нескольким моделям через одно API, что делает реализацию резервного копирования бесшовной и экономически эффективной.

Ключевые преимущества:

  • Ноль простоев — Автоматическое переключение моделей предотвращает перерывы в обслуживании
  • Оптимизация затрат — Используйте более дешевые модели в качестве резервных вариантов для некритических запросов
  • Гибкость производительности — Сбалансируйте скорость и качество в зависимости от ваших потребностей
  • Региональная устойчивость — Преодоление проблем с доступностью моделей, связанных с географическим положением

2. В чем разница между логикой повторной попытки и стратегиями резервирования?

Логика повторных попыток и стратегии резервного копирования служат различным целям в приложениях LLM:

Логика повторных попыток:

  • Попытки одной и той же модели несколько раз с задержками
  • Полезно для временных сетевых проблем или ограничений по скорости
  • Может значительно увеличить время отклика
  • Может не устранить постоянные сбои модели

Стратегии резервирования:

  • Немедленно переключается на альтернативные модели
  • Обеспечивает более быстрые время отклика в случае сбоев
  • Предлагает различные возможности моделей и ценообразование
  • Обеспечивает непрерывную доступность услуги

Реализация в этом руководстве использует фалбек без повторных попыток для немедленного переключения, что идеально подходит для производственных сред, где скорость и надежность имеют критическое значение.

3. Как мне выбрать правильные модели для моей стратегии резервирования?

Выбор правильных моделей для вашей стратегии резервирования включает в себя балансировку нескольких факторов:

Выбор основного модели:

  • Выбирайте в зависимости от основных требований вашего приложения (скорость, точность, стоимость)
  • Учитывайте возможности модели для вашего конкретного случая использования
  • Учитывайте ожидаемый объем запросов и ограничения бюджета

Рассмотрения о запасной модели:

  • Сортировка по производительности: Используйте постепенно меньшие/быстрее модели (например, 70B → 8B → 7B)
  • Оптимизация затрат: Баланс качества и расходов для различных типов запросов
  • Специализация: Рассмотрите модели, специфичные для домена, для специализированных задач
  • Доступность: Убедитесь, что резервные модели находятся в различных регионах или от разных поставщиков

Пример стратегии:

models = [     GradientModel.LLAMA3_3_70B_INSTRUCT,    # High quality, higher cost     GradientModel.LLAMA3_3_8B_INSTRUCT,     # Good quality, moderate cost     GradientModel.ANTHROPIC_CLAUDE_3_5_SONNET  # Alternative provider ] 

4. Могу ли я реализовать резервное копирование с другими провайдерами ИИ, кроме DigitalOcean?

Да, вы можете внедрить резервирование LLM с другими поставщиками ИИ, но подход DigitalOcean предлагает уникальные преимущества:

Многостороннее резервное питание:

  • Сложность: Требует управления несколькими ключами API, ограничениями по скорости и бухгалтерией
  • Интеграция: Нужно обрабатывать разные форматы ответов и паттерны ошибок
  • Стоимость: Множество счетов для выставления счетов и возможные дополнительные сборы
  • Обслуживание: Более сложные системы мониторинга и оповещения

Преимущества DigitalOcean Gradient AI:

  • Единое API: Унифицированный интерфейс для всех моделей
  • Единый счет: Один аккаунт, один счет, упрощенное управление затратами
  • Последовательные ответы: Стандартизированный формат вывода для всех моделей
  • Встроенная избыточность: Автоматически доступны несколько моделей от разных поставщиков
  • Упрощённый мониторинг: Единая панель управления для использования и производительности всех моделей

Пример реализации:

Multi-provider approach (complex) class MultiProviderFallback:     def __init__(self):         self.openai_client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))         self.anthropic_client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))         self.gradient_client = ChatGradientAI(api_key=os.getenv("GRADIENT_API_KEY"))  DigitalOcean approach (simple) class SimpleFallback:     def __init__(self):         self.client = FallbackChatGradientAI(             models=[GradientModel.LLAMA3_3_70B_INSTRUCT, GradientModel.ANTHROPIC_CLAUDE_3_5_SONNET]         ) 

5. Как мне отслеживать и отлаживать поведение резервирования в продуктивной среде?

Эффективный мониторинг и отладка резервного поведения являются решающими для производственных приложений:

Ключевые метрики для отслеживания:

  • Частота сбоев: Как часто модели терпят неудачу и вызывают возвраты
  • Время отклика: Сравнение производительности между основными и запасными моделями
  • Коэффициенты успеха: Специфические для модели метрики надежности
  • Влияние на стоимость: Различия в выставлении счетов между основным и резервным использованием

Стратегии внедрения:

import logging from datetime import datetime  class MonitoredFallbackChatGradientAI(FallbackChatGradientAI):     def __init__(self, *args, **kwargs):         super().__init__(*args, **kwargs)         self.metrics = {             'total_requests': 0,             'fallbacks_triggered': 0,             'model_performance': {},             'errors': []         }          def invoke(self, input_data: Any) -> Any:         start_time = datetime.now()         self.metrics['total_requests'] += 1                  try:             result = super().invoke(input_data)             self._record_success(start_time)             return result         except Exception as e:             self._record_error(e)             raise          def _record_success(self, start_time):         duration = (datetime.now() - start_time).total_seconds()         # Log success metrics and performance data         logging.info(f"Request completed in {duration}s")          def _record_error(self, error):         self.metrics['errors'].append({             'timestamp': datetime.now(),             'error': str(error),             'model_attempted': getattr(self, 'current_model', 'unknown')         }) 

Инструменты мониторинга:

  • Журналы приложений: Отслеживайте события резервирования и показатели производительности
  • APM решения: Отслеживайте время отклика и уровень ошибок
  • Пользовательские панели: Визуализируйте схемы резервного копирования и затраты
  • Уведомление: Настройте уведомления для необычного поведения резервирования.

Советы по отладке:

  • Включите детальную регистрацию для всех взаимодействий с моделью
  • Отслеживайте идентификаторы запросов в ходе попыток резервного копирования
  • Мониторьте специфические для модели ошибки
  • Настройте уведомления о стоимости для неожиданных всплесков использования

Заключение

Поздравляем! Вы успешно научились реализовывать автоматическое резервирование LLM в своих приложениях LangChain, используя платформу DigitalOcean Gradient. Этот подход обеспечивает готовую к производству стойкость, которая гарантирует, что ваши приложения на базе ИИ остаются работоспособными даже в случае возникновения проблем у отдельных моделей.

Что вы достигли

  • Создана надежная резервная система, которая автоматически переключается между моделями ИИ
  • Реализована логика нулевой попытки для более быстрого времени отклика в случае сбоев
  • Создано готовое к производству управление ошибками с комплексным логированием
  • Оптимизировано по стоимости и производительности за счет стратегического выбора моделей
  • Использовал унифицированную платформу DigitalOcean для упрощенного управления

Ключевые преимущества этого подхода

Стратегия резервирования, которую вы реализовали, предлагает несколько преимуществ по сравнению с традиционными подходами с использованием одной модели:

  • Улучшенная надежность — Ваши приложения не будут давать сбой из-за недоступности модели
  • Лучший пользовательский опыт — Непрерывность обслуживания без перебоев во время сбоев
  • Оптимизация затрат — стратегическое использование разных уровней моделей
  • Упрощенные операции — Единый API и унифицированный биллинг через DigitalOcean

Начните работу с платформой DigitalOcean Gradient и создайте свои собственные устойчивые приложения LLM уже сегодня. Платформа предоставляет все необходимое для внедрения надежных стратегий резервирования, от единого доступа к API до комплексных инструментов мониторинга.

Готовы построить больше классных вещей?

Посетите официальный репозиторий GitHub платформы Langchain Gradient, чтобы прочитать код, или ознакомьтесь с другими репозиториями в организации DigitalOcean Community.

Посмотрите некоторые из наших других подобных учебников, например:

  • LangChain: Руководство для начинающих по использованию возможностей языковых моделей — Овладейте основами LangChain для создания приложений на основе LLM.
  • Практическое руководство по RAG с Haystack и LangChain — Узнайте, как создавать готовые к производству конвейеры дополненной генерации с использованием извлечения.
  • Интерактивные беседы с PDF-документами с использованием LangChain — создавайте AI-приложения, которые могут понимать и обсуждать содержимое документов
  • Руководство для начинающих по машинному обучению на Python — Постройте прочную основу в машинном обучении с Python и Scikit-Learn
  • Как интегрировать API DataForSEO с ChatGPT — Узнайте, как использовать API DataForSEO в ChatGPT для создания настраиваемого GPT.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *