Uruchom ai-hedge-fund na niestandardowym base URL kompatybilnym z OpenAI.
Updated 2026-07-30
ai-hedge-fund buduje swoje modele OpenAI przez ChatOpenAI z LangChain i odczytuje base URL ze zmiennej OPENAI_API_BASE. Ustaw ją na https://api.apisrouter.com/v1, wyeksportuj jeden klucz, a każdy agent-analityk w funduszu popłynie przez jeden endpoint.
Szybka odpowiedź: OPENAI_API_BASE plus jeden klucz.
Dostawca OpenAI w ai-hedge-fund jest tworzony jako ChatOpenAI(model=model_name, api_key=api_key, base_url=base_url), a ten base_url pochodzi z os.getenv("OPENAI_API_BASE") w src/llm/models.py. Nadpisanie to więc dwie linijki w .env: wskaż OPENAI_API_BASE na https://api.apisrouter.com/v1 i ustaw OPENAI_API_KEY na swój klucz bramki. Każdy model działający przez dostawcę OpenAI wysyła teraz żądania do bramki. Zwróć uwagę na dokładną nazwę zmiennej: to OPENAI_API_BASE, konwencja z ery LangChain, a nie OPENAI_BASE_URL. Wyeksportowanie złej nazwy jest po cichu ignorowane, a żądania nadal trafiają do api.openai.com, co jest najczęstszym powodem, dla którego ta konfiguracja sprawia wrażenie niedziałającej.
OPENAI_API_BASE=https://api.apisrouter.com/v1
OPENAI_API_KEY=sk-APIsRouter-...
FINANCIAL_DATASETS_API_KEY=... # market data, unrelated to the LLM endpointJak ai-hedge-fund wybiera model i dostawcę.
ai-hedge-fund (virattt na GitHubie, około 62 tys. gwiazdek) symuluje fundusz jako komitet agentów: persony analityków wzorowane na znanych inwestorach, plus agenci wyceny, sentymentu, fundamentów i analizy technicznej, które zasilają risk managera i portfolio managera produkujących finalne sygnały. Wszyscy dzielą jeden wybór modelu na uruchomienie, więc jedno uruchomienie mnoży Twoją decyzję modelową przez każdego agenta i każdy ticker. Wybór modelu ma dwie ścieżki. Interaktywnie, uruchomienie poetry run python src/main.py --ticker AAPL,MSFT,NVDA bez flagi modelu otwiera selektor questionary. W trybie skryptowym flaga --model przyjmuje nazwę modelu, ale tylko taką, która istnieje w rejestrze modeli repozytorium: find_model_by_name() wyszukuje string w src/llm/api_models.json, a każdy wpis rejestru niesie display_name, model_name i provider. Jeśli wyszukiwanie zawiedzie, CLI nie zgaduje dostawcy; wraca do interaktywnego selektora, co ma znaczenie dla automatyzacji, ponieważ nieznany identyfikator zamienia skryptowe uruchomienie w takie, które czeka na wejście z klawiatury. To pole provider decyduje o routingu. Wpisy oznaczone OpenAI idą przez ChatOpenAI i respektują OPENAI_API_BASE; wpisy oznaczone Anthropic idą przez ChatAnthropic i ANTHROPIC_API_KEY, całkowicie omijając Twój base URL. To jest kluczowy wgląd dla routingu przez bramkę: kolumna provider wybiera klienta, a więc i endpoint, niezależnie od tego, kto faktycznie stworzył model.
Pełna konfiguracja: .env plus wpis rejestru dla każdego modelu bramki.
Dla modeli, które rejestr już wymienia pod dostawcą OpenAI, samo nadpisanie .env wystarcza; string modelu jest przekazywany do endpointu bez zmian. Żeby uruchomić identyfikator Claude, DeepSeek albo Qwen przez bramkę na tym samym kluczu, dodaj wpis do src/llm/api_models.json z identyfikatorem z katalogu jako model_name i, co kluczowe, "OpenAI" jako provider. Provider wybiera klienta, więc wpis oznaczony jako OpenAI idzie przez ChatOpenAI i Twój OPENAI_API_BASE, mimo że sam model nie jest modelem OpenAI. Wpis pojawia się wtedy w interaktywnym selektorze i rozwiązuje się przez --model w skryptach. To trzyliniowa edycja JSON w Twoim klonie, nie zmiana kodu, i jest to udokumentowany kształt, którego rejestr już używa. Miej w pamięci wpisy natywne dla dostawcy jako kontrast: wybranie modelu z rejestru oznaczonego jako Anthropic będzie szukać ANTHROPIC_API_KEY i pójdzie prosto do endpointu Anthropic. Jeśli Twoim celem jest jeden klucz bramki dla wszystkiego, uruchamiaj modele przez wpisy oznaczone OpenAI, a klucze per dostawca możesz zostawić całkowicie nieustawione.
{
"display_name": "Claude Sonnet 4.6 (gateway)",
"model_name": "claude-sonnet-4-6",
"provider": "OpenAI"
},
{
"display_name": "DeepSeek V4 Pro (gateway)",
"model_name": "deepseek-v4-pro",
"provider": "OpenAI"
}Dobór modelu dla komitetu agentów.
Ponieważ rejestr czyni każdego kandydata adresowalnym za jedną flagą, uczciwa ewaluacja jest empiryczna: przepuść te same tickery i daty przez dwa albo trzy modele i porównaj sygnały oraz wydatki. Widok użycia per klucz wycenia każde przemiatanie za Ciebie, co zamienia wybór modelu z debaty w pomiar.
- Jedno uruchomienie to wiele werdyktów. Każda persona analityka rozumuje nad tymi samymi dokumentami i danymi cenowymi per ticker, więc wybór modelu mnoży się przez liczbę agentów razy liczbę tickerów. Identyfikator z czołówki rozumowania (claude-opus-4-7, gpt-5.5) podnosi jakość każdego werdyktu przy odpowiednio pomnożonym rachunku za tokeny.
- claude-sonnet-4-6 to rozsądny domyślny wybór: wystarczająco mocny, żeby rozumowanie person pozostawało spójne przy długim kontekście fundamentalnym, wyceniony pod uruchomienia rozchodzące się na kilkanaście agentów i koszyk tickerów.
- deepseek-v4-pro i qwen3.7-max warto zbenchmarkować przy szerokich przemiataniach, gdzie różnica ceny per uruchomienie kumuluje się przez każdą datę backtestu.
- Cokolwiek wybierzesz, przypnij to. Sygnały z różnych migawek ruchomego modelu nie są porównywalne w oknie backtestu; używaj dokładnych identyfikatorów i zapisuj string modelu obok wyników, jak ziarno losowości.
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.
| Model | Cena oficjalna | Nasza 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 |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
| Qwen 3.7 Max | $2.50 / $7.50 per M | $2.50 / $7.50 per M |
Tryby awarii charakterystyczne dla ai-hedge-fund.
Zła zmienna środowiskowa. To repozytorium czyta OPENAI_API_BASE. OPENAI_BASE_URL, zmienna używana przez inne narzędzia, nie jest sprawdzana, a jej ustawienie nie robi nic poza przekonaniem Cię, że nadpisanie jest zepsute. Jeśli żądania nadal trafiają do api.openai.com, sprawdź nazwę zmiennej, zanim zrobisz cokolwiek innego. --model z niezarejestrowanym identyfikatorem. find_model_by_name() zna tylko wpisy w api_models.json. Podaj identyfikator z katalogu, który nie jest zarejestrowany, a CLI wypisze komunikat not-found i wpadnie w interaktywny selektor, co w zadaniu cron albo uruchomieniu CI oznacza ciche zawieszenie, nie wyjście z błędem. Zarejestruj identyfikator najpierw; wtedy skryptowe uruchomienia rozwiążą go deterministycznie. Wpisy oznaczone providerem omijające bramkę. Wybranie modelu z rejestru, którego provider to Anthropic, Google albo DeepSeek, kieruje przez natywnego klienta i klucz tego dostawcy. Jeśli spodziewałeś się, że uruchomienie pojawi się w Twoim logu użycia bramki, a się nie pojawiło, wyjaśnieniem jest kolumna provider wybranego modelu. Błędy danych udające błędy LLM. Dane cenowe i fundamentalne pochodzą z API danych finansowych konfigurowanego przez FINANCIAL_DATASETS_API_KEY, całkowicie osobnego serwisu. Brakujący albo wyczerpany klucz danych zawodzi uruchomienie przed albo między wywołaniami LLM, a traceback może czytać się jak problem modelu. Te dwa poświadczenia zawodzą niezależnie; debuguj je niezależnie. Interaktywne prompty w automatyzacji. Nawet przy pełnej konfiguracji, zapomnienie flagi --model otwiera selektor. Dla uruchomień bez nadzoru zawsze podawaj --model z zarejestrowanym identyfikatorem.
Kto kieruje ai-hedge-fund przez bramkę.
- Osoby robiące backtesty, przemiatające tickery i zakresy dat, gdzie komitet agentów per ticker per data czyni wydatek na tokeny dominującym kosztem, a użycie per klucz naturalną księgą.
- Badacze porównujący werdykty modeli. To samo uruchomienie pod dwoma identyfikatorami modeli to zmiana flagi, a niezgodność sygnałów między modelami sama w sobie jest interesującymi danymi.
- Twórcy rozszerzający repozytorium o nowych agentów, którzy chcą jednego endpointu i jednego klucza pod dowolną liczbą dodawanych person.
- Deweloperzy, którzy chcą rozumowania Claude albo DeepSeek wewnątrz repozytorium, którego najczystsza ścieżka routingu ma kształt OpenAI, bez utrzymywania klucza dostawcy per wpis providera.
- 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 pierwsze uruchomienie.
Potwierdź, że bramka serwuje identyfikatory, które zarejestrowałeś, zanim uruchomisz przebieg; stringi model_name z rejestru muszą dokładnie zgadzać się z serwowanymi identyfikatorami. Drabinka błędów pierwszego uruchomienia: 401 oznacza, że OPENAI_API_KEY nie jest kluczem bramki w środowisku, z którym faktycznie odpalił poetry. Błąd model-not-found z bramki oznacza literówkę w model_name wpisu rejestru względem /v1/models. Uruchomienie, które zatrzymuje się, prosząc o wejście, oznacza, że string --model nie trafił w rejestr. Błąd klucza dostawcy (Anthropic, Google) oznacza, że provider wybranego wpisu to nie OpenAI. A traceback w kształcie danych, zanim pojawi się jakikolwiek output modelu, wskazuje na FINANCIAL_DATASETS_API_KEY, nie na ścieżkę LLM. Gdy uruchomienie się zakończy, konsola APIsRouter pokazuje model per żądanie, liczbę tokenów i wydatki. Uruchomienie komitetu to dziesiątki wywołań na etapach analityków, ryzyka i portfela, a widok użycia to sposób, żeby zobaczyć, ile faktycznie kosztuje jedna decyzja, zanim przeskalujesz ją do przemiatania.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" | head -50Częste pytania
Która zmienna środowiskowa ustawia niestandardowy base URL dla ai-hedge-fund?
OPENAI_API_BASE. Dostawca OpenAI w src/llm/models.py buduje ChatOpenAI z base_url=os.getenv("OPENAI_API_BASE"). OPENAI_BASE_URL nie jest czytana przez to repozytorium, więc użyj dokładnie pisowni API_BASE.
Czy ai-hedge-fund może uruchamiać modele Claude albo DeepSeek na jednym kluczu?
Tak, rejestrując identyfikator w src/llm/api_models.json z provider ustawionym na "OpenAI". Provider wybiera klienta, więc wpis oznaczony jako OpenAI idzie przez ChatOpenAI i Twój OPENAI_API_BASE, a identyfikator z katalogu jest przekazywany do bramki jako zwykły string.
Dlaczego --model wrzuca mnie w interaktywny selektor?
Wartość --model jest wyszukiwana przez find_model_by_name() względem api_models.json. Nieznane identyfikatory nie są zgadywane; CLI wypisuje komunikat not-found i otwiera selektor. Dodaj wpis rejestru dla tego identyfikatora, a skryptowe uruchomienia rozwiążą go bez pytania.
Czy nadal potrzebuję ANTHROPIC_API_KEY albo innych kluczy dostawców?
Nie dla modeli kierowanych przez bramkę. Klucze dostawców są sprawdzane tylko przez wpisy rejestru oznaczone providerem tego dostawcy. Jeśli każdy uruchamiany model jest zarejestrowany pod providerem OpenAI, klucz bramki jest jedynym poświadczeniem LLM, którego potrzebuje uruchomienie.
Czy konfiguracja danych rynkowych zmienia się, gdy zmieniam endpoint LLM?
Nie. Dane cenowe i fundamentalne płyną przez API danych finansowych konfigurowane przez FINANCIAL_DATASETS_API_KEY, niezależne od base URL LLM. Te dwa poświadczenia zawodzą w różnych fazach uruchomienia, więc debuguj je osobno.
Ile kosztuje jedno uruchomienie ai-hedge-fund?
Skaluje się przez agentów razy tickery: każda persona analityka, plus zarządzanie ryzykiem i portfelem, rozumuje per ticker. Uruchomienia pojedynczego koszyka zwykle lądują w dziesiątkach do setek tysięcy tokenów, a przemiatania backtestowe mnożą to przez siatkę dat. Widok użycia per klucz daje dokładną liczbę per uruchomienie.