Skip to content

Upstage-AI-Lab-4/chat2-pub

Repository files navigation

Review Assignment Due Date

프로젝트 이름

TESLA를 사랑한 서학개미


프로젝트 소개

<프로젝트 소개>

코로나 팬데믹 동안 넘치는 유동성이 주식시장에 유입되면서 전 세계적으로 개미 투자자들의 활약이 두드러졌습니다. 한국에서는 동학농민운동을 본뜬 "동학개미"라는 별칭이 등장했으며, 국내 주식시장에서 주요 플레이어로 부상했습니다.

이와 동시에, 미국 주식시장에 발을 들인 개인 투자자들은 "서학개미"로 불리며, 미국 주식에 대한 관심과 투자 열풍이 매년 가속화되고 있습니다. 서학개미는 특히 테슬라, 애플, 아마존과 같은 미국 대표 기업에 대한 열정을 보여주고 있으며, 이 트렌드에 맞춰 저희는 사용자에게 최적화된 정보를 제공하고자 하는 목표를 설정하였습니다.

따라서, 저희는 미국 주식에 관심이 있거나 이미 투자하고 있는 투자자들을 위해 실시간 투자 정보를 제공하고, 나아가 워런 버핏의 투자 철학과 명언을 반영한 투자 조언을 제공하는 스마트 챗봇을 협업하여 개발하였습니다.

<서학개미의 페르소나>

서학개미는 그 어떤 캐릭터보다 강력합니다. 주요 성격적 특성은 트럼프 전 대통령처럼 카리스마 넘치고 직설적입니다. 거기에 더해, 워런 버핏의 투자 철학을 기반으로 한 냉철한 투자 조언을 결합하여, 사용자들에게 확신과 자신감을 심어줍니다.

  • 강력한 리더십과 자신감을 바탕으로, 투자자들이 올바른 결정에 도달하도록 돕는 가이드 역할을 수행합니다.
  • 필요할 때는 단호한 조언을 통해 투자자들이 직면한 불확실성을 해결할 수 있도록 돕습니다.
  • 워런 버핏의 철학을 바탕으로, 투자자들에게 전략적인 방향성을 제시합니다.

<챗봇의 주요 기능>

  1. 미국 주식 실시간 정보 제공
    서학개미는 실시간으로 야후 파이낸스 API를 통해 최신 주식 시장 데이터와 분석 자료를 제공합니다.

  2. 워런 버핏의 투자 철학을 활용한 조언 제공
    버핏의 투자 명언을 인용하며 심도 있는 투자 조언을 제공하고, 사용자가 스스로 올바른 결정을 내리도록 도와줍니다.

  3. 강력한 투자 방향 제시
    서학개미는 마치 트럼프처럼 확신에 찬 목소리로, 때로는 과감한 투자 조언을 제공합니다.

  4. 사용자 맞춤형 대응
    사용자가 불안감을 느낄 때마다, 서학개미는 격려와 단호한 조언으로 대응합니다. 사용자가 느낄 수 있는 불안감을 풀어주며, 긍정적인 투자 심리를 유지할 수 있도록 돕습니다.

'테슬라를 사랑한 서학개미'는 미국 주식 시장에 발을 내딛는 모든 투자자들에게 힘을 실어줍니다. 워런 버핏의 투자 철학과 트럼프의 강력한 리더십을 결합한 이 챗봇은 단순한 정보 제공을 넘어서, 투자자로 하여금 명확한 판단과 자신감을 얻게 하는 최고의 가이드입니다.

서학개미는 사용자에게 단호하면서도 지혜로운 투자 조언을 제공하며 성공적인 투자 여정을 함께할 것입니다.

팀원 구성

팀장 팀원 1 팀원 2 팀원 3 팀원 4

@Github

@Github

@misule0423

@deptno

@chosungsu

1. 개발 환경

  • 주 언어 : python
  • 버전 및 이슈관리 : git
  • 협업 툴 : github, slack, zoom

