FinRobot을 커스텀 OpenAI 호환 엔드포인트에서 실행하기.
Updated 2026-07-30
FinRobot은 base_url 키를 받는 AutoGen OAI_CONFIG_LIST 파일에서 LLM 자격 증명을 읽습니다. https://api.apisrouter.com/v1을 가리키는 항목 하나를 게이트웨이 키와 함께 추가하면, 예측기, 보고서 작성기, RAG 에이전트가 카탈로그의 어떤 모델 id로든 실행될 수 있습니다.
빠른 답: OAI_CONFIG_LIST의 항목 하나.
FinRobot의 설정 안내는 OAI_CONFIG_LIST_sample을 OAI_CONFIG_LIST로 이름을 바꾸고 자격 증명을 채우게 합니다. 그 파일은 표준 AutoGen config 리스트입니다: 각 항목이 model과 api_key를, 선택적으로 base_url을 받는 JSON 배열이며, 기본 제공 샘플이 이미 비기본 엔드포인트에 대해 이를 시연합니다. 여러분의 게이트웨이 키와 https://api.apisrouter.com/v1로 설정한 base_url을 가진 항목을 추가하면, 그 파일을 로드하는 모든 FinRobot 에이전트가 이를 통해 라우팅될 수 있습니다. 시간을 잡아먹는 함정 하나: 튜토리얼들은 모델 이름으로 항목을 고르는 filter_dict와 함께 autogen.config_list_from_json으로 그 파일을 로드합니다. 여러분의 새 항목이 claude-sonnet-4-6이라고 되어 있는데 필터가 여전히 샘플의 GPT id를 요구한다면, 여러분의 항목은 필터링되어 빠지고 실행은 예전 자격 증명으로 실패합니다. 추가한 모델에 맞게 filter_dict를 업데이트하거나, 테스트하는 동안은 필터를 빼세요.
[
{
"model": "claude-sonnet-4-6",
"api_key": "sk-YOUR-APISROUTER-KEY",
"base_url": "https://api.apisrouter.com/v1"
}
]FinRobot이 LLM 설정을 사용하는 방식.
FinRobot(GitHub의 AI4Finance-Foundation, 약 7.6천 스타)은 AutoGen(pyautogen 0.2.19 이상) 위에 구축된 금융 분석용 AI 에이전트 플랫폼입니다. 이곳의 에이전트는 패키징된 워크플로우입니다: 회사 뉴스와 펀더멘털을 가져와 다음 주 움직임을 예측하는 Market_Analyst 예측기, 공시자료를 주식 리서치 PDF로 바꾸는 연차보고서 작성기, 그리고 실적 발표와 SEC 공시자료에 대한 검색 증강 QA 에이전트들. 각 튜토리얼은 같은 llm_config 형태를 만듭니다: config_list가 OAI_CONFIG_LIST 파일을 읽는 autogen.config_list_from_json에서 오는 딕셔너리. 그 llm_config는 finrobot.agents.workflow의 SingleAssistant와 SingleAssistantShadow 같은 래퍼 클래스에 넘겨지며, 이들이 내부의 AutoGen 에이전트를 소유합니다. 따라서 엔드포인트 결정은 온전히 JSON 파일 안에 있습니다: AutoGen의 OpenAI 클라이언트는 선택된 항목이 가진 base_url이 무엇이든 그곳으로 /v1/chat/completions 요청을 보내고 model 필드를 그냥 문자열로 전달합니다. 그 평범한 문자열이 실질적인 이득입니다. base_url 뒤의 엔드포인트가 여러 벤더를 서빙할 때, Claude, DeepSeek, Qwen id가 FinRobot이 눈치채지 못한 채 같은 OpenAI 형태의 설정을 타고 이동하며, 분석 모델을 바꾸는 것은 한 줄짜리 JSON 편집과 그에 맞는 filter_dict가 됩니다.
전체 설정: 설정 파일, 필터, 데이터 키.
FinRobot은 자격 증명을 두 파일로 나누며, 그중 하나만 LLM과 관련이 있습니다. OAI_CONFIG_LIST는 모델 엔드포인트와 키를 담습니다. config_api_keys는 register_keys_from_json을 통해 별도로 로드되는 시장 데이터 자격 증명(FINNHUB_API_KEY, FMP_API_KEY, SEC_API_KEY, 소셜 키)을 담습니다. 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이 필터와 일치하는 항목만 반환합니다; 아무것도 일치하지 않는 필터는 빈 config 리스트에 대한 오류를 일으키고, 샘플의 남은 항목과 일치하는 필터는 자리표시자 키로 OpenAI에 요청을 보내는데, 이는 엉뚱한 호스트에서 온 401로 나타납니다. 라우팅 변경이 적용되지 않는 것 같으면 먼저 해석된 config_list를 출력해 보세요. 상대 경로가 두 번째 문제입니다. 튜토리얼은 노트북이 저장소 루트 한 단계 아래에 있기 때문에 "../OAI_CONFIG_LIST"를 로드합니다; 루트에 있는 스크립트는 대신 "OAI_CONFIG_LIST"를 원하며, AutoGen은 컨테이너에서 경로 문제를 피해가는 JSON 문자열을 담은 OAI_CONFIG_LIST 환경 변수도 받아들입니다. 주석 줄이 세 번째 문제입니다. 설정 안내는 JSON을 무효로 만들기 때문에 샘플 파일의 주석 메모를 지우라고 말합니다; 시작 시점의 JSONDecodeError는 떠도는 주석이 남아있다는 뜻입니다. 데이터 자격 증명은 독립적으로 실패합니다. 에이전트 채팅은 잘 되는데 뉴스나 펀더멘털이 비어서 돌아온다면, 그것은 엔드포인트 문제가 아니라 config_api_keys(Finnhub, FMP, SEC) 문제입니다. 그리고 별도의 FinRobot Pro equity 모듈은 config.ini를 통해 키를 설정합니다; 2026년 7월 기준 그 문서화된 설정은 openai_api_key는 다루지만 base-URL 오버라이드는 없으므로, 업스트림이 하나를 문서화할 때까지 그 모듈은 벤더 직결로 취급하세요.
어떤 사람들이 게이트웨이를 통해 FinRobot을 쓰는가.
- 커버리지 목록 전체에 걸쳐 주식 보고서를 생성하는 애널리스트. 보고서당 긴 공시자료 컨텍스트가 모델별 가격 차이를 중요하게 만들고, 엔드포인트 하나가 모델을 실행별 선택으로 만들어줍니다.
- 워치리스트에 대해 매일 예측기를 실행하는 퀀트 팀 — 빠른 미드티어 id가 워크플로우를 다시 쓰지 않고도 반복되는 청구액을 평평하게 유지합니다.
- 동일한 금융 작업에 대해 모델 계열을 비교하는 연구자. 각 후보는 벤더 계정과 SDK 교체가 아니라 설정 항목 하나입니다.
- AutoGen 기반 스택을 표준화하는 팀. FinRobot은 다른 AutoGen 프로젝트와 OAI_CONFIG_LIST 관례를 공유하므로, 게이트웨이 항목 형식 하나가 모두를 서빙합니다.
- 특정 벤더의 결제 수단에 접근할 수 없는 개발자. 카드 없이 충전만으로 사용할 수 있어 프로바이더별 가입 의존성이 사라집니다.
엔드포인트 검증 및 첫 실행 디버깅.
노트북을 열기 전에 여러분의 키로 접근 가능한 모델을 나열하세요; OAI_CONFIG_LIST의 모든 model 문자열과 모든 filter_dict 값은 서빙되는 id와 정확히 일치해야 합니다. 그런 다음 SingleAssistant를 통해 가장 짧은 채팅을 실행하고 콘솔을 지켜보세요. 401은 선택된 항목의 api_key가 그 base_url의 엔드포인트에 속하지 않는다는 뜻입니다; 필터가 실제로 어떤 항목을 골랐는지 확인하세요. model-not-found 오류는 항목의 id 오타입니다. 연결 오류는 보통 base_url이 /v1 접미사를 잃었다는 뜻입니다. 에이전트가 툴 결과 없이 루프를 돈다면, LLM 엔드포인트가 아니라 config_api_keys의 데이터 키가 용의자입니다. 요청이 흐르기 시작하면 APIsRouter 콘솔에서 요청별 모델, 토큰 수, 지출을 볼 수 있습니다. 보고서 작성 실행은 길고 여러 턴에 걸친 대화이며, 사용량 뷰는 쉰 개를 예약하기 전에 보고서 하나가 실제로 얼마인지 보여줍니다.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50자주 묻는 질문
FinRobot이 커스텀 OpenAI 호환 엔드포인트를 지원하나요?
네. FinRobot은 AutoGen 스타일의 OAI_CONFIG_LIST 항목을 읽으며, 항목은 model과 api_key 옆에 base_url 키를 받습니다. 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로 업데이트하거나, 테스트하는 동안은 필터 없이 파일을 로드하세요.
LLM 엔드포인트를 바꾸면 제 Finnhub, FMP, SEC 키도 바뀌나요?
아니요. 시장 데이터 자격 증명은 config_api_keys에 있으며 register_keys_from_json을 통해 로드되어, OAI_CONFIG_LIST와 완전히 분리되어 있습니다. LLM을 게이트웨이로 라우팅해도 데이터 파이프라인은 건드리지 않습니다.
이는 어떤 AutoGen 버전에 적용되나요?
FinRobot은 pyautogen 0.2.19 이상을 고정하며 0.2 스타일의 config_list_from_json 로더를 씁니다. config 항목의 base_url 키는 그 세대 전반에 표준이므로, FinRobot 코드 변경은 필요 없습니다.
FinRobot Pro equity 모듈도 base_url을 지원하나요?
문서화된 바로는 아닙니다. 2026년 7월 기준 그 config.ini는 API_KEYS 아래 openai_api_key를 노출하지만 엔드포인트 오버라이드는 없습니다. 여기서 설명한 OAI_CONFIG_LIST 라우팅은 메인 FinRobot 에이전트와 튜토리얼에 적용됩니다.