주식 AI 에이전트를 직접 만들어보니 — LangGraph, RAG, GPT-4o 활용기

주식 초보자를 위한 AI 에이전트, 직접 만들어봤습니다

주식 공부를 시작하면서 느낀 게 하나 있었습니다. “PER이 뭔지 검색하면 나오는데, 내 상황에 맞게 설명해주는 곳이 없다”는 점이었습니다. 그래서 직접 만들기로 했습니다.

계기는 유데미에서 LangChain / LangGraph 관련 강의를 들으면서였습니다. 강의를 따라가다 보니 자연스럽게 “이걸 실제 서비스에 적용하면 어떨까”라는 생각이 들었고, 주식 질문에 특화된 AI 에이전트를 만들어보기로 했습니다. 이론으로만 배운 걸 직접 구현해보는 과정이 쉽지는 않았지만, 그만큼 배운 것도 많았습니다.

LangChain과 LangGraph란?

LangChain은 LLM을 활용한 애플리케이션을 쉽게 만들 수 있게 도와주는 파이썬 프레임워크입니다.
LangGraph는 LangChain 위에서 에이전트의 흐름을 그래프 구조로 설계할 수 있게 해줍니다.

기능별로 역할을 나눠서 각각의 노드로 연결했고,
사용자의 질문에 따라 적절한 노드로 라우팅되는 구조로 만들었습니다.

기술 스택 한눈에 보기

LangGraph, OpenAI GPT-4o, FastAPI를 중심으로 구성했습니다. 벡터 DB는 Pinecone, 웹 검색은 Tavily API, 주식 데이터는 yfinance를 사용했고, 프론트엔드는 Vanilla HTML/CSS/JS로 구현했습니다. 배포는 백엔드는 Render, 프론트엔드는 Vercel을 활용했습니다.


핵심 구조: 질문 유형에 따라 전문 노드로 분기

이 시스템의 핵심은 LangGraph의 StateGraph를 활용한 멀티 에이전트 구조입니다. 사용자의 질문이 들어오면 다음 순서로 처리됩니다.

  1. enrich_question — 후속 질문인 경우 이전 대화 맥락을 자동으로 보강합니다
  2. supervisor — 질문을 7가지 라우트 중 하나로 분류합니다
  3. 전문 노드 — 분류 결과에 따라 해당 노드가 처리합니다
  4. 응답 구조화 → 기록 저장 → SSE 스트리밍

supervisor 노드는 GPT-4o-mini가 structured output으로 라우트를 결정하도록 설계했습니다. 분류 기준은 아래와 같습니다.

라우트예시 질문
company“애플 주가 어때?”, “삼성전자 분석해줘”
news“테슬라 최근 뉴스 알려줘”
glossary“PER이 뭐야?”, “공매도란?”
general“요즘 반도체 시장 어때?”
advisor“월 50만원으로 투자 시작하고 싶어”
chat“좀 더 자세히 설명해줘”
reject“오늘 저녁 뭐 먹지?”
company 노드
news 노드
advisor 노드

설계하면서 가장 신경 쓴 부분들

Self-RAG를 적용한 예 (glossary 노드)

모델을 두 가지로 분리했습니다

판단·라우팅처럼 단순 분류 작업은 GPT-4o-mini를, 실제 사용자에게 전달되는 답변 생성은 GPT-4o를 사용했습니다. API 비용과 품질을 동시에 잡기 위한 선택이었습니다.

glossary 노드에는 Self-RAG를 적용했습니다

용어 설명은 정확성이 중요하기 때문에 단순 RAG가 아닌 Self-RAG 패턴을 구현했습니다. Pinecone에서 관련 문서를 검색한 뒤, 문서 관련성 → 답변 생성 → 근거성 및 유용성 평가까지 총 3단계 품질 검증을 거칩니다. 평가를 통과하지 못하면 1회 재시도하고, 그래도 실패하면 Corrective RAG 방식으로 웹 검색 노드로 폴백합니다. 지식 베이스는 PER, PBR, EPS, ROE, ETF, 배당 등 26개 한국어 마크다운 문서로 구성했습니다.

기업 데이터는 LLM 답변보다 먼저 보냅니다

company 노드에서는 yfinance로 수집한 시가총액, PER, PBR, ROE 등의 수치를 SSE 이벤트로 프론트엔드에 즉시 전송합니다. LLM이 분석 문장을 생성하는 동안 가격 카드가 먼저 표시되기 때문에 체감 응답 속도가 훨씬 빠릅니다.


구현하면서 부딪힌 문제들

응답 속도가 너무 느렸습니다

에이전트를 처음 돌려봤을 때 응답이 생각보다 훨씬 느렸습니다. 어디서 병목이 생기는지 파악하기 어려웠는데, LangChain에서 제공하는 LangSmith 대시보드를 활용하니 노드별 소요 시간을 시각적으로 확인할 수 있었습니다. 이를 바탕으로 불필요한 LLM 호출을 줄이고, 기업 데이터는 LLM 응답 전에 먼저 전송하는 구조로 개선했습니다.

할루시네이션 문제가 있었습니다

AI가 주식 정보를 사실처럼 틀리게 답하는 경우가 있었습니다. 특히 용어 설명 쪽에서 이 문제가 두드러졌습니다. 이를 해결하기 위해 hallucination_grader 체인을 별도로 작성했고, 답변이 검색된 문서에 실제로 근거하는지 평가하는 단계를 추가했습니다. RAG 구조와 품질 평가 단계를 함께 적용하고 나서 훨씬 신뢰할 수 있는 답변이 나오기 시작했습니다.


만들면서 배운 것

유데미 강의에서 배운 내용을 실제 프로젝트에 적용하는 건 전혀 다른 일이었습니다. 강의에서는 깔끔하게 작동하던 코드가 실제 데이터를 붙이면 예상치 못한 방식으로 오작동했고, 그 과정에서 디버깅 능력과 구조 설계에 대한 감각을 키울 수 있었습니다.

LangGraph는 에이전트의 흐름을 노드와 엣지로 명확하게 표현할 수 있어서 복잡한 분기 로직을 관리하기에 적합했습니다. 이번 프로젝트를 통해 AI 에이전트를 단순히 “GPT에 질문을 넣는 것”이 아니라, 목적에 맞게 설계하고 검증하는 작업임을 체감할 수 있었습니다.

위로 스크롤