2. 채택한 개발 기술과 브랜치 전략

Beautifulsoup, yfinance

  • Beautifulsoup

  • yfinance

    • 야후 파이낸스에 기록된 2023-08-01년 이후의 테슬라 주가 정보 및 기업정보를 취합하기 위해 사용하였습니다.

FAISS

  • FAISS
    • 대규모 벡터 공간에서 유사한 벡터를 신속하게 검색할 수 있기 위해 사용하였습니다.

Langchain

  • ConversationBufferWindowMemory

    • 메모리 유지횟수를 설정함으로써 과적합 현상을 해결하고자 사용하였습니다.
  • RunnableParallel & RunnableLambda

    • 병렬실행과 사용자 정의 함수의 결합을 위해 사용하였습니다.

브랜치전략

  • git 에 대한 지식 차이와 효율성을 고려하여 가장 단순한 trunk based 전략을 취했습니다.
    • main 브랜치와 topic 브랜치를 운영한다
      • main 실행 가능한 상태를 유지합니다.
      • topic 기능을 개발하고 완료되면 pr 을 통해 main 브랜치로 머지됩니다.
  • 머지 전략 과 코드리뷰
    • 코드리뷰를 강제 하지 않고 각자 기능이 준비되면 작업 브랜치인 topic 브랜치를 머지하는 방식으로 진행하였습니다.

3. 프로젝트 구조

├── README.md
├── Pipfile
├── Pipfile.lock
├── requirements.txt
├── main.py
├── crawler
│   └── TeslaStockData.py
├── documents
│   ├── tesla_info.txt
│   ├── tesla_news.txt
│   └── tesla_stock_prices.txt
├── indexing
│   ├── index.faiss
│   ├── index.pkl
│   └── vector_store.py
├── retriever
│   └── retriever.py
├── history
│   ├── __init__.py
│   └── history.py
├── logger
│   ├── __init__.py
│   └── logger.py
├── memory
│   ├── __init__.py
│   └── memory.py
├── chain
│   ├── __init__.py
│   └── create_chat_text_chain.py
├── template
│   ├── __init__.py
│   └── buffet_trump.py
├── llm
│   ├── __init__.py
│   ├── openai.py
│   └── upstage.py
└── ui
    ├── __init__.py
    ├── page.py
    └── stream_text.py
...


4. 역할 분담

권희수

  • 역할
    • 총괄, 프로젝트 주제 선정 및 persona 구축, 발표
  • 기능
    • yfinance, google을 통한 crawler 모듈 구현

변혜영

  • 역할
    • Retriever 모듈 개발
  • 기능
    • 쿼리를 기반으로 벡터 스토어에서 문서를 검색하는 기능

이민석

  • 역할
    • 벡터 스토어 모듈 개발
  • 기능
    • 데이터 로딩 및 전처리(청킹), 임베딩 생성, 벡터 스토어 저장 및 로드

이봉균

  • 역할
    • git 오리지널 레포지터리 생성 및 upstage 레포로 추후 이전
    • branch 전략 공유
  • 기능
    • user input -> event handler -> ui 결과 노출까지의 스켈레톤을 구현
    • 모듈 디렉토리 스켈레톤 작성
    • gradio 를 활용한 ui 채팅 작성

조성수

  • 자기소개
    • 데이터 사이언스 전공
  • 역할
    • history chatbot의 history 생성을 돕는 function 작성
    • logger 전체 코드의 로그출력을 Error 이상으로 출력되도록 작성
    • memory 최근의 20개 상호작용이 메모리로 유지하도록 작성
    • template Chatbot의 답변이 프로젝트 목적에 부합하도록 두 명의 페르소나를 작성
    • chain Chatbot의 전체적인 프로세스가 중단없이 진행되도록 작성
  • 기능
    • 메모리 횟수 설정, 템플릿 작성으로 챗봇의 답변을 유도

5. 개발 기간 및 작업 관리

개발 기간

  • 전체 개발 기간 : 2024-08-12 ~ 2024-08-16
  • 기능 구현 : 2024-08-12 ~ 2024-08-14
  • 그외 기간 작성

작업 관리

  1. 아래와 같은 경고문구가 출력되었습니다.
\lib\site-packages\langchain_core\_api\deprecation.py:141: LangChainDeprecationWarning: The method `BaseRetriever.get_relevant_documents` was deprecated in langchain-core 0.1.46 and will be removed in 0.3.0. Use invoke instead.

설명

  • BaseRetriever.get_relevant_documents 메서드는 langchain-core 0.1.46에서 더 이상 사용되지 않으며, 0.3.0 버전에서 제거될 예정입니다.
  • 대신 invoke 메서드를 사용하세요.

해결

  • 기존 코드 : get_relevant_documents(query)
  • 수정 코드 : invoke(query)

  1. 챗봇의 대화가 retrieve를 제대로 하지 못하는 현상 발견

설명

  • 기존에는 사용자의 입력을 받고 RunnableLambda로 retrieve를 처리했었고, 이로 인해 간혹 retrieve를 제대로 하지 못하는 현상을 발견하여
  • 아래와 같이 하나의 람다식으로 중첩을 최소화하여 해결하였습니다.

해결

  • 기존 코드 : 'persona_memory': itemgetter('query') | RunnableLambda(self.retrieve_)
  • 수정 코드 : 'persona_memory': RunnableLambda(lambda p: Retriever().retriever(query=p['query']))

  1. 챗봇의 대화가 사용자의 입력을 답변에도 반복하는 현상이 생겼습니다.

설명

  • 기존에는 사용자의 입력을 받으면 memory에서 저장된 대화를 불러오고 템플릿의 history 부분을 파싱했지만, 이로 인해 간혹 사용자의 입력이 답변에도 출력이 되는 현상을 발견하여
  • 아래와 같이 람다식만 남김으로써 중첩을 최소화하여 해결하였습니다.

해결

  • 기존 코드 : 'history': RunnableLambda(self.memory.load_memory_variables) | itemgetter('history')
  • 수정 코드 : 'history': RunnableLambda(self.memory.load_memory_variables)

5. 프로젝트 후기

권희수

  • 하나의 공통된 주제로 팀원들과 co work을 통해 project를 완성하였다는 것에 감격을 느꼈고, 짧은 시간이었지만 다른 분들의 knowhow를 배울수 있어서 아주 유익한 시간이었습니다.

변혜영

  • langchain 과 RAG를 사용해서 페르소나 챗봇을 만드는 프로젝트를 통해서 각자의 모듈을 합치고 기능적인 부분과 에러를 함께 고민하고 해결해가면서 많은 것을 배울 수 있었던 좋은 시간이었습니다.

이민석

  • 랭체인 프레임워크를 사용하여 RAG 시스템을 구축하면서 이론적으로 배운 내용을 실제로 구현해 보면서 전체 시스템을 개략적으로 이해할 수 있었습니다. 이 과정을 통해 RAG 시스템의 부족한 부분을 직접 확인하고, 이를 어떻게 해결할지에 대한 고민을 함꼐 나눌 수 있어서 좋았습니다.

이봉균

  • langchain 이라는 하이레벨 프레임워크를 통해 rag 를 지원하는 프로젝트를 수행함으로써 전체 적인 플로우에 대한 이해를 가져갈 수 있어 좋았습니다.

조성수

  • 자연어처리에 대한 막연한 관심을 갖고 진행한 첫 프로젝트였지만, 전체적인 프로세스 지식을 습득하고 직접 랭체인을 통해서 구현까지 하는 일련의 과정 속에서 고민들을 팀원과 함께 극복해보는 경험은 매우 뜻깊었던 것 같습니다. 부족했던 부분을 다시 돌아보고 이후 LLM의 내부를 더 공부해보고 싶다는 생각도 들었습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages