TM Taeyang Moon
Demo · 아키텍처 해설

AI 투자위원회 — 멀티 에이전트 + RAG 투자분석

4명의 전문가 에이전트가 2라운드 토론 → 의장이 투표·합의도로 종합

Azure OpenAI gpt-5.4(키리스)멀티 에이전트함수 호출(환각 차단)RAGStatic Web Apps실데이터(SEC·FRED·DART·ECOS)
🔗
라이브 사이트delightful-river-07873f100.7.azurestaticapps.net/
사이트 열기 →

이 문서는 여러 AI 에이전트가 토론해 종목을 분석하는 데모(AI 투자위원회) 를 하나의 Azure 아키텍처 사례로 보고, 어떤 서비스로 어떻게 구성했는지, 왜 그렇게 설계했는지를 직접 구축하려는 엔지니어 관점에서 설명합니다. (기준일: 2026-06-15, 리전: SWA = East Asia, Azure OpenAI = Korea Central)

⚠️ 면책: 본 데모의 모든 출력은 "AI 에이전트의 가상 의견 · 데모용 · 투자자문 아님"입니다. 실제 매매 권유·수익 보장이 아니며, 데이터는 기준일 캐시입니다.


한눈에 보기

AI 투자위원회는 "종목 입력 → 5명의 전문가 에이전트가 2라운드 토론 → 의장이 종합 판정(투표·합의도)" 까지를 보여주는 멀티 에이전트 분석 데모입니다. 핵심 키워드는 멀티 에이전트 토론 · 함수 호출 기반 환각 차단 · 키리스 보안 · 실데이터(시세+정성) + 출처 정직성입니다.


아키텍처

  [현재 — 라이브 입력형 데모: 사용자가 종목을 넣으면 즉석 분석]

  인터넷 ──HTTPS──▶  Azure Static Web Apps (Free, East Asia)
                      ai-invest-committee-web
                      - 단일 index.html (입력창 + 예시칩 + 한/영 토글)
                      - 종목 입력 → 백엔드 /api/analyze 호출 → 토론 타임라인 렌더
                              │  fetch(JSON)
                              ▼
                   Azure Container Apps (FastAPI, Korea Central)
                      aic-committee-api  (api/server.py, ingress 8000)
                      - GET /api/analyze?ticker=&lang=  → 라이브 스냅샷 + 토론
                      - minReplicas 0 (scale-to-zero), 시스템 관리 ID
                              │
                 ┌────────────┴─────────────────────────────┐
                 ▼                                           ▼
        app/live_data.py (실시간 시세 수집)          app/llm.py (gpt-5.4 토론)
          - KR: 네이버 금융(비공식) 시세·지표           DefaultAzureCredential(키리스 AAD)
          - US: Yahoo chart(키불필요) + AlphaVantage     foundry-uzrz5ojtsjvae · gpt-5.4
          - 매크로: FRED · 한국은행 ECOS                 4역할 × (R1 의견→R2 반박→의장 종합)
                 │  결정적 수치만 반환                          │  function calling
                 └──────────────▶ app/tools.py ◀──────────────┘
                          (수치 단일 진실 소스 = 환각 차단 지점)
  [목표 — Azure 네이티브(다음 로드맵, 일부 preview)]

   Static Web Apps ──▶ Foundry Connected Agents (오케스트레이션)
                          ├─ 5개 에이전트 = Foundry 프롬프트/도구 에이전트
                          ├─ search_filings → Azure AI Search (agentic retrieval, 진짜 RAG)
                          └─ 응답 근거성 검증 → Content Safety Groundedness(preview)
                       인증: 전부 Managed Identity(키리스)

구성 서비스와 역할

