Uruchom TradingAgents na niestandardowym backendzie kompatybilnym z OpenAI.

Updated 2026-07-30

TradingAgents dostarcza tryb dostawcy openai_compatible. Ustaw backend_url na https://api.apisrouter.com/v1, wyeksportuj jeden klucz, a zarówno agenci deep-think, jak i quick-think kierują przez jeden endpoint, z każdym modelem z katalogu adresowalnym po identyfikatorze.

Szybka odpowiedź: trzy ustawienia kierują TradingAgents dokądkolwiek.

TradingAgents wspiera niestandardowe endpointy natywnie. Ustaw llm_provider na "openai_compatible", ustaw backend_url na adres swojego endpointu i wyeksportuj OPENAI_COMPATIBLE_API_KEY z kluczem dla tego endpointu. Z APIsRouter backend URL to https://api.apisrouter.com/v1, a każdy model w katalogu staje się adresowalny ze slotów deep_think_llm i quick_think_llm przez swój dokładny identyfikator modelu. To udokumentowana ścieżka konfiguracji w repozytorium upstream, nie fork ani patch. Te same wartości można też podać jako zmienne środowiskowe (TRADINGAGENTS_LLM_PROVIDER, TRADINGAGENTS_LLM_BACKEND_URL, TRADINGAGENTS_DEEP_THINK_LLM, TRADINGAGENTS_QUICK_THINK_LLM), więc zaplanowane zadanie albo runner CI może przełączać backendy bez dotykania kodu Pythona.

config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
# auth: export OPENAI_COMPATIBLE_API_KEY=sk-...

Jak TradingAgents rozmawia ze swoim backendem LLM.

TradingAgents (TauricResearch na GitHubie, ponad 93 tys. gwiazdek) to wieloagentowy framework tradingowy. Jedno uruchomienie analizy rozchodzi się na zespół analityków pokrywający fundamenty, sentyment, newsy i analizę techniczną, potem researcher-byk i researcher-niedźwiedź spierają się o sprawę przez jedną albo więcej rund debaty, agent-trader proponuje pozycję, a warstwa zarządzania ryzykiem recenzuje ją przed finalną decyzją. Framework dzieli tę pracę na dwa sloty modeli. deep_think_llm obsługuje kroki ciężkie na rozumowanie: debatę badawczą, decyzję tradera i przegląd ryzyka. quick_think_llm obsługuje kroki o wysokim wolumenie: czytanie danych, streszczanie newsów i pisanie szkiców raportów analityka. Oba sloty wysyłają standardowe żądania /v1/chat/completions. Ustawienie providera decyduje tylko o tym, do jakiego klienta i hosta idą te żądania, a openai_compatible wysyła je do dowolnego backend_url, który skonfigurujesz. Natywnie, TradingAgents wspiera też OpenAI, Anthropic, Google i DeepSeek jako natywnych dostawców, ale każdy potrzebuje własnego konta, własnego klucza i jednego providera per uruchomienie. Tryb openai_compatible to zwija: TradingAgents przekazuje pole model jako zwykły string, więc gdy endpoint za backend_url serwuje wielu dostawców, slot deep-think Claude i slot quick-think GPT albo DeepSeek mogą działać w tej samej analizie. To mieszanie per rola to praktyczny powód, żeby kierować framework przez bramkę, zamiast przez endpoint jednego dostawcy.

Pełna konfiguracja: konfiguracja Python albo zmienne środowiskowe.

Ścieżka programistyczna kopiuje DEFAULT_CONFIG i nadpisuje cztery klucze. Klucz uwierzytelniający wobec niestandardowego endpointu jest czytany z OPENAI_COMPATIBLE_API_KEY, więc nigdy nie musi pojawić się w słowniku konfiguracji ani pliku źródłowym. Ścieżka zmiennych środowiskowych ustawia te same wartości przez mapowanie _ENV_OVERRIDES w default_config.py i działa zarówno dla Python API, jak i interaktywnego CLI (tradingagents, albo python -m cli.main). Zauważ, że backend_url domyślnie jest None, w którym to przypadku klient każdego providera wraca do swojego domyślnego endpointu; nadpisanie wchodzi w życie dopiero, gdy ustawisz je jawnie. Dane rynkowe to osobna sprawa. TradingAgents pobiera notowania i fundamenty przez swoich dostawców danych (na przykład ALPHA_VANTAGE_API_KEY), a te poświadczenia są niezwiązane z endpointem LLM. Zmiana backend_url nie dotyka pipeline'u danych.

from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG

config = DEFAULT_CONFIG.copy()
config["llm_provider"] = "openai_compatible"
config["backend_url"] = "https://api.apisrouter.com/v1"
config["deep_think_llm"] = "claude-opus-4-7"    # debate rounds + trade decision
config["quick_think_llm"] = "claude-sonnet-4-6" # analysts, summaries
config["max_debate_rounds"] = 2

