diff --git a/doc/PIPELINE_IMPROVEMENT_PLAN.md b/doc/PIPELINE_IMPROVEMENT_PLAN.md index 9db8c06..c0b1a3f 100644 --- a/doc/PIPELINE_IMPROVEMENT_PLAN.md +++ b/doc/PIPELINE_IMPROVEMENT_PLAN.md @@ -26,33 +26,46 @@ 성형외과 홈페이지의 핵심 정보가 이미지로 제공됨 (배너, 의료진 사진, 인증 마크 등). Firecrawl screenshot + Gemini Vision으로 이미지 속 정보를 추출. -- [ ] **WP-V1**. Firecrawl screenshot 캡처 (30min) - - 파일: `discover-channels/index.ts` Stage A에 추가 - - 변경: `formats: ["json", "links", "screenshot"]` — 메인 페이지 스크린샷 캡처 - - 추가: 의료진 페이지, 시술 안내 페이지도 스크린샷 (siteMap에서 URL 추출) - - DB: `scrape_data.screenshots[]`에 base64 이미지 저장 +- [ ] **WP-V1**. 멀티페이지 스크린샷 캡처 + 저장 (45min) + - 파일: `collect-channel-data/index.ts`에 추가 (Phase 2 — 검증된 URL들이 있는 시점) + - 캡처 대상 (6+ 페이지): + 1. **병원 메인 페이지** — 배너, 소셜 아이콘, 카카오톡 버튼 + 2. **의료진 페이지** — siteMap에서 `/doctor`, `/team`, `/staff` URL 자동 탐지 + 3. **시술 안내 페이지** — `/surgery`, `/service`, `/procedure` 탐지 + 4. **YouTube 채널 랜딩** — `youtube.com/@{handle}` (구독자 수, 고정 영상) + 5. **Instagram 프로필** — `instagram.com/{handle}` (팔로워 수, 피드 미리보기) + 6. **강남언니 페이지** — verified URL (평점, 리뷰 수, 의료진) + - API: Firecrawl `formats: ["screenshot"]` + `screenshotOptions: { fullPage: false, quality: 80, viewport: { width: 1280, height: 800 } }` + - 저장: Supabase Storage `screenshots/{reportId}/{channel}.png` → signed URL + - DB: `channel_data.screenshots[]`에 `ScreenshotEvidence` 형태로 저장 + - 프론트엔드: 이미 구현된 `ScreenshotProvider` → `EvidenceGallery` → `EvidenceLightbox` 에 바로 연결 - [ ] **WP-V2**. Gemini Vision 분석 (1h) - 파일: 새 `_shared/visionAnalysis.ts` - - API: Google Gemini `gemini-2.0-flash-exp` (Vision 모델) - - 프롬프트: 스크린샷에서 다음 정보 추출: - - 개원 연도 / 운영 기간 ("SINCE 2004", "21년 무사고" 등) - - 의료진 이름 + 전문 분야 (프로필 사진 옆 텍스트) - - 인증/수상 마크 (JCI, 보건복지부, 의료관광 인증 등) - - 시술 카테고리 (메뉴 구조에서 추출) - - 소셜 미디어 아이콘 위치 + URL (이미지 기반 버튼 포함) - - 카카오톡/라인 플로팅 버튼 유무 - - 브랜드 컬러 + 로고 디자인 요소 - - 응답: JSON 구조로 반환 + - API: Google Gemini `gemini-2.0-flash` (GEMINI_API_KEY 이미 .env에 있음) + - 각 스크린샷별 분석 프롬프트: + - **메인 페이지**: 개원 연도, 소셜 아이콘, 카카오톡 버튼, 브랜드 컬러, 슬로건, 인증 마크 + - **의료진 페이지**: 의사 이름 + 전문 분야 + 약력 (이미지 내 텍스트 OCR) + - **시술 페이지**: 시술 카테고리, 가격 정보, 전후 사진 유무 + - **YouTube 랜딩**: 구독자 수, 영상 수, 최근 업로드 제목, 고정 영상 + - **Instagram 프로필**: 팔로워 수, 게시물 수, 최근 피드 미리보기, 바이오 + - **강남언니**: 평점(/10), 리뷰 수, 의료진 수, 시술 종류 + - 응답: 페이지별 JSON → `channel_data.visionAnalysis`에 저장 -- [ ] **WP-V3**. Vision 데이터 파이프라인 통합 (30min) - - 파일: `discover-channels/index.ts`, `collect-channel-data/index.ts` +- [ ] **WP-V3**. Vision 데이터 → 리포트 + 증거 통합 (45min) + - 파일: `generate-report/index.ts`, `transformReport.ts` - 변경: - - Vision에서 발견한 소셜 핸들 → 채널 발견에 추가 (Source 4) - - Vision에서 추출한 의료진 정보 → channel_data에 추가 - - Vision에서 확인한 개원 연도 → clinic 정보에 반영 - - 스크린샷 원본 → DB에 저장 (리포트에서 증거로 활용) - - 검증: 그랜드성형외과 분석 → "SINCE 2004" 개원 연도 추출 확인 + - 스크린샷 → `report.screenshots[]` (ScreenshotEvidence 형태) + - 프론트엔드의 기존 EvidenceGallery/Lightbox에 바로 표시 + - Vision 추출 의료진 → `clinicSnapshot.doctors` 보강 (이미지에서 읽은 정보) + - Vision 추출 개원 연도 → `clinicSnapshot.established` 보강 + - Vision 추출 YouTube/Instagram 수치 → KPI에 cross-reference + - 각 채널 진단 항목에 `evidenceIds` 연결 → 해당 채널 스크린샷이 증거로 표시 + - 검증: + - 그랜드성형외과 분석 → "SINCE 2004" 개원 연도 추출 확인 + - YouTube 분석 섹션 → 채널 랜딩 스크린샷 썸네일 표시 확인 + - Instagram 분석 섹션 → 프로필 스크린샷 표시 확인 + - 스크린샷 클릭 → 라이트박스 모달에서 풀사이즈 보기 확인 ### Vision Analysis 프롬프트 설계