o2o-infinith-demo/docs/AI_DISCOVERY_BUILD2_HANDOVER.md
Haewon Kam 13a8fca775 chore(reports): docs/reports를 고객·단계별 폴더로 분류
- viewclinic/01_readiness_report (진단 덱 v1.0·v2_표준캔버스·v1.1 + 빌더) / 02_poc_proposal (POC 정본·v3 + 빌더) / 03_question_bank (QB 120문항·실측·엑셀) / 04_supporters (GEO 계획·콘텐츠 기획·감사 엑셀)
- taeha/ (태하 리포트 + 빌더), ibk/ (기업은행 블로그 감사), landing/ (랜딩 시안·스크린샷·HTML 내보내기)
- README.md에 구조·정본/파생본·빌드 명령 안내
- 경로 참조 갱신: 핸드오버 문서 4개, QB 스크립트 3개, 빌더 docstring, discovery 페이지 주석
- 이전에 삭제된 POC v2_표준캔버스 2파일 삭제 반영

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 13:03:53 +09:00

8.7 KiB
Raw Blame History

AI Discovery · Build 2 Handover (자동 채점 파이프라인)

2026-08-31 랜딩(/discovery) 프로덕션 배포까지 끝난 상태에서, 다음 세션이 이어받을 빌드 범위를 담는다. 직전 인수인계는 docs/AI_DISCOVERY_FRONTEND_HANDOVER.md(랜딩 구현, 완료됨).


0. 다음 세션 실행 프롬프트 (복붙용)

docs/AI_DISCOVERY_BUILD2_HANDOVER.md 를 읽고 AI Discovery 자동 채점기를 구현해줘.

- P0: scripts/audit_aeo_geo.py — 병원 URL 입력 → 기준표 auto 22항목(55점) 자동 채점
  → src/data/discovery_<id>.ts 초안 생성 (semi/manual은 'unverified' + 수집된 증거 메모)
- 참조 구현: ~/Claude/Agentic Marketing/ADO2/009. AEO-GEO/06_skill-snapshot/scripts/crawler_audit.py
- 검증: 뷰성형외과를 재채점해 auto 항목 판정이 discovery_viewclinic.ts 기존 실측과 일치해야 한다
- 완료 기준: 새 업체 URL 1개를 30분 안에 /discovery/:id 리포트로 올릴 수 있다
끝나면 git push + vercel --prod 까지.

1. 현재 상태 (2026-08-31)

