TradingAgents を、カスタムの OpenAI 互換バックエンドで動かす。

Updated 2026-07-30

TradingAgents は openai_compatible というプロバイダーモードを標準搭載しています。backend_url を https://api.apisrouter.com/v1 に設定し、キーを1つエクスポートすれば、deep-think エージェントと quick-think エージェントの両方が1つのエンドポイントを経由するようになり、カタログのすべてのモデルを id でアドレスできます。

早わかり: 3つの設定で TradingAgents をどこにでもルーティングする。

TradingAgents はカスタムエンドポイントをネイティブにサポートしています。llm_provider を "openai_compatible" に設定し、backend_url をあなたのエンドポイントのアドレスに設定し、OPENAI_COMPATIBLE_API_KEY にそのエンドポイント用のキーをエクスポートしてください。APIsRouter ではバックエンド URL は https://api.apisrouter.com/v1 であり、カタログのすべてのモデルが、deep_think_llm と quick_think_llm の各スロットから、正確なモデル id でアドレス可能になります。 これは upstream のリポジトリでドキュメント化された設定経路であり、フォークやパッチではありません。同じ値は環境変数(TRADINGAGENTS_LLM_PROVIDER、TRADINGAGENTS_LLM_BACKEND_URL、TRADINGAGENTS_DEEP_THINK_LLM、TRADINGAGENTS_QUICK_THINK_LLM)としても渡せるため、スケジュールされたジョブや CI ランナーが Python コードに触れることなくバックエンドを切り替えられます。

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

TradingAgents が、LLM バックエンドとどう話すか。

TradingAgents(GitHub 上では TauricResearch、93K 超のスター)は、マルチエージェントのトレーディングフレームワークです。1回の分析実行は、ファンダメンタルズ・センチメント・ニュース・テクニカルをカバーするアナリストチームに展開し、続いて強気派と弱気派のリサーチャーが1回以上の討論ラウンドで論を戦わせ、トレーダーエージェントがポジションを提案し、最終決定の前にリスク管理レイヤーがそれをレビューします。 このフレームワークは、その作業を2つのモデルスロットに分割しています。deep_think_llm は推論の重いステップ、すなわちリサーチの討論、トレーダーの決定、リスクレビューを処理します。quick_think_llm はボリュームの多いステップ、すなわちデータの読み取り、ニュースの要約、アナリストレポートの起草を処理します。どちらのスロットも標準的な /v1/chat/completions リクエストを発行します。provider の設定は、それらのリクエストがどのクライアントとホストに行くかだけを決め、openai_compatible はあなたが設定した backend_url に送ります。 ネイティブには、TradingAgents は OpenAI・Anthropic・Google・DeepSeek もファーストパーティのプロバイダーとしてサポートしていますが、それぞれが独自のアカウント、独自のキー、そして実行あたり1つのプロバイダーを必要とします。openai_compatible モードはそれを1つに畳み込みます。TradingAgents は model フィールドをそのままの文字列として転送するため、backend_url の先にあるエンドポイントが複数のベンダーを提供する場合、Claude の deep-think スロットと GPT や DeepSeek の quick-think スロットを、同じ分析の中で走らせられます。この役割ごとの混在こそが、このフレームワークを単一ベンダーのエンドポイントではなくゲートウェイ経由でルーティングする実践的な理由です。

フルセットアップ: Python の設定、または環境変数。

プログラムによる経路は、DEFAULT_CONFIG をコピーし、4つのキーを上書きします。カスタムエンドポイントに対して認証するキーは OPENAI_COMPATIBLE_API_KEY から読み込まれるため、設定辞書やソースファイルには一切現れません。 環境変数の経路は、default_config.py の中の _ENV_OVERRIDES マッピングを通じて同じ値を設定し、Python API と対話型 CLI(tradingagents、あるいは python -m cli.main)の両方で機能します。backend_url はデフォルトで None であり、その場合各プロバイダーのクライアントは自身のデフォルトエンドポイントにフォールバックすることに注意してください。この上書きは、明示的に設定した場合にのみ効果を持ちます。 市場データは別の関心事です。TradingAgents は、データベンダー(例えば ALPHA_VANTAGE_API_KEY)を通じて相場とファンダメンタルズを取得しており、それらの認証情報は 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 のモデルを選ぶ。