ta = TradingAgentsGraph(debug=True, config=config)
_, decision = ta.propagate("NVDA", "2026-07-15")
print(decision)

Dobór modeli deep-think i quick-think.

Domyślne ustawienie upstream łączy model z czołówki w slocie deep z modelem mini w slocie quick, co jest właściwym kształtem: wydawaj pojemność rozumowania tam, gdzie zapada decyzja, a pojemność wolumenową tam, gdzie odbywa się czytanie. Kierowanie przez jeden endpoint czyni to połączenie zmianą dwóch linijek między uruchomieniami, więc praktyczny workflow to trzymanie slotu deep na stałym poziomie i A/B slotu quick względem metryk backtestu, zamiast zgadywania.

  • deep_think_llm niesie debatę byk/niedźwiedź, decyzję tradera i przegląd ryzyka. Niewiele wywołań per uruchomienie, ale każde rozumuje nad pełnym kontekstem analityka, a max_debate_rounds je mnoży. To miejsce, gdzie model rozumowania z czołówki (claude-opus-4-7, gpt-5.5) zarabia na swoje tokeny.
  • quick_think_llm strzela na każdym kroku analityka: czytaniu fundamentów, ocenianiu sentymentu, streszczaniu newsów, pisaniu szkiców raportów. Większość wolumenu żądań uruchomienia ląduje tutaj, więc szybki model ze średniego tieru (claude-sonnet-4-6, deepseek-v4-pro) utrzymuje uruchomienia szybkimi, nie degradując wejść do debaty.
  • Obciążenia z długim kontekstem, jak wprowadzanie pełnych dokumentów albo dużych okien newsów do analityków, to miejsce, gdzie warto przetestować gemini-3.1-pro-preview w szybkim slocie.
  • Backtesty wzmacniają wszystko. Przemiatanie 50 tickerów i 20 dat to 1000 wywołań propagate(), więc wybór modelu quick-think, który na jednym uruchomieniu wygląda marginalnie, dominuje rachunek za tokeny w skali przemiatania.

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 Opus 4.7$5.00 / $25.00 per M$4.00 / $20.00 per M
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M

Backtesting w skali przemiatania: klucze, przypinanie i limity.

Gdy konfiguracja pojedynczego uruchomienia działa, powierzchnia awarii przesuwa się na przemiatanie. Trzy nawyki utrzymują wielodniowy backtest odtwarzalnym i debugowalnym. Przypinaj dokładne identyfikatory modeli. Gołe nazwy modeli u niektórych dostawców to ruchome wskaźniki, które po cichu przesuwają się na nowsze migawki, co oznacza, że backtest rozpoczęty w poniedziałek i zakończony w piątek mógł nie uruchomić jednego modelu. Tam, gdzie katalog wymienia wariant z datą, umieść w konfiguracji identyfikator z datą, i zapisz słownik konfiguracji obok wyników, tak jak zapisałbyś ziarno losowości. Używaj jednego klucza per eksperyment. Klucze są darmowe do stworzenia, a przypisanie klucza do przemiatania zamienia log użycia w księgę kosztów eksperymentu: liczbę tokenów i wydatki per model, filtrowalne dokładnie do uruchomień w tym przemiataniu. Gdy dwa eksperymenty dzielą klucz, przypisanie wydatków później oznacza grepowanie znaczników czasu. Znaj swój sufit współbieżności, zanim zrównoleglisz. propagate() jest synchroniczne per ticker-data, więc przemiatania zwykle dzielą się na fragmenty między procesami. Każdy fragment mnoży najpierw tempo żądań na slocie quick-think, a 429 w środku debaty kosztuje całe uruchomienie, nie jedno żądanie. Podnoś liczbę fragmentów, obserwując konsolę, zamiast uruchamiać na zimno pięćdziesięciu workerów; pulowane kanały upstream podnoszą sufit, ale nie czynią go nieskończonym.

Kto kieruje TradingAgents przez bramkę.

  • Osoby robiące backtesty, uruchamiające przemiatania ticker-po-dacie. Setki wywołań propagate() per eksperyment czynią widoczność użycia per klucz i jedną powierzchnię rozliczeń bardziej użyteczną niż cztery dashboardy dostawców.
  • Badacze porównujący pary modeli. Zamiana deep_think_llm między identyfikatorami Claude, GPT i DeepSeek to edycja konfiguracji na jednym endpoincie, nie nowe konto u dostawcy per kandydat.
  • Zespoły mieszające dostawców per rola. Claude do debaty, DeepSeek do wolumenu analityka. Natywny tryb providera zamyka uruchomienie na jednym dostawcy; wielodostawcowy endpoint nie.
  • 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.
  • Zaplanowane uruchomienia i CI. Konfiguracja oparta wyłącznie na środowisku oznacza, że obraz runnera potrzebuje jednego sekretu (OPENAI_COMPATIBLE_API_KEY), zamiast jednego per provider.