서비스 역할 중요 포인트
Azure Static Web Apps (Free) 공개 프론트엔드 호스팅 입력창 단일 페이지. 종목 입력 시 백엔드 /api/analyze 호출 → 운영 비용 $0
Azure Container Apps (FastAPI) 라이브 분석 백엔드 aic-committee-api 실시간 시세 수집 + gpt-5.4 토론을 즉석 수행. minReplicas 0(scale-to-zero)로 idle 비용 최소. 시스템 관리 ID(키리스)
Azure OpenAI / Foundry — gpt-5.4 5개 역할 에이전트 추론 키리스(AAD 토큰). reasoning 모델이라 max_completion_tokens 사용·예산 넉넉히
함수 호출(tools.py) 수치·공시의 단일 진실 소스 에이전트가 직접 조회 → 숫자를 지어내지 않음(환각 차단의 본질)
데이터 수집기(scripts/) 스냅샷 채우기 SEC EDGAR(키 불필요)·FRED·OpenDART·ECOS — 전부 무료, 데모 실데이터 비용 $0
(목표) Azure AI Search 공시 RAG(agentic retrieval) 현재 search_filings는 스냅샷 필터로 모사 → 추후 실제 인덱스로 교체
(목표) Content Safety Groundedness 응답 근거성 검증(preview) 에이전트 답변이 도구가 준 근거에 실제로 기반하는지 자동 점검

왜 이렇게 설계했나 (핵심 결정)

  1. 단일 LLM이 아니라 멀티 에이전트 토론. 가치·기술·리스크는 서로 충돌하는 관점입니다. 한 모델에 "균형 있게 답해"라고 시키는 것보다, 역할을 분리해 토론·반박시키면 사각지대가 줄고 근거가 또렷해집니다. 의장이 합의/이견을 구분해 종합하므로 결론의 불확실성까지 함께 보여줍니다(합의도 %).

  2. 함수 호출로 수치를 고정 — 환각 차단. LLM은 그럴듯한 숫자를 잘 지어냅니다. 그래서 PER·이동평균·금리 같은 모든 수치를 프롬프트에 미리 넣지 않고, 에이전트가 필요할 때 get_* 도구를 호출해 받게 했습니다. 화면의 모든 숫자 옆 [get_fundamentals] 같은 근거 칩이 "이 값은 도구가 준 실측"임을 증명합니다. 👉 라이브 증명: 삼성전자 공시에서 해당 섹션을 못 찾자 에이전트가 값을 만들지 않고 "데이터 없음" 으로 답합니다.

  3. 키리스(시크릿 0). 사용자 구독은 Azure OpenAI의 키 인증을 차단(disableLocalAuth=true)합니다. 그래서 DefaultAzureCredentialAAD 토큰을 받아 호출하고, 배포 환경에서는 Managed Identity + Cognitive Services OpenAI User 역할만 부여합니다. 유출될 키가 존재하지 않습니다.

  4. 실데이터 + 출처 정직성. 입력 종목의 시세·지표를 즉석 수집하되, 무료 소스가 못 채우는 필드(예: 일부 KR 공시 위험요소, US 밸류에이션 한도 초과 시)는 숨기지 않고 "자료 없음"으로 표기하고 에이전트도 그 부분을 지어내지 않습니다. 필드별 source 라벨로 어디서 온 값인지 화면에 드러납니다.

  5. 즉석 라이브 분석(스케일 투 제로). 브라우저가 LLM을 직접 부르면 키 노출·CORS·비용 통제가 어렵습니다. 대신 백엔드(ACA + FastAPI)가 시세 수집과 gpt-5.4 토론을 수행하고, minReplicas 0으로 idle 시 비용이 거의 0입니다(첫 요청만 콜드스타트 ~12초). 사용자는 아무 종목이나 넣어 실시간 결과를 받습니다.

  6. MOCK 폴백. AZURE_OPENAI_ENDPOINT 미설정 시 규칙 기반 MOCK으로 동일한 화면이 동작 — 오프라인·CI·교육 환경에서도 흐름을 보여줄 수 있고, 출력 스키마가 같아 프론트는 한 줄도 바뀌지 않습니다.


비용


데이터 출처 · 면책

← 데모 목록학습 포털 홈