paint-brush
LiteLLM 구성: 100개 이상의 LLM을 안정적으로 호출~에 의해@krrish
2,951 판독값
2,951 판독값

LiteLLM 구성: 100개 이상의 LLM을 안정적으로 호출

~에 의해 Krrish Dholakia3m2023/09/22
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

LiteLLM은 openai-python SDK를 즉시 대체합니다. 100개 이상의 LLM에 전화할 수 있습니다. 구성 파일을 사용하면 이제 서버 측 코드를 변경하지 않고도 프로덕션에 새 모델을 추가할 수 있습니다.
featured image - LiteLLM 구성: 100개 이상의 LLM을 안정적으로 호출
Krrish Dholakia HackerNoon profile picture
0-item
1-item


문제

여러 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


구성 파일은 현재 다음을 관리합니다.

  • 프롬프트 논리 - 주어진 프롬프트에 적합한 모델을 선택하고 프롬프트가 사용 가능한 모델보다 큰 경우 프롬프트를 자릅니다.
  • 폴백 로직 - 모델별 폴백은 물론 기본 폴백도 설정할 수 있습니다(예: 위의 컨텍스트 창 오류).
  • 중재 - 제공업체(예: Anthropic)가 귀하의 요청을 중재하도록 요구하는 경우


시간이 지남에 따라 최대 토큰 설정, 프롬프트 형식 지정 등과 같은 기타 모델별 매개변수를 처리하게 됩니다 . 아이디어/제안을 환영합니다!

결론

LiteLLM은 이미 OpenAI ChatCompletion의 엔드포인트를 즉시 대체하여 LLM 공급자 호출을 단순화했습니다.


이제 구성 파일을 사용하면 서버 측 코드를 변경하지 않고도 프로덕션에 새 모델을 추가할 수 있습니다.


전반적으로 LiteLLM은 비OpenAI 모델을 프로덕션에 빠르고 쉽게 추가하려는 모든 사람에게 탁월한 선택입니다.


우리는 이 프로젝트를 성장시키기 위해 적극적으로 노력하고 있으므로 귀하의 기술 수준에 관계없이 기여를 환영합니다! 누락된 기능/버그를 발견하거나 기존 문제에 기여한 경우 문제를 제기하세요. 새로운 업데이트가 나올 때 진행 상황을 확인하려면 GitHub에 별표를 표시하세요 .