docs: update Sprint 0 Vision — multi-page screenshots + channel evidence in report
WP-V1: 6+ page screenshots (main, doctors, surgery, YouTube landing, Instagram profile, 강남언니) stored in Supabase Storage WP-V2: Gemini Vision analysis per screenshot (OCR + structured extraction) WP-V3: Screenshots as evidence in report (connected to existing EvidenceGallery/Lightbox system) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>claude/bold-hawking
parent
3f1a25e298
commit
494dc186c5
|
|
@ -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 프롬프트 설계
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue