티스토리 뷰

청소년을 위한 주식 투자 교육, TeensMate – AI 챗봇 시스템

1. 문제 상황: 청소년 주식 투자 관심도 증가와 부족한 금융 교육

최근 한국에서 청소년들의 주식 투자에 대한 관심이 급격히 증가하고 있습니다. 특히, 2019년부터 2022년까지 10대의 주식 계좌 개설 수가 3.7배 증가하며, 청소년들이 투자의 세계에 발을 들여놓고 있습니다. 하지만 주식 투자에 대한 관심도가 높아진 반면, 금융 이해력은 여전히 낮은 수준에 머물러 있습니다.

2023년 현재, 청소년들의 금융 이해력은 평균 60점에 그치며, 2013년보다 개선되었지만 여전히 금융 교육의 필요성이 큽니다. 청소년들은 금융 관련 용어나 투자 상품에 대한 기본적인 이해가 부족하고, 그로 인해 합리적인 투자 판단을 내리는 데 어려움을 겪고 있습니다. 또한, ‘금융 교육 및 지식 미흡’은 청소년들이 주식 투자에 뛰어드는 데 가장 큰 걸림돌로 작용하고 있습니다.

2. 시장 가능성: 체험 위주 금융 학습의 필요성

금융 교육에 대한 사회적 수요가 증가하는 가운데, 청소년들이 실생활에서 금융을 체험하고 배울 수 있는 기회가 절실합니다. 조사에 따르면, 많은 청소년들이 현장 체험 위주의 교육을 선호하며, 86%는 경제 교육이 실제 경제 활동에 도움을 주었다고 응답했습니다.

이에 따라, 청소년들에게 금융을 재미있고 쉽게 전달할 수 있는 체험형 교육 서비스가 필요해졌습니다. 이를 위해 "틴즈 메이트"라는 AI 기반 투자 도우미 시스템이 개발되었습니다.

 

3. 서비스 개요: "틴즈 메이트" – 투자 교육 챗봇

"틴즈 메이트"는 청소년을 위한 주식 투자 교육 특화 AI 챗봇입니다. 이 시스템은 금융 기초 지식, 기업 분석, 주식 거래 실습 등을 제공하며, 청소년들이 주식 시장을 안전하게 경험하고 투자 원리를 학습할 수 있도록 돕습니다.
주요 기능:

  1. 금융 기초 지식 제공
    틴즈 메이트는 금리, 주식, 채권, 가치 평가 등 기본적인 금융 지식을 쉽게 설명하며, 청소년들이 어려운 금융 용어를 이해할 수 있도록 돕습니다. 예를 들어, "금리는 무엇인가?"라는 질문에 대해 친근하고 간단한 설명을 제공합니다.
  2. 기업 분석
    이미지나 키워드를 입력하면, 관련 기업의 가치사슬(Value Chain)을 세분화하여 설명합니다. 이를 통해 청소년들은 기업 분석을 보다 쉽게 이해하고, 투자에 대한 분석 능력을 키울 수 있습니다.
  3. 실시간 주식 거래 체험
    실시간 주식 시세를 반영하여, 청소년들이 주식을 사고팔 때의 의사결정 과정을 체험할 수 있습니다. 이를 통해 수요와 공급의 원리 및 기업 가치 평가 방법을 실습하며 배울 수 있습니다.
  4. 모의 투자
    실시간 주식 시세와 함께 가상 거래를 통해 주식 시장의 변동성에 대응하는 투자 전략을 익힐 수 있습니다. 이는 청소년들이 실제 주식 시장에 대한 감각을 익히는 데 중요한 역할을 합니다.

 

LangChain을 활용한 RAG 시스템 설명

 

이 시스템은 LangChain과 ChromaDB를 활용하여 Retrieval-Augmented Generation (RAG) 기반 챗봇을 구현합니다. 이 시스템의 핵심 목표는 사용자가 질문을 입력하면, 관련 문서를 빠르게 검색하고, 그 내용을 바탕으로 OpenAI 모델을 통해 자연스러운 답변을 생성하는 것입니다. 아래는 시스템의 구성과 흐름에 대한 자세한 설명입니다.

