Запустите TradingAgents на кастомном OpenAI-совместимом backend.

Updated 2026-07-30

TradingAgents поставляется с режимом провайдера openai_compatible. Установите backend_url в https://api.apisrouter.com/v1, экспортируйте один ключ — и агенты deep-think, и quick-think маршрутизируются через единый эндпоинт, где каждая модель каталога адресуема по id.

Короткий ответ: три настройки направляют TradingAgents куда угодно.

TradingAgents нативно поддерживает кастомные эндпоинты. Установите llm_provider в "openai_compatible", установите backend_url в адрес вашего эндпоинта и экспортируйте OPENAI_COMPATIBLE_API_KEY с ключом для этого эндпоинта. С APIsRouter backend URL — это https://api.apisrouter.com/v1, и каждая модель в каталоге становится адресуемой из слотов deep_think_llm и quick_think_llm по своему точному id модели. Это задокументированный путь конфигурации в апстримном репозитории, а не форк или патч. Те же значения можно также задать через переменные окружения (TRADINGAGENTS_LLM_PROVIDER, TRADINGAGENTS_LLM_BACKEND_URL, TRADINGAGENTS_DEEP_THINK_LLM, TRADINGAGENTS_QUICK_THINK_LLM), так что запланированная задача или CI-раннер может переключать backend, не трогая код Python.

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

Как TradingAgents общается со своим LLM backend.

TradingAgents (TauricResearch на GitHub, 93K+ звёзд) — это мультиагентный торговый фреймворк. Один прогон анализа разворачивается по команде аналитиков, охватывающей фундаментальные показатели, настроения, новости и технику, затем bull-исследователь и bear-исследователь спорят по делу в течение одного или нескольких раундов дебатов, агент-трейдер предлагает позицию, а слой риск-менеджмента проверяет её перед финальным решением. Фреймворк разбивает эту работу на два слота модели. deep_think_llm обрабатывает шаги, тяжёлые на рассуждение: исследовательские дебаты, решение трейдера и проверку риска. quick_think_llm обрабатывает высокообъёмные шаги: чтение данных, суммаризацию новостей и составление отчётов аналитиков. Оба слота отправляют стандартные запросы /v1/chat/completions. Настройка провайдера решает только то, на какой клиент и хост уходят эти запросы, а openai_compatible отправляет их на тот backend_url, который вы настроите. Нативно TradingAgents также поддерживает OpenAI, Anthropic, Google и DeepSeek как провайдеров первого лица, но каждому нужен свой собственный аккаунт, свой собственный ключ и один провайдер на прогон. Режим openai_compatible схлопывает это: TradingAgents передаёт поле model насквозь как обычную строку, так что когда эндпоинт за backend_url обслуживает несколько вендоров, слот Claude deep-think и слот GPT или DeepSeek quick-think могут работать в одном и том же анализе. Это смешивание по ролям — практическая причина направлять фреймворк через шлюз, а не через эндпоинт одного вендора.

Полная настройка: конфиг Python или переменные окружения.

Программный путь копирует DEFAULT_CONFIG и переопределяет четыре ключа. Ключ, который аутентифицирует против кастомного эндпоинта, читается из OPENAI_COMPATIBLE_API_KEY, так что ему никогда не нужно появляться в словаре конфига или в файле исходников. Путь через переменные окружения задаёт те же значения через маппинг _ENV_OVERRIDES в default_config.py и работает как для Python API, так и для интерактивного CLI (tradingagents, либо python -m cli.main). Обратите внимание, что backend_url по умолчанию равен None, в этом случае клиент каждого провайдера откатывается на свой собственный эндпоинт по умолчанию; переопределение вступает в силу, только когда вы задаёте его явно. Рыночные данные — отдельная забота. TradingAgents тянет котировки и фундаментальные показатели через своих поставщиков данных (например, ALPHA_VANTAGE_API_KEY), и эти credentials не связаны с LLM-эндпоинтом. Смена backend_url не затрагивает пайплайн данных.

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)

Выбор моделей deep-think и quick-think.

