>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
TypeScript

Jak przestać pisać adaptery do sieci neuronowych i przejąć kontrolę nad kosztami tokenów

Ostatnio przepisywałem integrację z Claude na zaktualizowanego klienta i złapałem się na myśli. Jednego dnia klienci proszą o połączenie GPT-4o, następnego domagają się Anthropic, a tydzień później dział finansowy pyta skąd wzięła się kilkusetdolarowa faktura za testy. Za każdym razem muszę dodawać logikę obsługi błędów, zarządzać kluczami i ręcznie obliczać wydatki na tokeny.

Tej rutynie zaradza LLM Gateway od zespołu The Open Co. Projekt pełni rolę ujednoliconej bramki API, która przyjmuje wywołania w standardowym formacie OpenAI i kieruje je do odpowiednich dostawców.

Jedno żądanie dla dowolnego modelu

Główna koncepcja jest prosta. Zamiast integrować wiele zestawów SDK, wysyłasz pojedyncze żądanie HTTP do lokalnej lub chmurowej bramki. Kontroler automatycznie identyfikuje docelowego dostawcę, przekształca format i zwraca odpowiedź.

Obecnie wspierani są główni dostawcy:

  • OpenAI
  • Anthropic
  • Google Vertex AI
  • Inne usługi z kompatybilnymi API

Oto jak wygląda standardowe żądanie do bramki:

curl -X POST https://api.llmgateway.io/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $LLM_GATEWAY_API_KEY" \
  -d '{
  "model": "gpt-4o",
  "messages": [
    {"role": "user", "content": "Hello, how are you?"}
  ]
}'

Jeśli chcesz przełączyć się na Claude 3.5 Sonnet, struktura JSON w Twojej aplikacji pozostaje bez zmian. Zmienia się tylko nazwa modelu w ciele żądania.

Śledzenie kosztów i metryki opóźnień

Gdy wiele usług lub programistów pracuje z sieciami neuronowymi, kontrolowanie limitów staje się trudne. Czasami ktoś uruchamia skrypt z nieprawidłowym promptem w nieskończonej pętli i zużywa miesięczny budżet w ciągu godziny.

Bramka zajmuje się śledzeniem. Każda transakcja jest zapisywana w bazie danych, a system automatycznie oblicza:

  • Liczbę tokenów wejściowych i wyjściowych
  • Całkowity koszt każdego wywołania
  • Czas odpowiedzi modelu
  • Ogólne statystyki według kluczy i projektów

Przez panel internetowy można przeglądać gotowe wykresy i natychmiast zobaczyć, który konkretny model pochłania większość budżetu.

Struktura projektu i uruchomienie w Dockerze

Autorzy zbudowali monorepo w TypeScripcie. Pod maską wykorzystano sprawdzone technologie:

  • Hono obsługuje proxyowanie żądań API
  • Next.js zarządza interfejsem webowym i placem zabaw
  • Drizzle ORM pracuje z bazami danych PostgreSQL i Redis
  • TypeScript zapewnia typowanie end-to-end komponentów

Możesz wdrożyć własną usługę w kilka minut za pomocą Docker. Autorzy złożyli gotowy obraz łączący główne komponenty.

docker volume create llmgateway_postgres
docker volume create llmgateway_redis

docker run -d \
  --name llmgateway \
  --restart unless-stopped \
  -p 3002:3002 \
  -p 3003:3003 \
  -p 3005:3005 \
  -p 3006:3006 \
  -p 4001:4001 \
  -p 4002:4002 \
  -v llmgateway_postgres:/var/lib/postgresql/data \
  -v llmgateway_redis:/var/lib/redis \
  -e AUTH_SECRET="$(openssl rand -base64 32 | tr -d '\n')" \
  -e GATEWAY_API_KEY_HASH_SECRET="$(openssl rand -base64 32 | tr -d '\n')" \
  ghcr.io/theopenco/llmgateway-unified:latest

Mały szczegół z dokumentacji: nie montuj folderu z maszyny hosta bezpośrednio do /var/lib/postgresql/data. Ze względu na specyfikę inicjalizacji uprawnień PostgreSQL w kontenerze, proces może się zawiesić. Nazwane woluminy w powyższym poleceniu eliminują ten problem.

Jeśli chcesz najpierw wypróbować system bez wdrażania, deweloperzy mają wersję chmurową na llmgateway. io.

Ograniczenia wersji darmowej

Repozytorium używa podwójnego licencjonowania. Główny kod jest rozpowszechniany na licencji AGPLv3, jednak niektóre foldery w kodzie źródłowym należą do wersji Enterprise.

W bezpłatnej wersji open source historia wywołań jest przechowywana przez 30 dni. Jeśli potrzebujesz nieograniczonego przechowywania logów, zaawansowanego rozliczania użytkowników lub podziału zespołów w ramach organizacji, musisz zakupić licencję komercyjną.

Kto skorzysta na tym narzędziu

Jeśli Twoja aplikacja wykonuje trzy żądania dziennie do jednego modelu, nie ma sensu konfigurować osobnego proxy. Po prostu dodasz dodatkowy punkt awarii i pomijalne opóźnienie sieciowe.

Bramka sprawdzi się w następujących sytuacjach:

  • Projekt korzysta z modeli różnych dostawców
  • Wymagane jest przejrzyste śledzenie kosztów tokenów w różnych usługach
  • Potrzebne jest wdrożenie proxy we własnym środowisku
  • Planowane jest szybkie przełączanie awaryjne na zapasowy model w przypadku awarii

Możesz wypróbować projekt na GitHub. README jest tam dość minimalistyczne, ale projekt jest zrozumiały nawet bez rozbudowanych instrukcji.

Powiązane projekty