Ekspertyza · Dostęp do modeli AI
Jedno wejście do modeli AI, z kluczami per zespół, limitami i lokalnym rozliczaniem.
Umieszczamy między aplikacjami firmy a dostawcami modeli jeden punkt wejścia, kompatybilny z interfejsem OpenAI. Stamtąd wydawane są oddzielne klucze dla każdego projektu, z limitem wydatków, listą dozwolonych modeli i listą adresów IP, a zużycie widać na klucz.
Już zbudowaneBrama działa i można ją dziś sprawdzić z zewnątrz, bez wiary na słowo: publiczny katalog modeli odpowiada 200 i wyświetla 106 modeli oznaczonych jako aktywne, a zapytanie o modele bez klucza zwraca 401. Pod nią są dwie własne implementacje: usługa rozliczeń i administracji (98 plików TypeScript), która wydaje klucze, synchronizuje limity z bramą i prowadzi rejestry, oraz nasza platforma asystentów, która wprowadza do produkcji rozpoznawanie mowy i syntezę przez tę samą bramę, a nie bezpośrednio do dostawcy. Zastrzeżenia, powiedziane tutaj, a nie w przypisie: katalog zmienia się z godziny na godzinę, więc każdą liczbę zapisuje się razem z datą; dziś w bramie nie ma żadnego modelu Anthropic, chociaż nasz własny README twierdzi inaczej; a automatyczne wysyłanie faktury do systemu państwowego pozostaje w trybie próbnym do czasu zainstalowania certyfikatu.
Problem pojawia się po raz drugi, nie pierwszy. Pierwsza integracja z dostawcą modeli jest prosta: jeden klucz, jedna biblioteka, gotowe. Piąta aplikacja, trzeci zespół i drugi rachunek w walucie obcej to moment, w którym nikt nie jest już w stanie odpowiedzieć na trzy banalne pytania — kto zużywa, ile, i co się stanie, jeśli skrypt wymknie się spod kontroli pewnej sobotniej nocy. Brama rozwiązuje dokładnie to: aplikacje nie rozmawiają już z dostawcami, rozmawiają z jednym punktem wejścia, który ma ten sam interfejs co API OpenAI, więc w większości bibliotek zmienia się adres bazowy i klucz, a nie kod.
Co można sprawdzić samodzielnie, już teraz, bez konta: publiczny katalog modeli bramy odpowiada i pokazuje, co ma w środku. W dzisiejszej weryfikacji było 106 modeli, wszystkie oznaczone jako aktywne — 77 modeli tekstowych, z których 48 deklaruje możliwości rozumowania, 10 audio, 7 obrazu, 7 czasu rzeczywistego, 3 wektoryzacji i 2 wideo. Ta sama weryfikacja wykonana przez współpracownika półtorej godziny wcześniej zwracała 107. Dlatego liczbę zawsze zapisuje się razem z godziną, a na stronie należy ją odczytywać z endpointu, nie wpisywać ręcznie.
Kontrola kosztów nie jest panelem, jest ogranicznikiem. Jeden klucz ma limit wydatków, okres limitu do wyboru spośród czterech, listę dozwolonych modeli, listę akceptowanych adresów IP — do dwudziestu, IPv4, IPv6 lub bloków — oraz znacznik blokady. Gdy limit zostanie przekroczony, klucz blokuje się automatycznie, a przyczyna zostaje na nim zapisana, aby interfejs mógł pokazać, dlaczego, zamiast wyświetlać niemy stan. Istnieje też korekta, którą niewiele osób stosuje: modele, które „myślą” przed odpowiedzią, zużywają u dostawcy więcej niż widzi brama, więc surowy limit przesyłany niżej dzieli się przez współczynnik rozumowania obliczony jako mediana z ostatnich trzydziestu dni użytkownika, ograniczona do przedziału od jednego do dwudziestu. Bez tej korekty limit wydatków byłby dekoracyjny dokładnie na drogich modelach.
Część lokalna. Kurs walutowy jest odczytywany z oficjalnego pliku XML Narodowego Banku Mołdawii dla bieżącego dnia, z timeoutem pięciu sekund i wartością zapasową z konfiguracji, gdy źródło nie odpowiada — brama nie ma prawa zatrzymać się dlatego, że strona z kursem walut jest niedostępna. Faktura fiskalna jest tworzona jako XML i przechowywana, z cyklem stanów od wersji roboczej do zaakceptowanej lub odrzuconej. Faktyczne wysłanie do systemu państwowego odbywa się z użyciem certyfikatu; dopóki certyfikat nie jest zainstalowany, usługa pozostaje w trybie próbnym: XML jest generowany i zapisywany, ale nie jest wysyłany. To jest rzeczywisty stan i go zapisujemy, bo to różnica między „mamy fakturę fiskalną” a „mamy wszystko, co potrzebne, aby ją wysłać”.