반응형
📅 Sense Stock 개발 일지 (2025-06-03)
n8n 기반 뉴스 요약 자동화 시스템 Sense Stock 구축 중 진행한 작업들을 정리합니다.
오늘은 주로 프롬프트 고도화, Firecrawl Extract 적용, 기존 출력 Output 값 활용 등을 다뤘습니다.
🔧 사용 도구
도구 | 역할 |
🔷 n8n | 전체 워크플로우 자동화 도구 |
🔷 Firecrawl.dev | 사이트 內 기사 검색 + URL 수집 API (Firecrawl MCP Sever) |
🔷 ChatGPT | 키워드 정제 및 후속 분석 |
- 오늘의 목표
- Firecrawl Search 노드를 통해 Yahoo Finance 뉴스 기사 정확하게 수집
- 검색 쿼리 최적화로 비뉴스 URL 제거 및 정확도 향상
- 크롤링 실패 시 대응 로직 점검 및 Firecrawl Extract 활용 방안 검토
- AI Agent 프롬프트 구조 고도화, 토큰 최적화 전략 마련
- 진행 내용
- Firecrawl Search 노드 설정에서 limit: 1로 제한하여 단일 기사만 수집
- 초반 쿼리(site:finance.yahoo.com)는 뉴스기사가 아닌 URL까지 포함되어 정확도 낮음
- inurl:news 연산자를 추가해 뉴스 기사만 타겟팅 → 요약 적합 기사 URL 추출 성공
- 크롤링 실패 케이스 다수 확인
- 유료 기사의 경우 Crawling 실패(Error 500)
- "No content available", 본문 내용은 없는데 Success => Data가 그대로 넘어감
→ Firecrawl Extract 기능 활용으로 대체 (구조화 데이터 추출 가능)
- AI Agent 프롬프트 최적화 작업 착수
- 출력 예시가 많을수록 토큰 비용 및 레이턴시 증가 → 선택적 간소화 전략 적용
- 이전 노드의 Output 값을 직접 참조 가능
→ 예: 항목 10, 11번은 별도 입력 없이 전 노드 출력 활용하여 프롬프트 구성 가능
Step 1. Scraping 대상은 우선 1개 기사로 제한
Firecrawl Search 설정
- limit: 1로 기사 1개만 가져오도록 제한
- 초기 query:
{ "query": "{{ $json.best_keyword }} site:finance.yahoo.com" }
→ 비뉴스 URL까지 포함되어 정확도가 낮음
검색 쿼리 개선 (Query Operators 적용)
- 수정 쿼리:
{ "query": "{{ $json.best_keyword }} site:finance.yahoo.com inurl:news" }
- 효과: 뉴스 기사만 타겟팅하여 요약에 적합한 페이지 추출 가능
https://cord-ai.tistory.com/218
🔥 Firecrawl 완전정복: 웹 자동화 & AI 추출 도구 정리
웹페이지 크롤링, 콘텐츠 추출, 구조화 데이터 분석까지Firecrawl 하나로 끝내는 웹 자동화 도구 가이드🔧 Firecrawl란?Firecrawl은 웹 데이터를 효율적으로 수집하고 가공하는 데 특화된 AI 기반 도구
cord-ai.tistory.com
⚠️Step 2. 크롤링 실패 대응
❌ Error 500, Timeout, No content available
- 유료 기사 혹은 Yahoo의 JS 렌더링 방식으로 인해 크롤링이 실패
- .html로 끝나는 URL의 경우 차단 비율 높음
- 본문이 있음에도 Firecrawl이 "No content available"로 인식하는 경우 발생
✅ 대처 방식
Firecrawl Extract 기능 사용
- structured data 추출 가능
- 필요 시 Prompt → Schema 구조화 가능
Step 3. AI Agent 프롬프트 고도화
❓ 프롬프트가 길면 사용량이 많아질까?
- 예시 출력이 많아지면 토큰 사용량 증가 → 비용, 레이턴시 고려 필요
- 형식이 정해진 경우에는 ‘예시 출력’을 사용하고, 이외에 디테일이 필요하면 생략하는 편이 효율적
🔁 이전 노드 Output 활용 가능 여부
- 전 노드에서 출력한 output은 그대로 참조 가능
- 아래 항목별 지침 정리에서 10, 11번 항목의 경우에는 이전 Output 값 활용
더보기
항목별 지침 정리
번호 | 항목명 | 설명 |
1 | headline | 한 줄 요약 제목 |
2 | summary | 사건 개요 → 주요 변화 → 전망 |
3 | sentiment | 긍정 / 부정 / 중립 |
4 | score | 긍정도 점수 (0~100) |
5 | sentiment_reason | 판단의 핵심 근거 문장 |
6 | issue_type | 정책 / 기업행동 / 기술진보 / 사건사고 등 |
7 | trigger | 이슈 핵심 발표 문장 |
8 | related_companies | 수혜 종목 (이름, 티커, 수혜 이유) |
9 | strategy | 단기 진입 / 장기 보유 / 주의 등 |
10 | market_reaction | 시장 반응과 기대 해석(이전 Output 값 활용) |
11 | keywords | 핵심 키워드 3~5개 (이전 Output 값 활용) |
12 | country | 주요 국가 |
13 | date_range | 기사 날짜 범위 |
오늘의 정리
항목 | 내용 |
크롤링 제한 | Yahoo .html URL 자주 실패, waitFor 늘려도 한계 |
실패 대응 | Function → isError 처리 → 제외(미구현, 명일 진행) |
AI 요약 구조 | 고정 JSON 형식 + 예시 기반 프롬프트 |
보완 포인트 | Firecrawl Extract 기능 활용 = 크롤링 제한 없이 가져옴(현재까지는...) |
지금까지의 진행 요약
현재까지 전체 흐름은 다음과 같다:
- 사용자 요청 입력
- 요청 텍스트에서 핵심 이슈 및 Best Keyword 추출
- (이슈 정보는 최종 Output에 참조 형태로 포함)
- Best Keyword 기반으로 관련 기사 URL 수집
→ Firecrawl MCP 활용 - 여러 기사 요약 시 Loop Over Items (Split in Batches) 활용
- 요약 결과 Slack 등 외부 채널로 전달
🧱 Workflow 구조
사용자 요청
↓
Best Keyword 추출 (GPT)
↓
Yahoo Finance 검색 → 기사 URL 리스트 생성
↓
각 URL 순회하며 요약 (Split In Batches + OpenAI)
↓
기사 요약 결과 병합
↓
## [미구현] 최종 통합 요약 & 전략 분석
❓ 다음 단계에서 고민 중인 점들
- 프롬프트 길이에 따른 비용 및 레이턴시
- 기사 수가 늘어나면 GPT 호출 비용 및 응답 시간 증가 가능
- 프롬프트 최적화 필요
- 기사 수 제한 및 크롤링 실패 대응 로직
- 기본 기사 수는 5개
- 일부 기사 크롤링 실패(또는 본문 내용이 없는 경우) 시 해당 항목은 자동 제외 처리 필요
- 현재 Split in Batches로 루프 후 Done에서 합쳐지므로
→ 실패 항목 필터링 로직이 추가로 필요함
- 답변 러닝타임 알림 기능
- 사용자가 기다리는 동안 상태 피드백 필요
- Slack 등에서 "요약 중입니다…" 메시지 → 완료 후 결과 전달
반응형
'n8n, Automation Tool > n8n Project' 카테고리의 다른 글
Sense Stock, D+5 (4) | 2025.06.06 |
---|---|
Sense Stock, D+4 (4) | 2025.06.04 |
Sense Stock, D+2 (2) | 2025.06.02 |
Sense Stock, D+1 (0) | 2025.05.29 |
Sense Stock, 기획 - Ver.1 (2) | 2025.05.28 |
댓글