upstream のデフォルトは、deep スロットにフロンティアモデル、quick スロットにミニモデルを組み合わせており、これは正しい形です。決定が下される場所に推論能力を、読み取りが行われる場所にボリューム能力を使う。1つのエンドポイントを通じてルーティングすることで、この組み合わせは実行間で2行の変更になるため、実践的なワークフローは、deep スロットを固定したまま、憶測ではなくバックテストの指標に基づいて quick スロットを A/B することです。

  • deep_think_llm は強気・弱気の討論、トレーダーの決定、リスクレビューを担います。実行あたりの呼び出しは少ないものの、それぞれがアナリストの文脈全体にわたって推論し、max_debate_rounds がそれを乗算します。ここが、フロンティア級の推論モデル(claude-opus-4-7、gpt-5.5)がそのトークンに見合う場所です。
  • quick_think_llm は、あらゆるアナリストのステップで発火します。ファンダメンタルズの読み取り、センチメントのスコアリング、ニュースの要約、レポートの起草です。実行のリクエストボリュームの大部分はここに集中するため、速いミドルティアのモデル(claude-sonnet-4-6、deepseek-v4-pro)が、討論の入力を劣化させることなく実行を速く保ちます。
  • 完全な開示資料や大きなニュースウィンドウをアナリストに与えるような長文脈の負荷では、quick スロットとして gemini-3.1-pro-preview をテストする価値があります。
  • バックテストはすべてを増幅させます。50銘柄×20日付のスイープは1,000回の propagate() 呼び出しであり、1回の実行では些細に見える 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

スイープ規模でのバックテスト: キー、固定、上限。

単一実行のセットアップが動いたら、失敗の表面はスイープへと移ります。複数日にわたるバックテストを再現可能でデバッグ可能に保つ3つの習慣があります。 正確なモデル id を固定してください。一部のベンダーでの裸のモデル名はローリングポインタであり、静かに新しいスナップショットに移動します。つまり月曜日に始まり金曜日に終わったバックテストは、1つのモデルを走らせていなかったかもしれません。カタログが日付付きのバリアントを列挙している場合は、その日付付きの id を設定に入れ、ランダムシードのように結果の横に設定辞書を記録してください。 実験ごとに1つのキーを使ってください。キーは無料で作れるため、スイープごとにキーをスコープすれば、利用ログはその実験のコスト台帳になります。そのスイープの実行だけにフィルタリングされたモデルごとのトークン数と支出です。2つの実験が1つのキーを共有すると、後から支出を紐付けるにはタイムスタンプを grep することになります。 並列化する前に、あなたの同時実行の上限を把握してください。propagate() は銘柄・日付ごとに同期的なので、スイープは通常プロセスにまたがってシャーディングされます。各シャードはまず quick-think スロットのリクエストレートを乗算し、討論の途中での 429 は1リクエストではなく実行全体を犠牲にします。冷たく50ワーカーを起動するのではなく、コンソールを見ながらシャード数を段階的に上げてください。プールされた上流のチャネルは上限を引き上げますが、無限にはしません。

ゲートウェイ経由で TradingAgents を使うのは誰か。

  • 銘柄×日付のスイープを実行するバックテスターで、実験あたり数百回の propagate() 呼び出しが、4つのベンダーダッシュボードより、キーごとの利用状況の可視性と単一の請求面を有用にする人。
  • モデルの組み合わせを比較する研究者。deep_think_llm を Claude・GPT・DeepSeek の id の間で入れ替えるのは、候補ごとの新しいベンダーアカウントではなく、1つのエンドポイントに対する設定編集です。
  • 役割ごとにベンダーを混ぜるチーム。討論には Claude、アナリストのボリュームには DeepSeek。ネイティブなプロバイダーモードは実行を1つのベンダーに固定しますが、マルチベンダーのエンドポイントはそうしません。
  • 特定ベンダーの請求手段にアクセスできない開発者。チャージ制でカード不要のアクセスなら、プロバイダーごとのサインアップという依存を取り除けます。
  • スケジュールされた実行や CI。環境変数だけのセットアップは、ランナーのイメージがプロバイダーごとに1つではなく1つのシークレット(OPENAI_COMPATIBLE_API_KEY)だけを必要とすることを意味します。

