Uruchom agentów Letta na endpoincie kompatybilnym z OpenAI.

Updated 2026-07-29

Self-hostowany Letta odczytuje OPENAI_API_BASE i OPENAI_API_KEY ze środowiska, więc dwie zmienne wskazują jego stanowych agentów na bramkę. Upstream nazywa endpointy proxy nieoficjalnymi, a ta strona traktuje to poważnie: co działa, jakie są wymogi i gdzie były ostre krawędzie.

Szybka odpowiedź: dwie zmienne środowiskowe na serwerze.

Udokumentowana ścieżka Letta dla endpointów kompatybilnych z OpenAI to konfiguracja środowiskowa na self-hostowanym serwerze: ustaw OPENAI_API_BASE na URL endpointu i OPENAI_API_KEY na jego klucz przy starcie serwera, a Letta zarejestruje modele obsługiwane przez ten endpoint. Dla APIsRouter baza to https://api.apisrouter.com/v1. Nie ma pola base-URL per agent w UI; endpoint to decyzja na poziomie serwera, dlatego to środowisko jest powierzchnią, która ma znaczenie. Jeden wymóg jest nienegocjowalny i wart przeczytania przed czymkolwiek innym: dokumentacja Letta stwierdza, że endpointy kompatybilne z OpenAI muszą obsługiwać wywoływanie funkcji, ponieważ pętla agenta jest zbudowana na wywołaniach narzędzi. Endpoint, który robi tylko zwykłe chat completions, w ogóle nie może uruchomić agenta Letta. Modele z katalogu na APIsRouter mówią standardowym wywoływaniem narzędzi przez /v1/chat/completions, co jest kształtem, jakiego oczekuje Letta.

docker run \
  -v ~/.letta/.persist/pgdata:/var/lib/postgresql/data \
  -p 8283:8283 \
  -e OPENAI_API_KEY="$APISROUTER_API_KEY" \
  -e OPENAI_API_BASE="https://api.apisrouter.com/v1" \
  letta/letta:latest

Dlaczego Letta polega na swoim modelu mocniej niż aplikacja czatu.

Letta (letta-ai na GitHubie, około 24 tys. gwiazdek) wyrosła z projektu badawczego MemGPT i buduje stanowych agentów: agentów z trwałą, samoedytującą się pamięcią, która przetrwa między sesjami. Tam, gdzie klient czatu wysyła Twoją wiadomość i drukuje odpowiedź, agent Letta uruchamia wewnętrzną pętlę przy każdej interakcji, rozumując o tym, co wie, wywołując narzędzia pamięci, żeby odczytać i przepisać swoją własną pamięć rdzeniową i magazyn archiwalny, i dopiero potem produkując odpowiedź. Ta architektura ma dwie konsekwencje dla routingu endpointu. Po pierwsze, każdy krok pętli to żądanie wywołania narzędzia, dlatego wywoływanie funkcji jest twardym wymogiem, a nie miłym dodatkiem; model, który gubi się w schematach narzędzi, nie degraduje się tu łagodnie, tylko psuje zdolność agenta do pamiętania. Po drugie, wolumen żądań na interakcję jest wyższy, niż sugeruje transkrypt rozmowy, ponieważ zarządzanie pamięcią odpala się obok widocznej odpowiedzi. Identyfikator modelu obsługującego to wszystko jest zwykłym stringiem dla endpointu, więc z wielodostawcową bramką za OPENAI_API_BASE identyfikator Claude może prowadzić pętlę agenta, podczas gdy szybki identyfikator obsługuje lżejszych agentów na tym samym serwerze, każdy adresowany swoim handle.

Uczciwy stan wsparcia, prosto od upstream.

Własna dokumentacja Letta mówi, że endpointy proxy OpenAI nie są oficjalnie wspierane i że prawdopodobnie napotkasz błędy, rekomendując zamiast tego bezpośrednie połączenia z dostawcami. To ostrzeżenie zasługuje na zacytowanie, a nie zakopanie, ponieważ większość stron na ten temat udaje, że ono nie istnieje. To, co oznacza w praktyce, jest węższe, niż brzmi: Letta testuje względem natywnych API pierwszej strony, a endpoint, który odbiega od semantyki OpenAI, szczególnie w kwestii wywoływania narzędzi, produkuje awarie, którym upstream nie da priorytetu. Endpoint, który naprawdę implementuje specyfikację, łącznie z wywołaniami narzędzi, działa dobrze, i to jest dokładnie poprzeczka kompatybilności, od której zależy życie bramki. Historia wsparcia miała też jeden prawdziwy błąd wart poznania. Do początku 2026 modele rejestrowane przez OPENAI_API_BASE dostawały automatycznie prefiks jako dostawca openai-proxy, podczas gdy tworzenie agenta walidowało względem krótszej listy akceptowanych prefiksów, więc modele proxy rejestrowały się, ale nie mogły być użyte do tworzenia agentów. Problem został zamknięty poprawką w styczniu 2026; jeśli prowadzisz przypięty starszy serwer, a tworzenie agenta odrzuca modele, które serwer wyraźnie listuje, to ta niezgodność jest tym, na co trafiasz, a upgrade jest poprawką. Jeszcze jeden ruchomy cel: powierzchnia produktowa Letta się przesuwa, a jej dokumentacja obecnie kieruje nowych użytkowników w stronę nowszych trybów wdrożenia, zaznaczając, że klasyczny obraz Docker nie jest już aktywnie utrzymywaną powierzchnią. Powyższe zmienne środowiskowe to udokumentowany mechanizm dla self-hostowanego serwera; sprawdź obecną dokumentację, który artefakt serwera rekomenduje upstream w tygodniu, w którym wdrażasz.

