Запустіть FinRobot на кастомному OpenAI-сумісному ендпоінті.
Updated 2026-07-30
FinRobot зчитує свої облікові дані LLM з файлу AutoGen OAI_CONFIG_LIST, чиї записи приймають ключ base_url. Додайте один запис, що вказує на https://api.apisrouter.com/v1 з ключем шлюзу, і агенти форкастера, автора звітів і RAG можуть працювати на будь-якому id моделі каталогу.
Коротка відповідь: один запис в OAI_CONFIG_LIST.
Інструкції з налаштування FinRobot пропонують перейменувати OAI_CONFIG_LIST_sample на OAI_CONFIG_LIST і заповнити облікові дані. Цей файл — стандартний конфігураційний список AutoGen: JSON-масив, де кожен запис бере model і api_key, а опційно base_url, який постачаний зразок уже демонструє для нетипових ендпоінтів. Додайте запис з вашим ключем шлюзу й base_url, встановленим на https://api.apisrouter.com/v1, і кожен агент FinRobot, що завантажує файл, може маршрутизуватися через нього. Одна пастка, що коштує людям часу: туторіали завантажують файл через autogen.config_list_from_json з filter_dict, що обирає записи за назвою моделі. Якщо ваш новий запис каже claude-sonnet-4-6, а фільтр усе ще просить id GPT зі зразка, ваш запис відфільтровується, і прогін провалюється на старих обліках даних. Оновіть filter_dict, щоб він збігався з доданою моделлю, або приберіть фільтр під час тестування.
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]Як FinRobot використовує свою конфігурацію LLM.
FinRobot (AI4Finance-Foundation на GitHub, приблизно 7.6 тис. зірок) — платформа AI-агентів для фінансового аналізу, побудована на AutoGen (pyautogen 0.2.19 чи новіше). Її агенти — упаковані робочі процеси: форкастер Market_Analyst, що отримує корпоративні новини й фундаментали й прогнозує рух наступного тижня, автор річного звіту, що перетворює звітності на PDF дослідження акцій, і агенти пошуку з доповненням (RAG QA) над дзвінками про прибутки й звітностями SEC. Кожен туторіал будує ту саму форму llm_config: словник, чий config_list походить з autogen.config_list_from_json, що зчитує файл OAI_CONFIG_LIST. Цей llm_config передається класам-обгорткам на кшталт SingleAssistant і SingleAssistantShadow з finrobot.agents.workflow, які володіють базовими агентами AutoGen. Рішення про ендпоінт тому живе цілком у JSON-файлі: OpenAI-клієнт AutoGen надсилає запити /v1/chat/completions на будь-який base_url, який несе обраний запис, і пересилає поле model як звичайний рядок. Цей звичайний рядок — практична перевага. Коли ендпоінт за base_url обслуговує кількох постачальників, id Claude, DeepSeek чи Qwen проходить крізь ту саму конфігурацію у формі OpenAI без того, щоб FinRobot це помітив, а заміна моделі аналізу стає редагуванням JSON в один рядок плюс відповідний filter_dict.
Повне налаштування: файл конфігурації, фільтр і ключі даних.
FinRobot розділяє облікові дані на два файли, і лише один з них стосується LLM. OAI_CONFIG_LIST тримає ендпоінти й ключі моделей. config_api_keys тримає облікові дані ринкових даних (FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY і соціальні ключі), що завантажуються окремо через register_keys_from_json. Маршрутизація LLM через шлюз змінює перший файл і лишає другий незмінним, тож отримання новин, фундаменталів і звітностей поводяться точно так само, як і раніше. Патерн туторіалу нижче — структура ноутбука форкастера з обраним записом шлюзу. Той самий llm_config працює для туторіалів річного звіту й RAG, які відрізняються лише тим, який клас робочого процесу вони інстанціюють.
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.")Вибір моделей для кожного робочого процесу FinRobot.
Чистий цикл експерименту: зафіксуйте тікер і діапазон дат, проженіть той самий робочий процес раз на кожен запис-кандидат і порівняйте виводи поруч. За одним ендпоінтом кожен кандидат — редагування filter_dict, а лог використання за ключем дає вам рахунок токенів на кандидата без роботи в таблицях.
- Автор річного звіту — найважча робота міркування: він читає розділи звітності, синтезує інвестиційну тезу й складає структурований звіт. claude-opus-4-7 чи gpt-5.5 у цьому робочому процесі — те, де якість виводу видимо змінюється.
- Ринковий форкастер — коротше, повторюване завдання над новинами й фундаменталами. claude-sonnet-4-6 чи deepseek-v4-pro справляється добре, і це має значення, коли ви прогонюєте його по списку спостереження щодня.
- RAG QA над дзвінками про прибутки — це пошук плюс синтез над довгими витягами, що сприяє id з довгим контекстом; gemini-3.1-pro-preview варто протестувати проти claude-sonnet-4-6 там.
- Оскільки записи обираються через filter_dict, ви можете тримати один файл з фронтирним записом і швидким записом проти того самого base_url і обирати по ноутбуку, а не редагувати облікові дані на кожен прогін.
- Id моделей — точні рядки. FinRobot пересилає їх без валідації, тож лістинг /v1/models ендпоінта — авторитетне написання.
Оплата за фактом · нижче офіційних цін
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Модель | Офіційна ціна | Наша ціна |
|---|---|---|
| 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 |
Збої, специфічні саме для FinRobot.
Невідповідність filter_dict — головна проблема. config_list_from_json повертає лише записи, чий model збігається з фільтром; фільтр, що не збігається ні з чим, кидає помилку про порожній список конфігурації, а фільтр, що збігається з залишками зразка, надсилає запити на OpenAI з ключами-заглушками, що проявляється як 401 не з того хоста. Коли зміни маршрутизації, здається, не набувають чинності, спершу виведіть резолвлений config_list. Відносні шляхи — друга проблема. Туторіали завантажують "../OAI_CONFIG_LIST", бо ноутбуки сидять на рівень нижче кореня репозиторію; скрипт у корені хоче "OAI_CONFIG_LIST" натомість, а AutoGen також приймає змінну середовища OAI_CONFIG_LIST, що несе JSON-рядок, що обходить проблеми шляхів у контейнерах. Рядки-коментарі — третя. Інструкції з налаштування кажуть прибрати нотатки-коментарі зі зразкових файлів, бо вони роблять JSON невалідним; JSONDecodeError при старті означає, що завис випадковий коментар. Облікові дані даних падають незалежно. Якщо агент спілкується нормально, але новини чи фундаментали повертаються порожніми, це проблема config_api_keys (Finnhub, FMP, SEC), а не проблема ендпоінта. А окремий модуль FinRobot Pro для акцій налаштовує свої ключі через config.ini натомість; станом на липень 2026 його задокументовані налаштування покривають openai_api_key, але без перевизначення base URL, тож вважайте цей модуль прямим до постачальника, доки апстрим не задокументує таке.
Хто спрямовує FinRobot через шлюз.
- Аналітики, що генерують звіти про акції по списку покриття. Довгі контексти звітностей на звіт роблять різниці в ціні між моделями суттєвими, а один ендпоінт робить модель вибором на прогін.
- Квант-команди, що щодня прогонюють форкастер по списку спостереження, де вибір швидкого id середнього рівня тримає регулярний рахунок плоским без переписування робочого процесу.
- Дослідники, що порівнюють родини моделей на ідентичних фінансових задачах. Кожен кандидат — один запис конфігурації, а не обліковий запис постачальника й заміна SDK.
- Команди, що стандартизують стеки на AutoGen. FinRobot ділить конвенцію OAI_CONFIG_LIST з іншими проєктами на AutoGen, тож один формат запису шлюзу обслуговує їх усі.
- Розробники без доступу до білінгу певного постачальника. Доступ на основі поповнення без вимоги картки прибирає залежність від реєстрації в кожного провайдера.
Перевірте ендпоінт і налагодьте перший прогін.
Перелічіть моделі, доступні вашому ключу, перш ніж відкривати ноутбук; кожен рядок model в OAI_CONFIG_LIST і кожне значення filter_dict має точно збігатися з обслуговуваним id. Потім проженіть найкоротший можливий чат через SingleAssistant і спостерігайте за консоллю. 401 означає, що api_key обраного запису не належить ендпоінту в його base_url; перевірте, який запис насправді обрав фільтр. Помилка model-not-found — одруківка в id запису. Помилка з'єднання зазвичай означає, що base_url втратив суфікс /v1. Якщо агент зациклюється без результатів інструментів, підозрювані — ключі даних у config_api_keys, а не ендпоінт LLM. Щойно запити потечуть, консоль APIsRouter показує модель на запит, кількість токенів і витрати. Прогони написання звітів — це довгі багатоходові розмови, і вигляд використання показує, скільки насправді коштує один звіт, перш ніж ви заплануєте п'ятдесят таких.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Поширені запитання
Чи підтримує FinRobot кастомний OpenAI-сумісний ендпоінт?
Так. FinRobot зчитує записи OAI_CONFIG_LIST у стилі AutoGen, а записи приймають ключ base_url поряд з model і api_key. Спрямуйте base_url на шлюз, тримайте filter_dict у відповідності до model запису, і агенти маршрутизуються через нього.
Чи можуть агенти FinRobot працювати на моделях Claude, DeepSeek чи Qwen?
Так. AutoGen пересилає поле model як звичайний рядок через /v1/chat/completions, тож працює будь-який id, обслуговуваний ендпоінтом. Назва моделі в записі й у filter_dict просто мають точно збігатися з id каталогу.
Чому FinRobot ігнорує мій новий запис OAI_CONFIG_LIST?
Майже завжди filter_dict. Туторіали фільтрують записи за назвою моделі, тож запис, чий model не збігається з фільтром, тихо виключається. Оновіть filter_dict до вашого нового id моделі або завантажте файл без фільтра під час тестування.
Чи змінюються мої ключі Finnhub, FMP і SEC, коли я змінюю ендпоінт LLM?
Ні. Облікові дані ринкових даних живуть у config_api_keys і завантажуються через register_keys_from_json, повністю окремо від OAI_CONFIG_LIST. Маршрутизація LLM через шлюз не торкається конвеєра даних.
До якої версії AutoGen це застосовне?
FinRobot закріплює pyautogen 0.2.19 чи новіше й використовує завантажувач config_list_from_json у стилі 0.2. Ключ base_url у записах конфігурації стандартний для того покоління, тож жодних змін коду FinRobot не потрібно.
Чи поважає модуль FinRobot Pro для акцій base_url теж?
Не як задокументовано. Його config.ini відкриває openai_api_key під API_KEYS, але жодного перевизначення ендпоінта станом на липень 2026. Маршрутизація OAI_CONFIG_LIST, описана тут, застосовна до основних агентів і туторіалів FinRobot.