다양한 경제 뉴스 사이트에서 실시간으로 기사를 수집하고, 기사 내용에 언급된 기업을 태깅하여 Kafka로 스트리밍하는 시스템입니다. 또한 해당 뉴스를 거시경제, 산업, 기업 정보를 이용하여 뉴스를 보다 폭넑게 이해할 수 있도록 한다.
- 실시간 뉴스 크롤링:
news_list.py에 정의된 여러 언론사의 최신 기사를 주기적으로 수집합니다. - 기업명 자동 태깅:
company_whitelist.py의 키워드를 기반으로 기사에 언급된 기업을 자동으로 식별하고 태그를 부여합니다. - Kafka 연동: 수집 및 태깅된 뉴스 데이터를 실시간으로 Kafka 토픽에 발행(Produce)합니다.
- 데이터 소비: 발행된 뉴스 데이터를 구독(Consume)하여 확인할 수 있는
consumer.py예제를 포함합니다. - 확장성:
news_list.py와company_whitelist.py파일을 수정하여 손쉽게 크롤링 대상 사이트와 태깅할 기업을 추가/변경할 수 있습니다.
├── news_crawler.py # 메인 크롤러 (Producer)
├── consumer.py # Kafka 메시지 확인용 (Consumer)
├── identify_company_module.py # 기업명 태깅 로직
├── company_whitelist.py # 태깅할 기업 정보 및 키워드, 가중치 정의
├── news_list.py # 크롤링 대상 사이트 목록 및 설정
├── requirements.txt # 필요 패키지 목록
├── README.md # 프로젝트 설명 파일
└── dify
├── add_category.py # 기업-증권 분류 매칭
├── dipy_api.py # dify api관련 코드
├── dipy_knowledge.py # dify KnowledgeBase 업로드, 최신화 함수
├── get_news_and_classify.py #뉴스 송신, 기업 분류 함수
├── industry_whitelist.py # 기업 코드, 기업 WICS, WICS-기업분류 정보
└── main.py # dify로 뉴스 전달 - 분석 내용 확인
사전 준비:
- Kafka 실행: 로컬 또는 원격 환경에 Kafka가 실행 중이어야 합니다. (기본 설정:
localhost:9092) - 필요 패키지 설치:
pip install -r requirements.txt
실행 순서:
-
Consumer 실행 (터미널 1): Kafka로 들어오는 뉴스 데이터를 실시간으로 확인하기 위해
consumer.py를 실행합니다.python consumer.py
실행하면 "뉴스 수신 대기 중..." 메시지가 표시됩니다.
-
Crawler 실행 (터미널 2):
news_crawler.py를 실행하여 뉴스 수집 및 발행을 시작합니다.python news_crawler.py
크롤러가 실행되면
news_list.py에 설정된 사이트들을 주기적으로 확인하며 새로운 기사를 Kafka로 보냅니다.
consumer.py를 실행한 터미널에서는 다음과 같이 news_crawler.py가 수집한 기사 데이터가 JSON 형식으로 출력됩니다.
📥 전체 데이터 수신:
{
"publisher": "서울경제",
"category": "증권",
"title": "삼성전자, AI 가속기 '마하-1' 공개…HBM 없는 혁신",
"published_date": "2024-07-29 10:30:00",
"content": "삼성전자가 자체 개발한 AI 가속기 '마하-1'을 공개했다. 이 칩은 고대역폭메모리(HBM) 없이도 빠른 속도를 구현하는 것이 특징이다...",
"url": "https://www.sedaily.com/NewsView/XXXXXXXX",
"image_url": "https://www.sedaily.com/some_image.jpg",
"company_tag": "삼성전자",
"company_score": 8,
"stock_code": 5930,
"crawled_at": "2024-07-29 10:31:15"
}- company_tag:
identify_company_module.py에 의해 태깅된 기업명입니다. - company_score: 태깅 정확도를 나타내는 점수입니다.
- stock_code:
news_list.py의STOCK_CODE딕셔너리를 참조하여 매핑된 종목 코드입니다.
본 워크플로우는 Dify의 내재적 장점을 활용하여 기존의 복잡한 RAG 파이프라인 구축 과정을 획기적으로 단순화했습니다.
Dify는 PDF, TXT, Markdown 등 다양한 형식의 문서를 업로드하는 즉시 자동으로 청킹(Chunking), 임베딩(Embedding) 및 인덱싱을 처리하는 내장 지식(Knowledge) 기능을 제공합니다.
또한 시각적인 워크플로우를 제공함으로서 보다 직관적으로 분석 과정을 알 수 있습니다.
본 워크플로우는 다음과 같은 Dify 노드로 구성되어 있습니다.
- 시작 (Start): 분석하고 싶은 뉴스의 내용과 뉴스에 매칭된 기업명, 산업군을 전달합니다.
- 2차 분류(with LLM): 기업명이 매칭되지 않은 뉴스들을 LLM을 통해 다시 한번 검사함으로서 중요한 기업 관련 뉴스의 누락을 방지합니다. 또한 코스피 관련 뉴스나 미국 관련 뉴스는 국내 증시의 영향을 중심으로 따로 분석합니다.
- 지식 검색 (Retrieval): 거시경제 리포트, 산업 분석 리포트, 기업 분석 리포트를 통해 해당 뉴스와 관련이 있는 문서의 정보를 검색합니다.
- LLM을 통한 뉴스 분석: 지식 검색을 통하여 뉴스를 실제 금융 전문가들이 작성한 정보를 바탕으로 보다 신뢰성 있고 전문적인 답변을 도출합니다.
- 종료 (End): LLM이 생성한 최종 답변을 사용자에게 반환합니다.
- dify는 자체 로컬에서만 실행이 가능하여(무료버전) 외부에선 실행이 불가능합니다.