Zużycie tokenów
Obejmuje to sposób śledzenia i kontrolowania zużycia tokenów w LibreChat. Dowiesz się, jak przeglądać kontekst i koszty, konfigurować transakcje, włączać salda użytkowników oraz dodawać środki do konta.
Wprowadzenie
Począwszy od v0.6.0, LibreChat dokładnie śledzi zużycie tokenów dla obsługiwanych endpoint. Wszystkie transakcje tokenów są przechowywane w kolekcji "Transactions" w Twojej bazie danych. Bieżące wydania pokazują również w czasie rzeczywistym użycie kontekstu oraz koszt w interfejsie konwersacji, gdy opcja ta jest włączona.
Obecnie możesz ograniczyć zużycie tokenów przez użytkowników, włączając salda użytkowników. Zamiast konfigurować limity kredytów tokenów za pomocą zmiennych środowiskowych, ustawiasz teraz te opcje w pliku librechat.yaml w sekcji balance. Wartości kosztów są domyślnie ukryte i muszą zostać włączone za pomocą interface.contextCost.
Wyświetlanie użycia kontekstu i kosztów
LibreChat wyświetla wskaźnik kontekstu podczas trwania konwersacji. Wskaźnik aktualizuje się na podstawie zdarzeń użycia podczas przesyłania strumieniowego i może pokazywać:
- Aktualne użycie promptu/kontekstu w odniesieniu do okna kontekstowego modelu
- Podsumowanie po najechaniu kursorem z szybkimi szczegółami dotyczącymi tokenów i kosztów
- Szczegółowe zestawienie typu "kliknij, aby rozwinąć" dotyczące użycia tokenów dla promptów, uzupełnień, tokenów z pamięci podręcznej (cached), sum gałęzi oraz sum konwersacji
Szczegółowe zestawienia użycia są zapisywane wraz z wiadomościami i konwersacjami. Ponownie otwarte czaty zachowują szczegóły dotyczące gałęzi oraz całkowitego użycia/kosztów, zamiast polegać wyłącznie na aktywnej sesji strumieniowania.
Gdy podsumowanie skraca długą konwersację, LibreChat zapisuje bazę skróconego podsumowania i wskaźnik kontekstu zlicza tylko tury konwersacji występujące po podsumowaniu. Całkowite użycie i koszty nadal uwzględniają pełne wydatki dla danej gałęzi.
Administratorzy mogą kontrolować te wyświetlenia w librechat.yaml:
interface:
contextUsage: true
contextCost: true
currency:
code: EUR
rate: 0.92contextUsagekontroluje, czy użytkownicy widzą okno kontekstu oraz wskaźnik zużycia tokenów.contextCostkontroluje, czy użytkownicy widzą wartości kosztów w szczegółach użycia. Domyślnie ustawione jest nafalse; ustaw natrue, aby wyświetlić koszty.currencyprzelicza wyświetlane koszty w USD przy użyciu statycznego mnożnika, gdy włączone jest wyświetlanie kosztów. Transakcje są nadal rejestrowane przy użyciu systemu rozliczania kredytów tokenowych LibreChat.
Konfiguracja tokenów dla niestandardowego endpoint
W przypadku niestandardowych endpointów, zdefiniuj okna kontekstowe specyficzne dla modelu oraz stawki za milion tokenów za pomocą endpoints.custom[].tokenConfig:
endpoints:
custom:
- name: 'Mistral'
apiKey: '${MISTRAL_API_KEY}'
baseURL: 'https://api.mistral.ai/v1'
models:
default: ['mistral-large-latest']
tokenConfig:
mistral-large-latest:
prompt: 2
completion: 6
context: 128000prompt, completion oraz context są wymagane dla każdego wpisu modelu. cacheRead oraz cacheWrite mogą zostać dodane dla dostawców, którzy raportują użycie danych wejściowych z pamięci podręcznej (cache). W przypadku Agentów korzystających z wielu endpointów, LibreChat używa pasującej konfiguracji tokenów dla endpointu/modelu podczas rejestrowania użycia i kosztów.
Pobrana konfiguracja tokenów jest buforowana w zakresie użytkownika, gdy modele endpointów, klucze, adresy URL lub nagłówki mogą się różnić w zależności od kontekstu żądania, dzięki czemu ceny i okna kontekstowe izolowanych niestandardowych endpointów pozostają odseparowane.
Konfiguracja transakcji
System transakcyjny kontroluje, czy rekordy użycia tokenów są zapisywane w bazie danych. Można to skonfigurować niezależnie od systemu salda.
Ustawienia transakcji
version: 1.2.9
# Transaction settings
# Controls whether to save transaction records to the database
# Default is true (enabled)
transactions:
enabled: falseWażne: Gdy balance.enabled jest ustawione na true, rejestrowanie transakcji jest automatycznie włączane niezależnie od ustawienia transactions.enabled. Zapewnia to poprawne działanie śledzenia salda poprzez utrzymywanie pełnego rejestru całego zużycia tokenów.
Sprawdź stronę Konfiguracja transakcji, aby uzyskać więcej szczegółów.
Konfiguracja równoważenia (Balance)
System salda w LibreChat umożliwia administratorom konfigurowanie sposobu zarządzania saldami kredytów tokenów dla użytkowników. Wszystkie ustawienia salda są teraz zarządzane w konfiguracji YAML w ramach obiektu balance.
Uwaga: Zastępuje to poprzednie zmienne środowiskowe (CHECK_BALANCE i START_BALANCE) i zapewnia bardziej ustrukturyzowany sposób zarządzania saldami użytkowników.
Pełne ustawienia salda
version: 1.3.5
# Balance settings
balance:
enabled: true # Enable token credit balances for users
startBalance: 20000 # Initial tokens credited upon registration
autoRefillEnabled: false # Enable automatic token refills
refillIntervalValue: 30 # Numerical value for refill interval
refillIntervalUnit: 'days' # Time unit for refill interval (days, hours, etc.)
refillAmount: 10000 # Tokens added during each refillWyjaśnienie ustawień balansu
-
enabled: Aktywuje śledzenie kredytów tokenów i zarządzanie saldem dla użytkowników. Po ustawieniu na
true, system będzie śledzić zużycie tokenów i egzekwować limity salda. -
startBalance: Określa początkową liczbę tokenów przyznawanych użytkownikowi podczas rejestracji. Jest to saldo początkowe dla wszystkich nowych użytkowników.
-
autoRefillEnabled: Określa, czy automatyczne uzupełnianie kredytów tokenów jest włączone. Gdy ustawione na
true, system będzie automatycznie dodawał kredyty do sald użytkowników w oparciu o interwał uzupełniania. -
refillIntervalValue: Określa wartość liczbową interwału, w którym kredyty tokenów są automatycznie uzupełniane. Działa w połączeniu z
refillIntervalUnit. -
refillIntervalUnit: Określa jednostkę czasu dla interwału uzupełniania. Obsługiwane wartości to "seconds", "minutes", "hours", "days", "weeks" oraz "months".
-
refillAmount: Określa liczbę tokenów dodawanych do salda użytkownika podczas każdego automatycznego doładowania.
Sprawdź stronę Balance Configuration, aby uzyskać więcej szczegółów.
Jak działa automatyczne uzupełnianie (Auto-Refill)
Gdy saldo użytkownika jest śledzone, a opcja autoRefill jest włączona, system automatycznie doda środki do salda tylko wtedy, gdy od ostatniego doładowania upłynął określony przedział czasu. Osiąga się to poprzez porównanie bieżącej daty z datą lastRefill powiększoną o określony interwał.
Proces automatycznego uzupełniania
- Gdy użytkownik próbuje wydać tokeny, system sprawdza, czy bieżące saldo jest wystarczające
- Jeśli saldo spadłoby do zera lub poniżej po transakcji, system sprawdza, czy włączone jest automatyczne doładowanie (auto-refill).
- Jeśli auto-refill jest włączone, system sprawdza, czy upłynął interwał czasowy od ostatniego uzupełnienia:
- System porównuje bieżącą datę z
lastRefill + refillInterval - Jeśli interwał upłynął, tokeny są dodawane do salda użytkownika
- Data
lastRefilljest aktualizowana do bieżącej daty
- System porównuje bieżącą datę z
- Transakcja jest kontynuowana, jeśli saldo jest wystarczające (początkowo lub po doładowaniu).
Obsługiwane jednostki czasu
refillIntervalUnit można ustawić na dowolną z poniższych wartości:
- sekundy
- minuty
- godziny
- dni
- tygodnie
- miesiące
Na przykład, jeśli refillIntervalValue jest ustawione na 30, a refillIntervalUnit na days, system doda refillAmount tokenów do salda użytkownika tylko wtedy, gdy od ostatniego uzupełnienia upłynęło 30 dni.
Synchronizacja salda
Gdy użytkownik się loguje, system automatycznie synchronizuje jego ustawienia salda z bieżącą globalną konfiguracją salda. Zapewnia to, że wszelkie zmiany w konfiguracji salda są stosowane do wszystkich użytkowników.
Proces synchronizacji:
- Sprawdza, czy użytkownik posiada rekord salda
- Jeśli rekord nie istnieje, tworzy nowy z bieżącym
startBalance - Aktualizuje ustawienia automatycznego doładowania użytkownika, aby były zgodne z konfiguracją globalną
- Zapewnia, że interwał odnawiania i ilość użytkownika są zgodne z ustawieniami globalnymi
Zarządzanie saldami tokenów
Możesz ręcznie dodawać lub ustawiać salda użytkowników. Jest to szczególnie przydatne podczas programowania lub jeśli planujesz w przyszłości zbudować pełny system naliczania salda (na przykład za pośrednictwem panelu administratora).
Dodawanie sald
# Local Development
npm run add-balance
# Docker (default setup)
docker compose exec api npm run add-balance
# Docker (deployment setup)
docker exec -it LibreChat-API /bin/sh -c "cd .. && npm run add-balance"# Local Development
npm run add-balance [email protected] 1000
# Docker (default setup)
docker compose exec api npm run add-balance [email protected] 1000
# Docker (deployment setup)
docker exec -it LibreChat-API /bin/sh -c "cd .. && npm run add-balance [email protected] 1000"Ustawianie sald
Dodatkowo możesz ustawić saldo dla użytkownika. Istniejące saldo zostanie nadpisane nowym saldem.
# Local Development
npm run set-balance
# Docker (default setup)
docker compose exec api npm run set-balance
# Docker (deployment setup)
docker exec -it LibreChat-API /bin/sh -c "cd .. && npm run set-balance"# Local Development
npm run set-balance [email protected] 1000
# Docker (default setup)
docker compose exec api npm run set-balance [email protected] 1000
# Docker (deployment setup)
docker exec -it LibreChat-API /bin/sh -c "cd .. && npm run set-balance [email protected] 1000"Lista sald
# Local Development
npm run list-balances
# Docker (default setup)
docker compose exec api npm run list-balances
# Docker (deployment setup)
docker exec -it LibreChat-API /bin/sh -c "cd .. && npm run list-balances"Działa to dobrze do śledzenia własnego zużycia na użytek osobisty; 1000 kredytów = 0,001 USD (1 mil USD)
Uwagi dotyczące zużycia tokenów i salda
- Gdy funkcja podsumowywania jest włączona, możliwość wysłania żądania API zostanie zablokowana, jeśli koszt treści wymagających podsumowania oraz Twojego ładunku wiadomości przekroczy aktualne saldo.
- Użycie modelu przez podagentów (child-run) jest rejestrowane w ramach transakcji nadrzędnej, dzięki czemu uruchomienia agenta nadrzędnego uwzględniają delegowane użycie w swoich sumach.
- Zliczanie tokenów promptu jest bardzo dokładne w przypadku wywołań OpenAI, ale nie w 100% w przypadku wtyczek (ze względu na wywoływanie funkcji). Jest to wynik bardzo zbliżony i konserwatywny, co oznacza, że zliczona liczba może być wyższa o 2-5 tokenów.
- System pozwala na deficyty powstałe w wyniku tokenów uzupełnienia (completion tokens). Sprawdza jedynie, czy posiadasz wystarczającą liczbę tokenów dla promptu i jest dość pobłażliwy w kwestii uzupełnień. Poniższy wykres szczegółowo przedstawia tę logikę.
- Biorąc pod uwagę powyższe, wtyczki są sprawdzane na każdym etapie generowania, ponieważ proces ten działa w oparciu o wiele wywołań API. Wszystko, co LLM wygenerował od momentu początkowego monitu użytkownika, jest udostępniane użytkownikowi w komunikacie o błędzie, jak pokazano poniżej.
- Istnieje bufor 150 tokenów na tytułowanie, ponieważ jest to proces dwuetapowy, co daje średnio około 200 tokenów łącznie. W przypadku niewystarczających środków, tytułowanie jest anulowane przed dokonaniem jakichkolwiek wydatków i nie jest zgłaszany żaden błąd.
Więcej szczegółów
źródło: LibreChat/discussions/1640
"rawAmount": -000, // co to jest?
Surowa liczba tokenów obliczona zgodnie z algorytmem tokenizatora.
"tokenValue": -00000, // co to jest?
Wartość kredytów tokenów. 1000 kredytów = 0,001 USD (1 mill USD)
"rate": 00, // co to jest?
Szybkość, z jaką tokeny są naliczane jako kredyty.
Na przykład, gpt-3.5-turbo-1106 ma współczynnik 1 dla promptu użytkownika (wejście) i 2 dla uzupełnienia (wyjście)
| Model | Input | Output |
|---|---|---|
| gpt-3.5-turbo-1106 | $0.0010 / 1K tokenów | $0.0020 / 1K tokenów |
Biorąc pod uwagę podany przykład:
"rawAmount": -137
"tokenValue": -205.5
"rate": 1.5\text{Token Value} = (\text{Raw Amount of Tokens}) \times (\text{Rate})137 \times 1.5 = 205.5A aby uzyskać rzeczywistą kwotę wydatków w USD na podstawie Token Value:
\frac{\text{Token Value}}{1,000,000} = \left(\frac{\text{Raw Amount of Tokens} \times \text{Rate}}{1,000,000}\right)\frac{205.5}{1,000,000} = \$0.0002055 \text{ USD}W przypadku niestandardowych endpointów, preferuj endpoints.custom[].tokenConfig w pliku librechat.yaml dla stawek i okien kontekstowych poszczególnych modeli.
Podgląd
Dodatkowe uwagi
- Gdy funkcja podsumowywania jest włączona, żądania API są blokowane, jeśli koszt zawartości oraz ładunku wiadomości przekracza bieżące saldo.
- System jest pobłażliwy w kwestii tokenów wyjściowych (completion tokens), koncentrując się głównie na tokenach promptu (prompt tokens) w celu weryfikacji salda.
- Dodano bufor dla tytułowania (około 150 tokenów), aby uwzględnić proces dwuetapowy.
- Kredyty tokenów przekładają się na wartość pieniężną (np. 1000 kredytów = 0,001 USD).
Aby uzyskać więcej szczegółów i informacji o dostosowywaniu, zapoznaj się z dokumentacją LibreChat.
Jaka jest ta instrukcja?
Baner
Wyświetlaj ogłoszenia i powiadomienia swoim użytkownikom
API RAG
Skonfiguruj API Retrieval-Augmented Generation (RAG) do indeksowania i pobierania dokumentów przy użyciu Langchain i FastAPI. To API integruje się z LibreChat, aby zapewniać odpowiedzi uwzględniające kontekst na podstawie plików przesłanych przez użytkownika.