Как добавить резервный вариант 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 содержит три изолированных примера, доступных через различные флаги командной строки:
- Простой пример (без резервного варианта), показывающий, как использовать серверную инфраструктуру DigitalOcean для инференса (запустите с помощью
uv run main.py --basic) - Реальный пример резервирования, где предоставляется резервная модель в случае сбоя первой (запустите с помощью
uv run main.py) - Пример имитации резервного механизма, где имитируется неудачный вызов для демонстрации поведения резервирования (запустите с
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.



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