Uruchom FinRobot na niestandardowym endpoincie kompatybilnym z OpenAI.
Updated 2026-07-30
FinRobot czyta swoje poświadczenia LLM z pliku AutoGen OAI_CONFIG_LIST, którego wpisy przyjmują klucz base_url. Dodaj jeden wpis wskazujący na https://api.apisrouter.com/v1 z kluczem bramki, a agenci forecastera, autora raportów i RAG mogą działać na dowolnym identyfikatorze modelu z katalogu.
Szybka odpowiedź: jeden wpis w OAI_CONFIG_LIST.
Instrukcje konfiguracji FinRobot każą Ci zmienić nazwę OAI_CONFIG_LIST_sample na OAI_CONFIG_LIST i wypełnić poświadczenia. Ten plik to standardowa lista konfiguracji AutoGen: tablica JSON, gdzie każdy wpis przyjmuje model i api_key, oraz opcjonalnie base_url, co dostarczana próbka już demonstruje dla nienajstandardowych endpointów. Dodaj wpis ze swoim kluczem bramki i base_url ustawionym na https://api.apisrouter.com/v1, a każdy agent FinRobot, który ładuje ten plik, może przez niego kierować. Jeden haczyk, który kosztuje ludzi czas: tutoriale ładują plik przez autogen.config_list_from_json z filter_dict, który wybiera wpisy po nazwie modelu. Jeśli Twój nowy wpis mówi claude-sonnet-4-6, ale filtr wciąż prosi o identyfikator GPT z próbki, Twój wpis zostaje odfiltrowany, a uruchomienie zawodzi na starych poświadczeniach. Zaktualizuj filter_dict, żeby pasował do dodanego modelu, albo usuń filtr podczas testowania.
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]Jak FinRobot używa swojej konfiguracji LLM.
FinRobot (AI4Finance-Foundation na GitHubie, około 7,6 tys. gwiazdek) to platforma agentów AI do analizy finansowej zbudowana na AutoGen (pyautogen 0.2.19 albo nowszy). Jej agenci to zapakowane workflow: forecaster Market_Analyst, który pobiera newsy i fundamenty spółki i przewiduje ruch na przyszły tydzień, autor raportu rocznego, który zamienia dokumenty w PDF z analizą spółki, i agenci QA wspomagani retrievalem na telekonferencjach wynikowych i dokumentach SEC. Każdy tutorial buduje ten sam kształt llm_config: słownik, którego config_list pochodzi z autogen.config_list_from_json czytającego plik OAI_CONFIG_LIST. Ten llm_config jest przekazywany do klas opakowujących jak SingleAssistant i SingleAssistantShadow z finrobot.agents.workflow, które posiadają leżące pod spodem agenty AutoGen. Decyzja o endpoincie żyje więc całkowicie w pliku JSON: klient OpenAI AutoGen wysyła żądania /v1/chat/completions do dowolnego base_url niesionego przez wybrany wpis i przekazuje pole model jako zwykły string. Ten zwykły string to praktyczna wygrana. Gdy endpoint za base_url serwuje wielu dostawców, identyfikator Claude, DeepSeek albo Qwen jeździ przez tę samą konfigurację w kształcie OpenAI, bez zauważenia przez FinRobot, a zamiana modelu analizy staje się jednoliniową edycją JSON plus dopasowanym filter_dict.
Pełna konfiguracja: plik konfiguracji, filtr i klucze danych.
FinRobot dzieli poświadczenia na dwa pliki, i tylko jeden z nich dotyczy LLM. OAI_CONFIG_LIST trzyma endpointy i klucze modeli. config_api_keys trzyma poświadczenia danych rynkowych (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY i klucze społecznościowe), ładowane osobno przez register_keys_from_json. Kierowanie LLM przez bramkę zmienia pierwszy plik i zostawia drugi w spokoju, więc pobrania newsów, fundamenty i dokumenty zachowują się dokładnie tak samo jak wcześniej. Wzorzec tutoriala poniżej to struktura notebooka forecastera z wybranym wpisem bramki. Ten sam llm_config działa dla tutoriali raportu rocznego i RAG, które różnią się tylko tym, którą klasę workflow instancjonują.
import autogen
from finrobot.utils import register_keys_from_json
from finrobot.agents.workflow import SingleAssistant
llm_config = {
"config_list": autogen.config_list_from_json(
"../OAI_CONFIG_LIST",
filter_dict={"model": ["claude-sonnet-4-6"]}, # match your entry
),
"timeout": 120,
"temperature": 0,
}
register_keys_from_json("../config_api_keys") # finnhub/fmp/sec data keys
assistant = SingleAssistant("Market_Analyst", llm_config,
human_input_mode="NEVER")
assistant.chat("Analyze NVDA news this week and predict next week's movement.")Dobór modeli per workflow FinRobot.
Czysta pętla eksperymentu: ustal ticker i zakres dat, uruchom ten sam workflow raz na kandydacki wpis i porównaj wyniki obok siebie. Za jednym endpointem każdy kandydat to edycja filter_dict, a log użycia per klucz daje Ci rachunek tokenów per kandydat bez pracy w arkuszu kalkulacyjnym.
- Autor raportu rocznego to najcięższe zadanie rozumowania: czyta sekcje dokumentów, syntetyzuje tezę inwestycyjną i pisze szkic ustrukturyzowanego raportu. claude-opus-4-7 albo gpt-5.5 w tym workflow to miejsce, gdzie jakość wyniku widocznie się zmienia.
- Forecaster rynkowy to krótsze, powtarzane zadanie na newsach i fundamentach. claude-sonnet-4-6 albo deepseek-v4-pro obsługuje je dobrze, i ma znaczenie, gdy uruchamiasz je codziennie na liście obserwowanych.
- RAG QA na telekonferencjach wynikowych to retrieval plus synteza na długich fragmentach, co faworyzuje identyfikatory z długim kontekstem; warto tam przetestować gemini-3.1-pro-preview względem claude-sonnet-4-6.
- Ponieważ wpisy są wybierane przez filter_dict, możesz trzymać jeden plik z wpisem z czołówki i szybkim wpisem na tym samym base_url i wybierać per notebook, zamiast edytować poświadczenia per uruchomienie.
- Identyfikatory modeli to dokładne stringi. FinRobot przekazuje je bez walidacji, więc listing /v1/models endpointu jest autorytatywną pisownią.
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.4 | $2.50 / $15.00 per M | $2.00 / $12.00 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
| Gemini 3.1 Pro Preview | $2.00 / $12.00 per M | $1.60 / $9.60 per M |
Tryby awarii charakterystyczne dla FinRobot.
Niezgodność filter_dict to ta duża. config_list_from_json zwraca tylko wpisy, których model pasuje do filtra; filtr, który niczego nie dopasowuje, zgłasza błąd o pustej liście konfiguracji, a filtr, który dopasowuje pozostałe wpisy z próbki, wysyła żądania do OpenAI z placeholderowymi kluczami, co objawia się jako 401 ze złego hosta. Gdy zmiany routingu wydają się nie działać, wypisz najpierw rozwiązaną config_list. Ścieżki względne to ta druga. Tutoriale ładują "../OAI_CONFIG_LIST", bo notebooki siedzą jeden poziom poniżej korzenia repozytorium; skrypt w korzeniu chce zamiast tego "OAI_CONFIG_LIST", a AutoGen akceptuje też zmienną środowiskową OAI_CONFIG_LIST niosącą string JSON, co omija problemy ze ścieżkami w kontenerach. Linie komentarzy to ta trzecia. Instrukcje konfiguracji każą Ci usunąć notatki-komentarze z plików próbki, bo czynią JSON nieważnym; JSONDecodeError przy starcie oznacza, że przetrwał zabłąkany komentarz. Poświadczenia danych zawodzą niezależnie. Jeśli agent rozmawia dobrze, ale newsy albo fundamenty wracają puste, to problem config_api_keys (Finnhub, FMP, SEC), nie problem endpointu. A osobny moduł FinRobot Pro Equity konfiguruje swoje klucze zamiast tego przez config.ini; na lipiec 2026 jego udokumentowane ustawienia obejmują openai_api_key, ale żadnego nadpisania base URL, więc traktuj ten moduł jako bezpośredni do dostawcy, dopóki upstream go nie udokumentuje.
Kto kieruje FinRobot przez bramkę.
- Analitycy generujący raporty spółek na liście pokrycia. Długie konteksty dokumentów per raport czynią różnice cen per model istotnymi, a jeden endpoint czyni model wyborem per uruchomienie.
- Zespoły kwantowe uruchamiające forecaster codziennie na liście obserwowanych, gdzie szybki identyfikator ze średniego tieru utrzymuje powtarzający się rachunek na płaskim poziomie bez przepisywania workflow.
- Badacze porównujący rodziny modeli na identycznych zadaniach finansowych. Każdy kandydat to jeden wpis konfiguracji, nie konto dostawcy i wymiana SDK.
- Zespoły standaryzujące stosy oparte na AutoGen. FinRobot dzieli konwencję OAI_CONFIG_LIST z innymi projektami AutoGen, więc jeden format wpisu bramki obsługuje je wszystkie.
- 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.
Wylistuj modele, do których Twój klucz ma dostęp, zanim otworzysz notebook; każdy string modelu w OAI_CONFIG_LIST i każda wartość filter_dict musi dokładnie zgadzać się z serwowanym identyfikatorem. Potem uruchom najkrótszy możliwy czat przez SingleAssistant i obserwuj konsolę. 401 oznacza, że api_key wybranego wpisu nie należy do endpointu w jego base_url; sprawdź, który wpis faktycznie wybrał filtr. Błąd model-not-found to literówka w identyfikatorze wpisu. Błąd połączenia zwykle oznacza, że base_url zgubił sufiks /v1. Jeśli agent zapętla się bez wyników narzędzi, podejrzanymi są klucze danych w config_api_keys, nie endpoint LLM. Gdy żądania już płyną, konsola APIsRouter pokazuje model per żądanie, liczbę tokenów i wydatki. Uruchomienia pisania raportów to długie, wieloturowe rozmowy, a widok użycia pokazuje, ile faktycznie kosztuje jeden raport, zanim zaplanujesz pięćdziesiąt z nich.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Częste pytania
Czy FinRobot wspiera niestandardowy endpoint kompatybilny z OpenAI?
Tak. FinRobot czyta wpisy OAI_CONFIG_LIST w stylu AutoGen, a wpisy przyjmują klucz base_url obok model i api_key. Wskaż base_url na bramkę, utrzymuj swój filter_dict pasujący do modelu wpisu, a agenci przez nią kierują.
Czy agenci FinRobot mogą działać na modelach Claude, DeepSeek albo Qwen?
Tak. AutoGen przekazuje pole model jako zwykły string przez /v1/chat/completions, więc działa dowolny identyfikator serwowany przez endpoint. Nazwa modelu we wpisie i w filter_dict musi tylko dokładnie zgadzać się z identyfikatorem z katalogu.
Dlaczego FinRobot ignoruje mój nowy wpis OAI_CONFIG_LIST?
Prawie zawsze filter_dict. Tutoriale filtrują wpisy po nazwie modelu, więc wpis, którego model nie pasuje do filtra, jest po cichu wykluczany. Zaktualizuj filter_dict na swój nowy identyfikator modelu, albo ładuj plik bez filtra podczas testowania.
Czy moje klucze Finnhub, FMP i SEC zmieniają się, gdy zmieniam endpoint LLM?
Nie. Poświadczenia danych rynkowych żyją w config_api_keys i ładują się przez register_keys_from_json, całkowicie osobno od OAI_CONFIG_LIST. Kierowanie LLM przez bramkę nie dotyka pipeline'u danych.
Której wersji AutoGen to dotyczy?
FinRobot przypina pyautogen 0.2.19 albo nowszy i używa loadera config_list_from_json w stylu 0.2. Klucz base_url we wpisach konfiguracji jest standardowy w całej tej generacji, więc żadne zmiany w kodzie FinRobot nie są potrzebne.
Czy moduł FinRobot Pro Equity też respektuje base_url?
Nie w udokumentowany sposób. Jego config.ini eksponuje openai_api_key pod API_KEYS, ale żadnego nadpisania endpointu na lipiec 2026. Routing OAI_CONFIG_LIST opisany tutaj dotyczy głównych agentów i tutoriali FinRobot.