Zweryfikuj endpoint i debuguj pierwsze uruchomienie.

Zanim uruchomisz pełną analizę, potwierdź, że endpoint odpowiada modelami, których planujesz użyć. Jednoliniowy curl względem /v1/models Twoim kluczem wylistuje każdy adresowalny identyfikator; stringi w deep_think_llm i quick_think_llm muszą dokładnie zgadzać się z tymi identyfikatorami. Tryby awarii przy pierwszym uruchomieniu są spójne. 401 prawie zawsze oznacza, że OPENAI_COMPATIBLE_API_KEY zostało wyeksportowane w innej powłoce niż ta uruchamiająca tradingagents, albo w ogóle niewyeksportowane; zmienne środowiskowe ustawione w .bashrc nie docierają do jednostki systemd albo zadania cron, chyba że plik jednostki sam je eksportuje. Błąd model-not-found oznacza, że string identyfikatora nie zgadza się z katalogiem: identyfikatory są dokładne, łącznie z sufiksami wersji, a powyższy wynik /v1/models jest źródłem prawdy. Błąd połączenia z ustawionym backend_url zwykle oznacza, że URL-owi brakuje sufiksu /v1, ponieważ klient dokleja ścieżki tras jak /chat/completions do dowolnej bazy, którą podasz. Jeśli uruchomienie działa, ale wydaje się zawieszać w fazie debaty, to normalne opóźnienie dla modeli rozumowania nad długimi kontekstami, a nie problem endpointu; trzymaj debug=True włączone, żeby obserwować strumień kroków agenta. Prawdziwe timeouty na bardzo długich turach deep-think to ustawienie po stronie klienta, i warto je podnieść, zanim uznasz, że backend odrzucił żądanie. Gdy żądania już płyną, konsola APIsRouter pokazuje model per żądanie, liczbę tokenów i wydatki, co dla frameworka tak ciężkiego na wywołania jest najszybszym sposobem, żeby zobaczyć dokładnie, dokąd idą tokeny uruchomienia.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $OPENAI_COMPATIBLE_API_KEY" | head -50

Częste pytania

Czy TradingAgents wspiera modele Claude i Gemini przez jeden endpoint openai_compatible?

Tak. W trybie openai_compatible framework wysyła pole model jako zwykły string do backend_url przez /v1/chat/completions. Działa dowolny identyfikator serwowany przez endpoint, łącznie z identyfikatorami Claude, Gemini i DeepSeek, w slocie deep-think albo quick-think.

Którego klucza API używa TradingAgents z niestandardowym backend_url?

OPENAI_COMPATIBLE_API_KEY. Provider openai_compatible czyta go ze środowiska, więc klucz nigdy nie pojawia się w Twoim słowniku konfiguracji ani plikach źródłowych. OPENAI_API_KEY jest używane tylko przez natywnego providera openai.

Czy deep_think_llm i quick_think_llm mogą pochodzić od różnych dostawców w tym samym uruchomieniu?

Przez wielodostawcowy endpoint, tak: oba sloty wysyłają do tego samego backend_url, a string modelu decyduje o dostawcy per żądanie. Z natywnymi providerami (openai, anthropic, google, deepseek) uruchomienie jest zamknięte na jednego dostawcę dla obu slotów.

Czy nadal potrzebuję konta OpenAI po ustawieniu backend_url?

Nie. Gdy llm_provider jest ustawione na openai_compatible, żadne żądanie nie idzie do hostów OpenAI, a OPENAI_API_KEY nie jest czytane. Nadal potrzebujesz poświadczeń danych rynkowych, których używa TradingAgents (na przykład ALPHA_VANTAGE_API_KEY), niezależnych od endpointu LLM.

Czy interaktywny CLI też respektuje niestandardowy endpoint?

Tak. CLI (tradingagents, albo python -m cli.main) rozwiązuje tę samą konfigurację, a zmienne środowiskowe TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL nadpisują ją przed promptem providera, więc zaplanowane albo skonteneryzowane uruchomienia CLI nie potrzebują interaktywnego wejścia do routingu.

Ile tokenów zużywa jedna analiza TradingAgents?

Zmienia się z max_debate_rounds, liczbą analityków i tym, ile kontekstu rynkowego pochłaniają; pojedyncza analiza ticker-data zwykle ląduje w setkach tysięcy tokenów, z czego większość na slocie quick-think. Widok użycia per klucz w konsoli APIsRouter pokazuje dokładny podział per uruchomienie, co jest bardziej wiarygodne niż szacowanie.