항목 상태
랜딩 /discovery 프로덕션 배포 완료 (https://infinith-demo.vercel.app/discovery)
리포트 /discovery/:id viewclinic 48점/C, taeha 68점/B
데이터 파생 랜딩·리포트의 모든 수치는 scoreDiscovery 계산값. nextGradeTarget·scorePctColor 헬퍼 포함
lint npm run lint(tsc) 0 에러. 단, 실제 검사는 AEO-GEO-Audit 워크트리에서만 가능 (main 워크트리는 node_modules에 tsc 없음)
영업 자료 POC 제안서 docs/reports/viewclinic/02_poc_proposal/Viewclinic_POC_Proposal.pptx/.pdf (10장)

2. 확정 결정 (2026-08-31 haewon)

  1. 태하 케이스는 랜딩 샘플로 노출하지 않는다. 랜딩 샘플은 뷰성형외과 단일 유지. /discovery/taeha 라우트와 데이터는 삭제하지 않고 유지한다 (영업 시 직접 링크로만 사용).
  2. 리포트 PDF는 항상 PPTX 덱을 만든 뒤 soffice 변환으로 뽑는다 (HTML 인쇄 방식 금지, 기존 결정 유지).

3. 빌드 우선순위

P0 · 자동 채점기 scripts/audit_aeo_geo.py

지금 병목은 진단 1건당 수작업 실측이다. 기준표 36항목의 자동화 가능성은 이미 rubric에 태깅되어 있다:

method 항목 수 배점 합 처리 방식
auto 22 55점 스크립트가 판정까지
semi 5 17점 스크립트가 증거 수집, 판정은 사람 (C1 정의문·C4 수치·C7 E-E-A-T·D3 오픈웹·D5 플레이스)
manual 9 28점 'unverified' 유지 (A6·C8·D1·D2·D4·E1~E4)
  • 입력: 메인 URL + 대표 시술/서비스 페이지 URL 1개 (뷰성형외과 실측과 동일 조건: JS 미실행 HTML 기준)
  • 항목별 체크 로직은 src/data/aeoGeoRubric.ts의 howToCheck 필드에 이미 구현 스펙으로 적혀 있다
  • 출력: src/data/discovery_<id>.ts 초안. evidence는 실측 문자열로 채운다 (판정 근거 없는 항목을 0점 처리하지 말 것, 분모 제외 규칙 유지)
  • 운영 플로우: 스크립트 초안 → 사람이 semi/manual 보정 → discoveryResults.ts에 1줄 추가 → 리포트 페이지 자동 생성
  • 형태는 로컬 Python 스크립트로 시작한다. Edge Function(discover-aeo-geo)化는 셀프서브 전환이 결정된 뒤에 한다.
  • 업체 선정 방법(기존 확정): 분야 키워드로 네이버 검색 → 파워링크 1위 광고주. 광고 리다이렉트는 직접 못 따라가므로 상호로 재검색해 도메인 확인.

P1 · 계약 후 미검증 해소 runbook

뷰성형외과(또는 첫 계약 업체) 계약 시 실행할 체크리스트를 문서화한다: E1 서버로그 AI 봇 추출, E2 GA4 AI 채널그룹, E3 GSC, A6 Bing Webmaster, D6 Wikidata 조회. 미검증 5개가 해소되면 분모가 88 → 100으로 바뀌므로 총점이 변한다는 사실을 리포트에 명시한다.

P1 · 덱 스크린샷 자동 갱신

랜딩 변경 → 캡처 → 크롭(히어로 0~1384px, 리포트 밴드는 #F4F6FB 행 범위 감지) → build_viewclinic_poc_deck.py 리빌드를 스크립트 하나로 묶는다.

P2 · 기준선 스팟체크 러너 (E4)

질의 10개 × 5회 반복, 언급률 + 신뢰구간으로만 기록한다. 답변엔진 소비자 UI 자동 조회는 약관 위반이므로 금지 (API 또는 수동 기록).

4. 오너 결정 대기 (빌드 전 haewon 확인)

  • 카테고리 가중치 확정 (현행 A20/B20/C25/D20/E10/F5)
  • 랜딩 CTA 형태: 현행 mailto(o2oteam@o2o.kr) 유지 vs 신청 폼(Supabase 테이블) 전환. 계약 기반 영업 모델(PART III 피봇)과의 정합을 보고 결정한다.
  • 다음 진단 대상 업종·키워드

5. P0 자동 채점기 — 구현 완료 (2026-08-31)

scripts/audit_aeo_geo.py 구현·검증 완료. 표준 라이브러리만 사용(의존성 없음), fetch는 curl 백엔드(macOS 인증서 문제 회피).

사용법

python3 scripts/audit_aeo_geo.py <메인URL> <대표시술페이지URL> \
    --id <라우트id> --name <상호> --industry "<업종 (지역)>"
# 옵션: --out <경로> --json <경로> --skip-ts --force

→ src/data/discovery_<id>.ts 초안 생성. auto 22항목은 판정까지, semi 5항목(C1·C4·C7·D3·D5)은 'unverified' + 수집 증거 메모, manual 9항목은 'unverified' + 확인 방법 메모. 판정 근거를 못 얻은 auto 항목(예: meta generator 없음)은 0점이 아니라 unverified로 남긴다 (분모 제외 규칙 준수).

검증 결과 (뷰성형외과 재채점, 2026-08-31)

auto 22항목 중 18항목 기존 실측(2026-08-28)과 일치. 불일치 4건은 전부 스크립트가 아니라 기존 수작업의 한계였다:

항목 기존 스크립트 원인
A5 2 3 기존 실측은 post-sitemap만 봄(lastmod 2024-05). page/portfolio-sitemap에는 진짜 per-page 갱신일(2026-08) 존재
B4 2 1 시술 페이지에 세 번째 주소 표기("서울시 강남구 봉은사로 107, 뷰성형외과빌딩(논현동…") 실재 — 기존 실측 누락
C6 1 3 시술 페이지에 article:modified_time·dateModified(2026-04-17) 실재 — 기존 실측은 메인만 확인
D6 unverified 0 Wikidata API 조회 자동화됨 (기존은 미실시)

2026-08-31 haewon 결정으로 위 4건을 discovery_viewclinic.ts에 반영했다: 48점/C (42.1/88, 검증 31/36) → 49점/C (44.0/89, 검증 32/36). 등급·목표(C→B) 변화 없음. keyFindings의 "15개월간 갱신 신호 없음"은 "갱신 신호는 살아 있다(단 블로그는 2024-05 정지)"로 정정.

새 업체 30분 온보딩 플로우

  1. 업체 선정(네이버 파워링크 1위 광고주 → 상호 재검색으로 도메인 확인) — 5분
  2. audit_aeo_geo.py 실행 → 초안 생성 — 3분
  3. semi 5항목 판정 확정(초안의 증거 메모 참고) + manual 중 공개 페이지 실측 가능한 D1·D2·D4 확인 — 15분
  4. keyFindings 3~5개 + actions P0~P2 작성, discoveryResults.ts에 1줄 추가 — 5분
  5. npm run lint(AEO-GEO-Audit 워크트리) → git push → vercel --prod — 2분

6. 하지 않을 것 (정직성 규약, 변경 없음)

  • llms.txt 제작·판매
  • "스키마 넣으면 인용된다" 약속, 순위·노출 보장 문구
  • 단발 조회 보고
  • 답변엔진 소비자 UI 자동 조회
  • 네이버 블로그 증량 (AI 크롤러 차단 확인, 글로벌 AEO 기여 0)

추가 (2026-09-01) · Question Bank 120문항 2엔진 실측

  • 산출물: docs/reports/viewclinic/03_question_bank/Viewclinic_AI_Discovery_Question_Bank.md(120문항+사전판정+검증), Viewclinic_QB_Results_Combined.md(질문별 상위 병원 통합표), Viewclinic_QB_Results_TOP50.xlsx(5시트), raw scripts/out/qb_{openai,perplexity}_results.jsonl
  • 러너: scripts/run_question_bank_openai.py (OpenAI Responses API + web_search 서울 고정 / Perplexity sonar, JSONL 재개 가능, UI 자동조회 금지 원칙 준수). 통합표 scripts/merge_qb_results.py, 엑셀 scripts/export_qb_excel.py. POC 후 재측정 시 JSONL 삭제 후 동일 명령 재실행.
  • 결과: 브랜드 질문 뷰 언급 GPT 97% · PPLX 100%, 논브랜드 GPT 11%(10/84) · PPLX 3%(3/84). 시술 정보 52문항은 두 엔진 모두 0건.
  • 점수 정합성 교정: scoreDiscovery 계산값 50/C(44.1/89, 검증 32/36)로 덱 2종(진단 리포트·POC 제안서)과 문서를 일괄 교정. 재채점 커밋 메시지의 49는 반올림 착오였음. 랜딩 스크린샷(shots/land_hero·land_report)도 프로덕션 50점 화면으로 재캡처(구판은 *_48pt_backup.png).
  • 기준표 v1.1 과제 5건: docs/AEO_GEO_RUBRIC.md 맨 아래 절 참조 (서브도메인 실측, D3 표면 범위 확대, 엔진별 판정, 브랜드/논브랜드 축, 점수 표기 정합성).