エンドポイントを検証し、最初の実行をデバッグする。

完全な分析を実行する前に、あなたが使う予定のモデルにエンドポイントが応答することを確認してください。あなたのキーで /v1/models に対する1行の curl が、アドレス可能なすべての 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 のようなルートパスを付加するからです。 実行は動いているのに討論フェーズで止まっているように見える場合、それはエンドポイントの問題ではなく、長い文脈にわたる推論モデルの正常なレイテンシです。debug=True を有効にしたまま、エージェントのステップがストリームするのを見てください。非常に長い deep-think のターンでの本物のタイムアウトはクライアント側の設定であり、バックエンドがリクエストを取りこぼしたと結論づける前に、それを引き上げる価値があります。 リクエストが流れ始めたら、APIsRouter コンソールがリクエストごとのモデル、トークン数、支出を表示します。これほど呼び出しの多いフレームワークにとって、これが実行のトークンが実際にどこへ行ったかを見る最も早い方法です。

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

よくある質問

TradingAgents は、1つの openai_compatible エンドポイント経由で Claude や Gemini のモデルに対応していますか?

はい。openai_compatible モードでは、フレームワークは model フィールドをそのままの文字列として、/v1/chat/completions 経由で backend_url に送ります。エンドポイントが提供する id なら何でも動作し、Claude・Gemini・DeepSeek の id も、deep-think・quick-think どちらのスロットでも有効です。

カスタムの backend_url で TradingAgents はどの API キーを使いますか?

OPENAI_COMPATIBLE_API_KEY です。openai_compatible プロバイダーはそれを環境から読み込むため、あなたの設定辞書やソースファイルにキーが一切現れません。OPENAI_API_KEY は、ネイティブな openai プロバイダーによってのみ使われます。

deep_think_llm と quick_think_llm は、同じ実行の中で異なるベンダーから選べますか?

マルチベンダーのエンドポイント経由なら、はい。両方のスロットが同じ backend_url に対してリクエストを送り、モデル文字列がリクエストごとにベンダーを決めます。ネイティブなプロバイダー(openai、anthropic、google、deepseek)では、実行は両方のスロットについて1つのベンダーに固定されます。

backend_url を設定した後も OpenAI のアカウントは必要ですか?

いいえ。llm_provider が openai_compatible に設定されていれば、どのリクエストも OpenAI のホストには行かず、OPENAI_API_KEY も読み込まれません。TradingAgents が使う市場データの認証情報(例えば ALPHA_VANTAGE_API_KEY)は依然として必要ですが、これは LLM エンドポイントとは独立しています。

対話型 CLI もカスタムエンドポイントを尊重しますか?

はい。CLI(tradingagents、あるいは python -m cli.main)は同じ設定を解決し、TRADINGAGENTS_LLM_PROVIDER / TRADINGAGENTS_LLM_BACKEND_URL の環境変数は、プロバイダーのプロンプトより先にそれを上書きするため、スケジュールされた実行やコンテナ化された CLI の実行はルーティングのために対話的な入力を必要としません。

TradingAgents の1回の分析にはどれくらいのトークンを消費しますか?

max_debate_rounds、アナリストの数、彼らが取り込む市場文脈の量によって変わります。1つの銘柄・日付の分析は、通常数十万トークンに収まり、その大部分は quick-think スロットにあります。APIsRouter コンソールのキーごとの利用状況ビューが、実行ごとの正確な内訳を示してくれ、見積もるより信頼できます。