# after the server is up, list models Letta knows about
curl -s http://localhost:8283/v1/models/ | head -50
# use the handle exactly as listed when creating agents

Dobór modeli dla stanowych agentów.

Ewaluacja, która ma znaczenie, to wierność pętli: utwórz testowego agenta, przeprowadź rozmowę, która wymusza aktualizacje pamięci, a potem przeczytaj pamięć rdzeniową agenta i zweryfikuj, że faktycznie się zmieniła. Model może pisać urocze odpowiedzi i wciąż zawodzić kontrakt pamięci, a tylko test pętli to wyłapuje.

  • Edycja pamięci to ustrukturyzowana praca narzędziowa. claude-sonnet-4-6 i gpt-5.5 niezawodnie obsługują pętlę przepisywania własnej pamięci, co jest kluczową kompetencją potrzebną agentowi Letta.
  • Długo żyjący agenci akumulują kontekst. Modele, które zachowują spójność głęboko w oknie kontekstu, mają tu większe znaczenie niż w bezstanowym czacie, co jest miejscem, gdzie claude-opus-4-7 zdobywa swój slot dla asystentów wysokiej stawki.
  • Floty lekkich agentów, jeden na użytkownika albo na zadanie, to obciążenia wolumenowe. claude-haiku-4-5-20251001 utrzymuje koszt per agent na płaskim poziomie, wciąż wykonując kompetentne wywołania narzędzi.
  • deepseek-v4-pro warto przetestować dla agentów mieszających rozumowanie z ruchem dwujęzycznym; wymóg wywoływania narzędzi jest bramką, więc testuj pętlę, nie tylko prozę.
  • Cokolwiek wybierzesz, wybieraj per agent. Serwer rejestruje cały katalog, a każdy agent wiąże się z handle, więc konsjerż intensywnie korzystający z pamięci i jednorazowy agent zadaniowy mogą działać na różnych identyfikatorach obok siebie.

Płatność za użycie · poniżej cen oficjalnych

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

ModelCena oficjalnaNasza cena
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Opus 4.7$5.00 / $25.00 per M$4.00 / $20.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M

Tryby awarii charakterystyczne dla Letta.

Odrzucanie przez tworzenie agenta modelu, który serwer listuje, to historyczny błąd prefiksu. Modele zarejestrowane przez proxy niosły prefiks dostawcy, którego tworzenie agenta odmawiało zaakceptować na dotkniętych wersjach. Poprawka wylądowała w styczniu 2026; w obecnych wydaniach handle pokazany w listingu modeli to handle, który działa. Jeśli jesteś przypięty do starszego obrazu, to najsilniejszy pojedynczy powód, żeby zrobić upgrade, zanim zaczniesz debugować cokolwiek innego. Agent, który odpowiada, ale nigdy nie pamięta, to awaria wywoływania narzędzi. Albo endpoint nie implementuje wywoływania funkcji, albo model za identyfikatorem słabo radzi sobie ze schematami narzędzi. Objawem są rozmowy, które działają, podczas gdy pamięć rdzeniowa nigdy się nie aktualizuje. Przetestuj tego samego agenta na claude-sonnet-4-6, żeby oddzielić problemy endpointu od problemów modelu. Zmienne środowiskowe ustawione w złym miejscu to klasyk Dockera: OPENAI_API_BASE wyeksportowana w Twojej powłoce nic nie daje kontenerowi uruchomionemu bez flag -e. Zmienne muszą dotrzeć do samego procesu serwera. A ponieważ endpoint jest na poziomie serwera, pamiętaj o promieniu rażenia: zmiana OPENAI_API_BASE przenosi każdego agenta na tym serwerze. Nie ma nadpisania endpointu per agent, więc jeden serwer na bramkę to czysta topologia, a wybór modelu per agent wykonuje różnicowanie.