Апстримное значение по умолчанию сочетает топовую модель в глубоком слоте с мини-моделью в быстром слоте, и это правильная форма: тратить мощность рассуждения там, где принимается решение, и объёмную мощность там, где происходит чтение. Маршрутизация через один эндпоинт превращает эту пару в изменение в две строки между прогонами, так что практический workflow — держать глубокий слот фиксированным и A/B-тестировать быстрый слот по вашим метрикам бэктеста, а не гадать.

  • deep_think_llm несёт bull/bear дебаты, решение трейдера и проверку риска. Мало вызовов на прогон, но каждый рассуждает поверх полного контекста аналитиков, а max_debate_rounds их умножает. Именно здесь топовая модель рассуждения (claude-opus-4-7, gpt-5.5) отрабатывает свои токены.
  • quick_think_llm срабатывает на каждом шаге аналитика: чтение фундаментальных показателей, оценка настроений, суммаризация новостей, составление отчётов. Большая часть объёма запросов прогона приходится сюда, так что быстрая модель среднего уровня (claude-sonnet-4-6, deepseek-v4-pro) держит прогоны быстрыми, не ухудшая входные данные для дебатов.
  • Нагрузки с длинным контекстом, вроде скармливания аналитикам полных отчётов или больших окон новостей, — это то место, где стоит протестировать gemini-3.1-pro-preview в быстром слоте.
  • Бэктесты усиливают всё. Перебор по 50 тикерам и 20 датам — это 1000 вызовов propagate(), так что выбор модели quick-think, который на одном прогоне выглядит незначительным, доминирует в счёте за токены в масштабе всего перебора.

Оплата по факту · дешевле официальных цен

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.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

Бэктестинг в масштабе перебора: ключи, закрепление версий и лимиты.

Как только настройка одного прогона работает, поверхность сбоев смещается к перебору. Три привычки делают многодневный бэктест воспроизводимым и отлаживаемым. Закрепляйте точные id моделей. Голые имена моделей у некоторых вендоров — это плавающие указатели, которые тихо переезжают на более новые снапшоты, а это значит, что бэктест, начатый в понедельник и законченный в пятницу, возможно, не прогнал одну и ту же модель. Там, где каталог перечисляет вариант с датой, кладите в конфиг именно датированный id и записывайте словарь конфига рядом с результатами, как вы бы записали случайный seed. Используйте один ключ на эксперимент. Ключи создавать бесплатно, и привязка ключа к перебору превращает лог использования в бухгалтерскую книгу стоимости эксперимента: счётчики токенов и расходы по модели, фильтруемые ровно по прогонам этого перебора. Когда два эксперимента делят ключ, отнесение расходов задним числом означает грепанье таймстампов. Знайте свой потолок параллелизма, прежде чем распараллеливать. propagate() синхронен на пару тикер-дата, так что переборы обычно шардируются по процессам. Каждый шард в первую очередь умножает частоту запросов на слоте quick-think, а 429 посреди дебатов стоит целого прогона, а не одного запроса. Наращивайте число шардов, наблюдая за консолью, а не запускайте пятьдесят воркеров с холодного старта; пулированные апстримные каналы поднимают потолок, но не делают его бесконечным.

Кто направляет TradingAgents через шлюз.

  • Бэктестеры, прогоняющие переборы тикер-по-дате. Сотни вызовов propagate() на эксперимент делают видимость использования по ключу и единую поверхность биллинга полезнее четырёх дашбордов вендоров.
  • Исследователи, сравнивающие пары моделей. Смена deep_think_llm между id Claude, GPT и DeepSeek — это правка конфига против одного эндпоинта, а не новый аккаунт вендора на каждого кандидата.
  • Команды, смешивающие вендоров по ролям. Claude для дебатов, DeepSeek для объёма аналитики. Нативный режим провайдера привязывает прогон к одному вендору; мультивендорный эндпоинт — нет.
  • Разработчики без доступа к биллингу конкретного вендора. Доступ на основе пополнения без требования карты убирает зависимость от регистрации у каждого провайдера.
  • Запланированные и CI-прогоны. Настройка только через окружение означает, что образу раннера нужен один секрет (OPENAI_COMPATIBLE_API_KEY) вместо одного на каждого провайдера.

Проверьте эндпоинт и отладьте первый прогон.

Перед запуском полного анализа убедитесь, что эндпоинт отвечает моделями, которые вы планируете использовать. Однострочный curl к /v1/models с вашим ключом перечисляет каждый адресуемый id; строки в deep_think_llm и quick_think_llm должны точно совпадать с этими id. Сбои на первом прогоне последовательны. 401 почти всегда означает, что OPENAI_COMPATIBLE_API_KEY был экспортирован в другом шелле, чем тот, что запускает tradingagents, либо не экспортирован вовсе; переменные окружения, заданные в .bashrc, не доходят до systemd-юнита или cron-задачи, если сам юнит-файл их не экспортирует. Ошибка model-not-found означает, что строка id не совпадает с каталогом: id точны, включая суффиксы версий, а вывод /v1/models выше — источник истины. Ошибка соединения при заданном backend_url обычно означает, что в URL не хватает суффикса /v1, поскольку клиент дописывает пути маршрута вроде /chat/completions к тому base, что вы дали. Если прогон работает, но, кажется, зависает на фазе дебатов, это нормальная задержка для моделей рассуждения на длинных контекстах, а не проблема эндпоинта; держите debug=True включённым, чтобы наблюдать за потоком шагов агентов. Настоящие таймауты на очень долгих ходах deep-think — это клиентская настройка, и её стоит поднять, прежде чем заключать, что backend отбросил запрос. Как только запросы начинают идти, консоль APIsRouter показывает модель на запрос, счётчики токенов и расходы, что для настолько насыщенного вызовами фреймворка — самый быстрый способ увидеть, куда именно уходят токены прогона.

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

Частые вопросы

Поддерживает ли TradingAgents модели Claude и Gemini через один эндпоинт openai_compatible?

Да. В режиме openai_compatible фреймворк отправляет поле model как обычную строку на backend_url через /v1/chat/completions. Работает любой id, который обслуживает эндпоинт, включая id Claude, Gemini и DeepSeek, в любом из слотов — deep-think или quick-think.

Какой API-ключ использует TradingAgents с кастомным backend_url?

OPENAI_COMPATIBLE_API_KEY. Провайдер openai_compatible читает его из окружения, так что ключ никогда не появляется в вашем словаре конфига или файлах исходников. OPENAI_API_KEY используется только нативным провайдером openai.

Могут ли deep_think_llm и quick_think_llm происходить от разных вендоров в одном прогоне?

Через мультивендорный эндпоинт — да: оба слота отправляют запросы на один и тот же backend_url, и строка model решает вендора для каждого запроса. С нативными провайдерами (openai, anthropic, google, deepseek) прогон привязан к одному вендору для обоих слотов.

Нужен ли мне ещё аккаунт OpenAI после того, как задан backend_url?

Нет. При llm_provider, установленном в openai_compatible, ни один запрос не идёт на хосты OpenAI, и OPENAI_API_KEY не читается. Вам всё ещё нужны credentials рыночных данных, которые использует TradingAgents (например, ALPHA_VANTAGE_API_KEY), которые не зависят от LLM-эндпоинта.

Учитывает ли интерактивный CLI кастомный эндпоинт тоже?

Да. CLI (tradingagents, либо python -m cli.main) резолвит тот же конфиг, а переменные окружения TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL переопределяют его до запроса провайдера, так что запланированные или контейнеризированные прогоны CLI не нуждаются в интерактивном вводе для маршрутизации.

Сколько токенов потребляет один анализ TradingAgents?

Это варьируется в зависимости от max_debate_rounds, числа аналитиков и того, сколько рыночного контекста они поглощают; единичный анализ тикер-дата обычно приземляется в сотнях тысяч токенов, большая часть которых — на слоте quick-think. Вид использования по ключу в консоли APIsRouter показывает точное разделение по прогону, что надёжнее прикидки.