Проблема Вызов нескольких LLM требует настройки конкретного поставщика/модели. Даже если вы унифицируете ввод-вывод, вам все равно нужен способ обработки крайних случаев, зависящих от модели/провайдера. Мы столкнулись с этим на прошлой неделе, когда Anthropic сообщила нам, что мы нарушили их политику в отношении контента. С тех пор мы предоставляем нашему сообществу доступ к LLM, таким как Claude-2 и т. д., через наш с открытым исходным кодом. прокси-сервер Проверка запросов через конечную точку модерации OpenAI замедляла бы запросы, поэтому мы хотели запустить это только на моделях Anthropic. if model in ["claude-instant-1", "claude-2"]: # run moderations check return litellm.completion(model, messages) Но подобная условная логика приводит к ошибкам. Мы уже сталкивались с этой проблемой раньше и (библиотека абстракций, упрощающая вызовы API LLM). создали LiteLLM для решения этой проблемы тлдр; Нам нужна была условная логика на нашем сервере. не Нам способ контролировать, для каких моделей/провайдеров выполняется эта проверка. нужен был Решение: файлы конфигурации Наше решение заключалось в том, чтобы LiteLLM эту задачу за нас и управлял ее логикой через файл конфигурации. Это и по-прежнему позволило нам . выполнял удалило условную логику из нашего серверного кода контролировать конкретные детали поставщика/модели Это также позволило нам обрабатывать другие сценарии, такие как ошибки контекстного окна, максимальное количество токенов и т. д. Вот наш полный код: import litellm import os config = { "default_fallback_models": ["gpt-3.5-turbo", "claude-instant-1", "j2-ultra"], "model": { "claude-instant-1": { "needs_moderation": True }, "gpt-3.5-turbo": { "error_handling": { "ContextWindowExceededError": {"fallback_model": "gpt-3.5-turbo-16k"} } } } } # set env var os.environ["OPENAI_API_KEY"] = "sk-litellm-5b46387675a944d2" # [OPTIONAL] replace with your openai key os.environ["ANTHROPIC_API_KEY"] = "sk-litellm-5b46387675a944d2" # [OPTIONAL] replace with your anthropic key sample_text = "how does a court case get to the Supreme Court?" * 1000 messages = [{"content": sample_text, "role": "user"}] response = completion_with_config(model="gpt-3.5-turbo", messages=messages, config=config) print(response) # should be gpt-3.5-turbo-16k Файлы конфигурации в настоящее время управляют: Логика подсказки — выбор правильной модели для заданной подсказки, а также обрезка подсказки, если она больше любой доступной модели. Логика возврата — позволяет вам устанавливать резервные варианты по умолчанию, а также специфичные для модели (например, ошибка контекстного окна выше). Модерация — если провайдер (например, Anthropic) требует от вас модерации ваших запросов. Со временем это будет обрабатывать и другие параметры, специфичные для модели, такие как установка максимального количества токенов, форматирование подсказок и т. д. Идеи/предложения приветствуются! Заключение LiteLLM уже упростил вызов поставщиков LLM, заменив конечную точку OpenAI ChatCompletion. Благодаря файлам конфигурации теперь вы можете добавлять новые модели в производство без изменения какого-либо серверного кода. В целом, LiteLLM — отличный выбор для тех, кто хочет быстро и легко добавлять в производство модели, отличные от OpenAI. Мы активно пытаемся развивать этот проект, поэтому независимо от вашего уровня навыков, мы приветствуем вклад! Откройте проблему, если обнаружите недостающие функции/ошибки или усугубите существующие проблемы. на GitHub, если хотите следить за нашим прогрессом по мере выхода новых обновлений. Отметьте нас