여러 LLM을 호출하려면 공급자/모델별 구성이 필요합니다. I/O를 통합하더라도 모델/공급자별 엣지 케이스를 처리할 수 있는 방법이 여전히 필요합니다.
지난 주 Anthropic이 우리가 그들의 콘텐츠 정책을 위반했다고 말했을 때 우리는 이 문제에 직면했습니다. 이후 우리는 오픈 소스 프록시 서버를 통해 Claude-2 등과 같은 LLM에 대한 커뮤니티 액세스를 제공합니다.
OpenAI 조정 엔드포인트를 통해 쿼리를 확인하면 쿼리 속도가 느려지므로 이를 Anthropic 모델에서만 실행하고 싶었습니다.
if model in ["claude-instant-1", "claude-2"]: # run moderations check return litellm.completion(model, messages)
그러나 이와 같은 조건부 논리는 버그를 발생시킵니다. 우리는 이전에 바로 이 문제에 직면했고 이 문제를 해결하기 위해 LiteLLM(LLM API 호출을 단순화한 추상화 라이브러리)을 구축했습니다 .
tldr;
우리의 솔루션은 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
구성 파일은 현재 다음을 관리합니다.
시간이 지남에 따라 최대 토큰 설정, 프롬프트 형식 지정 등과 같은 기타 모델별 매개변수를 처리하게 됩니다 . 아이디어/제안을 환영합니다!
LiteLLM은 이미 OpenAI ChatCompletion의 엔드포인트를 즉시 대체하여 LLM 공급자 호출을 단순화했습니다.
이제 구성 파일을 사용하면 서버 측 코드를 변경하지 않고도 프로덕션에 새 모델을 추가할 수 있습니다.
전반적으로 LiteLLM은 비OpenAI 모델을 프로덕션에 빠르고 쉽게 추가하려는 모든 사람에게 탁월한 선택입니다.
우리는 이 프로젝트를 성장시키기 위해 적극적으로 노력하고 있으므로 귀하의 기술 수준에 관계없이 기여를 환영합니다! 누락된 기능/버그를 발견하거나 기존 문제에 기여한 경우 문제를 제기하세요. 새로운 업데이트가 나올 때 진행 상황을 확인하려면 GitHub에 별표를 표시하세요 .