Kto kieruje Letta przez bramkę.

  • Twórcy trwałych asystentów, którzy chcą edycji pamięci jakości Claude bez osobnego konta u dostawcy, klucza i powierzchni rozliczeniowej na każdy testowany model.
  • Zespoły prowadzące floty agentów, gdzie każdy użytkownik dostaje agenta, a śledzenie użycia per klucz zamienia rzeczywisty koszt warstwy pamięci w czytelny raport.
  • Badacze porównujący, jak modele radzą sobie z samoedytującą się pamięcią, gdzie każdy kandydat to zmiana handle na testowym agencie, a nie migracja dostawcy.
  • Self-hosterzy w środowiskach, gdzie bezpośredni dostęp do API dostawcy jest zablokowany, a pojedynczy endpoint bramki to wszystko, na co pozwala polityka sieciowa.
  • Deweloperzy bez dostępu do rozliczeń danego dostawcy. Dostęp oparty na doładowaniu, bez wymogu karty, usuwa zależność od rejestracji u każdego dostawcy z osobna.

Zweryfikuj endpoint i debuguj pierwszego agenta.

Zweryfikuj bramkę przed serwerem: wylistuj modele kluczem i uruchom jedno chat completion z dołączoną definicją narzędzia, ponieważ wywoływanie narzędzi to możliwość, od której Letta faktycznie zależy. Jeśli round trip wywołania narzędzia działa w curlu, połowa dotycząca endpointu jest udowodniona. Potem uruchom serwer z dwiema zmiennymi i przeczytaj jego listing modeli. Modele pojawiające się tam dowodzą rejestracji; agent pomyślnie utworzony z listowanego handle dowodzi ścieżki prefiksu; rozmowa, która aktualizuje pamięć rdzeniową, dowodzi pętli od początku do końca. Debuguj w tej kolejności, ponieważ każdy etap ma odrębny zestaw awarii: zmienne środowiskowe, wersję serwera i kompetencję narzędziową modelu, odpowiednio. Gdy agenci już działają, konsola APIsRouter pokazuje model per żądanie, liczbę tokenów i wydatki. Stanowi agenci rozliczają się drożej per interakcja, niż sugerują ich transkrypty, ponieważ zarządzanie pamięcią działa za każdą odpowiedzią, a log użycia to miejsce, gdzie ten ukryty mnożnik staje się liczbą, którą możesz zbudżetować.

curl -s https://api.apisrouter.com/v1/chat/completions \
  -H "Authorization: Bearer $APISROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"claude-sonnet-4-6",
       "messages":[{"role":"user","content":"What is 2+3?"}],
       "tools":[{"type":"function","function":{
         "name":"calc","description":"add numbers",
         "parameters":{"type":"object","properties":{
           "a":{"type":"number"},"b":{"type":"number"}}}}}]}'

Częste pytania

Jak wskazać Letta na niestandardowy endpoint kompatybilny z OpenAI?

Ustaw OPENAI_API_BASE i OPENAI_API_KEY w środowisku self-hostowanego serwera Letta, na przykład jako flagi -e w docker run. Nie ma pola base-URL per agent; endpoint jest konfigurowany na poziomie serwera, a każdy agent na tym serwerze go używa.

Czy Letta oficjalnie wspiera endpointy proxy?

Upstream nazywa je nieoficjalnie wspieranymi i ostrzega, że możesz napotkać błędy, rekomendując bezpośrednich dostawców. W praktyce wymogiem jest ścisła kompatybilność z OpenAI, łącznie z wywoływaniem funkcji; endpoint, który implementuje pełną specyfikację, uruchamia pętlę agenta, a to jest poprzeczka, względem której zbudowany jest APIsRouter.

Dlaczego wywoływanie funkcji jest wymagane?

Agenci Letta zarządzają własną pamięcią przez wywołania narzędzi: odczyt, przepisywanie i archiwizacja pamięci to funkcje, które model wywołuje przy każdej interakcji. Endpoint albo model bez solidnego wywoływania narzędzi nie może uruchomić pętli, a objawem jest agent, który rozmawia, ale nigdy nie pamięta.

Dlaczego tworzenie agenta odrzuca modele, które listuje mój serwer?

Starsze wersje serwera rejestrowały modele proxy pod prefiksem dostawcy, którego tworzenie agenta odmawiało zwalidować, błąd zamknięty poprawką w styczniu 2026. Zrób upgrade serwera, a potem używaj handle dokładnie tak, jak pojawia się w listingu modeli.

Czy różni agenci Letta mogą używać różnych modeli przez jeden endpoint?

Tak. Serwer rejestruje każdy identyfikator obsługiwany przez endpoint, a każdy agent wiąże się z handle modelu przy tworzeniu. Agent-konsjerż na claude-opus-4-7 i flota agentów zadaniowych na claude-haiku-4-5-20251001 mogą dzielić jeden serwer i jeden klucz.

Czy to dotyczy Letta Cloud, czy self-hostowanego serwera?

Self-hostowanego serwera, gdzie kontrolujesz środowisko. Letta Cloud zarządza własnymi wywołaniami modeli po stronie serwera. Zauważ też, że rekomendowane artefakty self-hostingu Letta się przesuwają, więc sprawdź obecną dokumentację co do trybu wdrożenia, który dziś utrzymują.