TradingAgents를 커스텀 OpenAI 호환 백엔드에서 실행하기.
Updated 2026-07-30
TradingAgents는 openai_compatible 프로바이더 모드를 기본 제공합니다. backend_url을 https://api.apisrouter.com/v1로 설정하고 키 하나를 export하면, deep-think와 quick-think 에이전트 모두가 엔드포인트 하나를 통해 라우팅되며 카탈로그의 모든 모델이 id로 주소 지정 가능합니다.
빠른 답: 세 설정으로 TradingAgents를 어디로든.
TradingAgents는 커스텀 엔드포인트를 기본 지원합니다. llm_provider를 "openai_compatible"로 설정하고, backend_url을 여러분의 엔드포인트 주소로 설정하고, 그 엔드포인트를 위한 키로 OPENAI_COMPATIBLE_API_KEY를 export하세요. APIsRouter를 쓰면 backend URL은 https://api.apisrouter.com/v1이며, 카탈로그의 모든 모델이 deep_think_llm과 quick_think_llm 슬롯에서 정확한 model id로 주소 지정 가능해집니다. 이는 업스트림 저장소에 문서화된 설정 경로이지 포크나 패치가 아닙니다. 같은 값을 환경 변수(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, 9.3만+ 스타)는 멀티 에이전트 트레이딩 프레임워크입니다. 분석 실행 하나가 펀더멘털, 센티먼트, 뉴스, 기술적 분석을 다루는 애널리스트 팀 전반으로 퍼져나간 다음, 강세론자와 약세론자가 하나 이상의 토론 라운드에 걸쳐 논쟁을 벌이고, 트레이더 에이전트가 포지션을 제안하며, 리스크 관리 레이어가 최종 결정 전에 이를 검토합니다. 이 프레임워크는 그 작업을 두 개의 모델 슬롯으로 나눕니다. 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에서 읽히므로, config 딕셔너리나 소스 파일에는 절대 나타나지 않습니다. 환경 변수 경로는 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 모델 선택하기.
업스트림 기본값은 deep 슬롯의 프론티어 모델과 quick 슬롯의 미니 모델을 짝짓는데, 이는 올바른 형태입니다: 결정이 내려지는 곳에는 추론 능력을, 읽는 작업이 이뤄지는 곳에는 물량 능력을. 엔드포인트 하나를 통해 라우팅하면 이 짝짓기가 실행 간 두 줄짜리 변경이 되므로, 실용적인 워크플로우는 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() 호출이므로, 한 번의 실행에서는 미미해 보이는 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를 설정에 넣고, 랜덤 시드처럼 config 딕셔너리를 결과 옆에 기록하세요. 실험당 키 하나를 쓰세요. 키는 무료로 만들 수 있으며, 키를 스윕 하나로 범위를 좁히면 사용량 로그가 그 실험의 비용 장부가 됩니다: 그 스윕에 정확히 필터링된, 모델별 토큰 수와 지출. 두 실험이 키를 공유하면, 나중에 지출을 귀속시키는 것은 타임스탬프를 grep하는 일이 됩니다. 병렬화하기 전에 동시성 한도를 아세요. propagate()는 티커-날짜당 동기식이므로, 스윕은 보통 프로세스별로 샤딩됩니다. 각 샤드는 quick-think 슬롯에서 먼저 요청 속도를 곱하며, 토론 도중의 429는 요청 하나가 아니라 실행 전체를 대가로 치릅니다. 차갑게 쉰 개의 워커를 띄우기보다 콘솔을 지켜보며 샤드 수를 점진적으로 올리세요; 풀링된 업스트림 채널은 한도를 올려주지만 무한으로 만들어 주지는 않습니다.
어떤 사람들이 게이트웨이를 통해 TradingAgents를 쓰는가.
- 티커-날짜 스윕을 실행하는 백테스터. 실험당 수백 번의 propagate() 호출이 벤더 대시보드 네 개보다 키별 사용량 가시성과 단일 청구 표면을 더 유용하게 만듭니다.
- 모델 조합을 비교하는 연구자. Claude, GPT, DeepSeek id 사이에서 deep_think_llm을 바꾸는 것은 후보마다 새 벤더 계정이 아니라 엔드포인트 하나에 대한 설정 편집입니다.
- 역할별로 벤더를 섞는 팀. 토론에는 Claude를, 애널리스트 물량에는 DeepSeek를. 네이티브 프로바이더 모드는 실행을 벤더 하나에 고정하지만, 멀티벤더 엔드포인트는 그렇지 않습니다.
- 특정 벤더의 결제 수단에 접근할 수 없는 개발자. 카드 없이 충전만으로 사용할 수 있어 프로바이더별 가입 의존성이 사라집니다.
- 예약 및 CI 실행. 환경 전용 설정은 러너 이미지가 프로바이더당 하나가 아니라 시크릿 하나(OPENAI_COMPATIBLE_API_KEY)만 필요하다는 뜻입니다.
엔드포인트 검증 및 첫 실행 디버깅.
전체 분석을 실행하기 전에, 엔드포인트가 여러분이 쓰려는 모델로 응답하는지 확인하세요. 여러분의 키로 /v1/models에 대해 한 줄 curl을 실행하면 주소 지정 가능한 모든 id가 나열됩니다; deep_think_llm과 quick_think_llm의 문자열은 그 id들과 정확히 일치해야 합니다. 첫 실행에서의 실패 패턴은 일관됩니다. 401은 거의 항상 OPENAI_COMPATIBLE_API_KEY가 tradingagents를 실행한 셸과 다른 셸에서 export되었거나, 아예 export되지 않았다는 뜻입니다; .bashrc에 설정된 환경 변수는 systemd 유닛이나 cron 작업에 그 유닛 파일 자체가 export하지 않는 한 도달하지 않습니다. model-not-found 오류는 id 문자열이 카탈로그와 일치하지 않는다는 뜻입니다: id는 버전 접미사까지 정확해야 하며, 위의 /v1/models 출력이 진실의 원천입니다. backend_url이 설정된 상태의 연결 오류는 보통 URL에 /v1 접미사가 빠졌다는 뜻입니다, 클라이언트가 여러분이 준 base에 /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가 openai_compatible 엔드포인트 하나로 Claude와 Gemini 모델을 지원하나요?
네. openai_compatible 모드에서 프레임워크는 model 필드를 /v1/chat/completions를 통해 backend_url로 그냥 문자열로 보냅니다. 엔드포인트가 서빙하는 어떤 id든 작동하며, Claude, Gemini, DeepSeek id도 deep-think나 quick-think 슬롯 어디서든 포함됩니다.
TradingAgents가 커스텀 backend_url과 함께 어떤 API 키를 쓰나요?
OPENAI_COMPATIBLE_API_KEY입니다. openai_compatible 프로바이더는 이를 환경에서 읽으므로, 키는 여러분의 config 딕셔너리나 소스 파일에 절대 나타나지 않습니다. OPENAI_API_KEY는 네이티브 openai 프로바이더에서만 쓰입니다.
deep_think_llm과 quick_think_llm이 같은 실행에서 다른 벤더에서 올 수 있나요?
멀티벤더 엔드포인트를 통하면 네: 두 슬롯 모두 같은 backend_url에 요청을 보내며 모델 문자열이 요청마다 벤더를 결정합니다. 네이티브 프로바이더(openai, anthropic, google, deepseek)에서는 실행이 두 슬롯 모두에 대해 벤더 하나에 고정됩니다.
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 분석 한 번에 토큰이 몇 개나 드나요?
max_debate_rounds, 애널리스트 수, 그들이 얼마나 많은 시장 컨텍스트를 섭취하는지에 따라 달라집니다; 단일 티커-날짜 분석은 보통 수십만 토큰이며, 그 대부분이 quick-think 슬롯에 있습니다. APIsRouter 콘솔의 키별 사용량 뷰가 실행당 정확한 분할을 보여주며, 이는 추정보다 신뢰할 만합니다.