시스템 구성 요소

  1. ChromaDB: 벡터 데이터베이스로, 텍스트 데이터를 벡터화하여 저장하고 검색하는 역할을 합니다. 사용자의 질문을 벡터로 변환한 후, 가장 관련성 높은 문서를 검색하여 결과를 제공합니다.
  2. LangChain: LangChain은 RAG 시스템에서 중요한 역할을 합니다. LangChain을 통해 문서 검색, 쿼리 처리 및 OpenAI 모델을 통한 답변 생성을 관리합니다.
  3. OpenAI (GPT-4): GPT-4 모델은 최종적으로 사용자의 질문에 대해 생성된 답변을 제공합니다. 검색된 문서와 함께 입력된 질문을 바탕으로 사용자가 이해할 수 있는 답변을 생성합니다.

시스템 흐름

  • 사용자 질문 입력
    • 사용자가 질문을 입력합니다. 예를 들어, "아이폰을 만드는데 벨류 체인이 뭐야?"와 같은 질문이 있을 수 있습니다.
  • 질문 벡터화
    • 질문을 OpenAI 임베딩 모델을 통해 벡터로 변환합니다. 
embedded_query = OpenAIEmbeddings(query)
  • ChromaDB에서 유사 문서 검색
    • 변환된 질문 벡터를 ChromaDB에 저장된 벡터와 비교하여 가장 유사한 문서를 검색합니다.
    • ChromaDB는 코사인 유사도를 기반으로 벡터의 유사도를 계산하여 관련 문서를 반환합니다.
  • 관련 문서와 질문을 OpenAI로 전달
    • 검색된 문서와 사용자의 질문을 함께 OpenAI 모델로 전달하여 답변을 생성합니다.
     
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", """
            다음 질의를 읽고, 관련된 정보 유형을 한 단어로 출력해줘.
            가능한 답변은 "edu", "news", "report", "all", "nothing" 중 하나야.
        """),
        ("user", """질의: {query} 답변:"""),
    ]
)

이 부분에서 {query}는 실제로 사용자가 입력한 질문을 템플릿에 삽입하는 자리 표시자입니다. classify_query 함수에서 이 템플릿을 사용하여 질의를 분류하고, 적절한 DB에서 정보를 검색합니다.

  • 최종 답변 출력
    • OpenAI는 context와 질문을 바탕으로 답변을 생성한 후, 이를 사용자에게 출력합니다.
prompt_messages = [
    SystemMessage(
        content=f"""
            너는 주식 교육 및 추천 종목에 관한 정보를 제공하는 경제 전문가이자 청소년 맞춤 경제 교육 챗봇이야.
            아래는 너가 참고할 수 있도록 각각의 DB에서 검색된 정보들이야:

            {combined_info}

            이 정보를 기반으로 사용자가 입력한 질의에 대해 청소년도 쉽게 이해할 수 있도록 설명하고,
            특히 뉴스를 기반으로 정보를 추출한다면 최근 현황에 대해 설명해줘.
            필요하다면 투자 추천 종목도 함께 알려줘.
        """
    ),
    HumanMessage(content=f"질의: {query} 답변:"),
]

여기서 combined_info는 DB에서 검색된 정보들로, 이를 템플릿에 삽입하여 모델이 적절한 답변을 생성할 수 있도록 도와줍니다. 이후 chatbot_chain.invoke() 메서드를 통해 템플릿을 기반으로 실제 응답을 생성합니다.

 

chatbot_prompt = ChatPromptTemplate.from_messages(prompt_messages)
chatbot_chain = chatbot_prompt | self.llm
answer = chatbot_chain.invoke({"combined_info": combined_info, "query": query}).content

이 부분에서 combined_info와 query는 각각 DB에서 얻은 정보와 사용자의 질의입니다. | 연산자는 템플릿과 LLM(ChatOpenAI 모델)을 연결하여 답변을 생성하는 과정을 나타냅니다.

 

Langchain의 ChatPromptTemplate를 사용하면 챗봇의 대화 흐름을 명확하게 설정할 수 있습니다. 예를 들어, run_query 함수에서 질의에 따라 세 개의 DB(교육, 뉴스, 리포트)에서 정보를 추출하고, 이를 바탕으로 청소년들이 이해할 수 있도록 설명하는 방식으로 템플릿을 설계합니다. 이 템플릿은 시스템 메시지와 사용자 메시지를 결합하여, 모델이 필요한 정보를 어떻게 응답해야 할지에 대한 방향을 제시합니다.

ChromaDB의 동작 과정

  • 문서 벡터화: 다양한 데이터 소스를 ChromaDB에 저장할 때, 각 문서(예: 교육 데이터, 뉴스, 보고서 등)는 임베딩 벡터로 변환되어 저장됩니다.
  • 유사도 비교: 사용자가 입력한 질문은 벡터화되고, ChromaDB 내에 저장된 벡터들과 비교하여 가장 유사한 문서가 검색됩니다.
  • 문서 반환: 유사한 문서와 관련된 컨텍스트를 사용하여 OpenAI에게 전달, 최종적인 답변을 생성합니다.

소스 코드 설명

Crawler (ChromaDB.py)

  • ChromaDB 구조: ChromaDB는 문서를 벡터화하여 저장하고, 검색하는 구조를 가지고 있습니다. 벡터화된 데이터를 효율적으로 처리하기 위해 코사인 유사도를 활용합니다.

Education.py

  • 트랜스크립트 추출: YouTube와 같은 교육용 콘텐츠에서 트랜스크립트를 추출하고, 이를 정제하여 벡터화합니다. 이 데이터를 ChromaDB에 저장하여 교육 콘텐츠 검색 기능을 제공합니다.

News.py

  • 키워드 기반 뉴스 분류 및 검색: 뉴스 데이터를 다양한 키워드(예: "반도체", "금리 인상")로 분류하고 저장하여 특정 주제에 대한 뉴스만 빠르게 검색할 수 있도록 합니다.

Report.py

  • 삼성증권 리포트: 삼성증권의 리포트를 크롤링하고, 이를 텍스트로 변환하여 ChromaDB에 벡터화하여 저장합니다. 이 데이터는 투자 분석에 활용됩니다.

Chatbot.py

  • 사용자 쿼리 분석 및 응답 생성: 사용자의 질문을 분류하고, 질문의 유형에 맞는 데이터를 검색한 후, OpenAI GPT-4를 사용하여 적합한 답변을 생성합니다.
  • 유형 분류: 사용자의 질문을 edu, news, report 등으로 분류하여 관련 데이터를 검색합니다.

 

다음 영상은 Langchain과 RAG 개념을 실제로 적용해 보기 위해 간단하게 개발한 TeensMate의 데모 시연 영상입니다.

 

!! 모의투자에서 WebSocket의 역할

  • 실시간 주식 데이터 수신:
    모의투자 시스템에서는 사용자가 실시간 주식 데이터를 기반으로 거래 결정을 내립니다. 이를 위해서는 주식 가격이나 거래량, 시세 변화 등 실시간 데이터가 중요합니다. WebSocket을 활용하면, 지속적으로 변화하는 주식 데이터를 즉시 받아볼 수 있어 실시간으로 반영된 정보를 기반으로 빠른 의사결정을 내릴 수 있습니다.
  • 효율적인 데이터 처리:
    주식 거래는 연속적인 데이터 흐름이 필요하기 때문에, 데이터의 끊김 없는 전송이 중요합니다. WebSocket은 실시간으로 데이터가 업데이트되고 즉시 반영되므로, 사용자는 최신 주식 정보를 빠르게 얻을 수 있습니다. 이는 주식 시장의 빠른 변동성을 반영하는 데 중요한 역할을 합니다.
  • 향상된 사용자 경험:
    모의투자 환경에서 실시간 데이터 스트리밍은 사용자에게 실제 주식 거래와 비슷한 경험을 제공합니다. 사용자는 변화하는 데이터를 실시간으로 모니터링하며, 빠르게 반영된 정보를 바탕으로 더욱 현실감 있는 투자 시뮬레이션을 진행할 수 있습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함