Der Aufruf mehrerer LLMs erfordert anbieter-/modellspezifische Konfigurationen. Selbst wenn Sie die E/A vereinheitlichen, benötigen Sie immer noch eine Möglichkeit, modell-/anbieterspezifische Randfälle zu handhaben.
Wir waren letzte Woche damit konfrontiert, als Anthropic uns mitteilte, dass wir gegen ihre Inhaltsrichtlinien verstoßen hatten. Seitdem bieten wir unserer Community über unseren Open-Source- Proxyserver Zugriff auf LLMs wie Claude-2 usw.
Das Überprüfen von Abfragen über den OpenAI-Moderationsendpunkt würde die Abfragen verlangsamen, daher wollten wir dies nur auf den Modellen von Anthropic ausführen.
if model in ["claude-instant-1", "claude-2"]: # run moderations check return litellm.completion(model, messages)
Eine solche bedingte Logik führt jedoch zu Fehlern. Wir hatten genau dieses Problem schon einmal und haben LiteLLM entwickelt, um dieses Problem für uns zu lösen (Abstraktionsbibliothek, die LLM-API-Aufrufe vereinfacht).
tldr;
Unsere Lösung bestand darin, LiteLLM dies für uns erledigen zu lassen und seine Logik über eine Konfigurationsdatei zu steuern. Dadurch wurde die bedingte Logik aus unserem Servercode entfernt und wir konnten weiterhin anbieter-/modellspezifische Details steuern .
Dadurch konnten wir auch andere Szenarien wie Kontextfensterfehler, maximale Tokenanzahl usw. bewältigen.
Hier ist unser vollständiger Code:
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
Konfigurationsdateien verwalten derzeit:
Im Laufe der Zeit werden dadurch auch andere modellspezifische Parameter wie das Festlegen der maximalen Token, die Eingabeaufforderungsformatierung usw. behandelt . Ideen/Vorschläge sind willkommen!
LiteLLM hat bereits das Aufrufen von LLM-Anbietern vereinfacht, mit einem Drop-in-Ersatz für den OpenAI ChatCompletion-Endpunkt.
Mit Konfigurationsdateien können Sie jetzt neue Modelle in der Produktion hinzufügen, ohne serverseitigen Code zu ändern.
Insgesamt ist LiteLLM eine ausgezeichnete Wahl für alle, die schnell und einfach Nicht-OpenAI-Modelle in die Produktion integrieren möchten.
Wir versuchen aktiv, dieses Projekt auszubauen, daher freuen wir uns über Beiträge, unabhängig von Ihrem Kenntnisstand! Öffnen Sie ein Problem, wenn Sie fehlende Funktionen/Fehler finden oder zu bestehenden Problemen beitragen. Markieren Sie uns auf GitHub, wenn Sie unsere Fortschritte verfolgen möchten, sobald neue Updates verfügbar sind.