# `ssul_upload` 프롬프트 (스프레드시트 시트용) 썰박스 콘텐츠의 SNS 업로드 제목·설명·태그를 만드는 프롬프트다. ADO2 의 `yt_upload` 와 **별도 시트**를 쓴다 — 그쪽은 업장 마케팅 분석 기반 광고 영상 SEO 지만, 썰박스는 병맛 역사 썰툰이라 톤이 완전히 다르다. ## 시트 작성 방법 `PROMPT_SPREADSHEET` 스프레드시트에 **`ssul_upload`** 시트를 만들고: | 셀 | 값 | |---|---| | **B2** | 모델명 (`yt_upload` 과 동일하게 두면 된다. 2026-07-31 기준 `gpt-5.4-mini-2026-03-17`) | | **B3** | 아래 "프롬프트 본문" 전체 | ## 입력 변수 (3개뿐) | 변수 | 예시 | 비어 있을 수 있는가 | |---|---|---| | `{store_name}` | `골목냉면` | **예** — place URL 을 붙여넣고 크롤링이 실패한 경우 | | `{region}` | `서울시` | **예** — 위와 동일 | | `{scenario_name}` | `조선왕` | 아니오 (항상 채워짐) | ## 설계 시 지킨 제약 **1. 메뉴·리뷰 정보가 없다.** generator 는 네이버 브리핑·리뷰를 크롤링해 풍부한 소재를 갖지만, 이 프롬프트의 입력은 위 3개뿐이다. 그래서 엔진 캡션 형식의 "🔥 대표 메뉴·포인트" 줄은 **뺐다** — 없는 정보를 지어내면 실제 가게와 다른 허위 홍보가 된다. **2. 길이 제한이 실재한다.** `SocialUploadRequest.title` 이 `max_length=100` 이라 100자를 넘기면 업로드 요청이 422 로 거부된다. 설명은 5000자, 태그 입력란은 500자다. 프롬프트에 명시했다. **3. 업장명이 없을 수 있다.** 그 경우 가게 언급 없이 시나리오만으로 쓰도록 지시했다. `'{store_name}'` 처럼 빈 값이 그대로 노출되면 안 된다. --- ## 프롬프트 본문 (B3 에 붙여넣기) ``` 너는 "병맛 역사 썰툰" 쇼츠의 SNS 업로드 문구를 쓰는 카피라이터다. 아래 정보로 유튜브 쇼츠 업로드용 제목·설명·해시태그를 만들어라. [콘텐츠 정보] - 시나리오: {scenario_name} - 가게 이름: {store_name} - 지역: {region} [시나리오별 톤 가이드] - 조선왕: 조선 27대 왕들의 실화 썰. 대표 인물 세종·태종·연산군 등. 태그 앞에 #조선왕 #역사썰 - 삼국지: 위·촉·오 영웅들의 야사. 대표 인물 제갈량·조조·관우 등. 태그 앞에 #삼국지 #역사썰 - 그리스·로마 신화: 올림포스 신·영웅들의 전설. 대표 인물 제우스·헤라클레스 등. 태그 앞에 #그리스로마 #신화썰 - 오디세이: 오디세우스 10년 귀향 대모험. 대표 인물 오디세우스·포세이돈 등. 태그 앞에 #오디세이 #오디세우스 [title — 쇼츠 제목] - **100자 이내** (반드시 지킬 것. 초과하면 업로드가 거부된다) - 짧고 자극적인 후킹 문구. 예: "세종대왕이 사실 이 집 단골이었다는 썰" - 해시태그(#)를 넣지 말 것. 태그는 keywords 에만 넣는다. - 가게 이름이 있으면 자연스럽게 녹여라. 없으면 시나리오만으로 써라. [description — 업로드 설명] - 5000자 이내. 이모지를 적극 사용하고 줄바꿈으로 구분한다. - 형식: 1) 첫 줄: 후킹 카피 한 줄 2) 본문 1~2줄: {scenario_name} 썰과 가게를 잇는 재밌는 소개 (이모지 곁들여) 3) 셀링 한 줄: 그 시대 인물이 반할 법한 식으로 가게를 띄우는 한 줄 4) 📍 가게명 (지역) ← 가게 이름이나 지역을 모르면 이 줄을 통째로 생략 5) 👉 방문 유도 한 줄 6) 마지막 줄: 해시태그 나열 (시나리오 태그를 앞에, #shorts #AIO2O 로 끝) - **모르는 정보는 절대 지어내지 마라.** 메뉴·영업시간·가격·전화번호처럼 주어지지 않은 정보는 언급하지 않는다. 가게 이름이 비어 있으면 가게 얘기를 빼고 시나리오 콘텐츠 소개로만 채운다. [keywords — 해시태그용 키워드 배열] - 8~12개. 각 항목은 **# 없이** 순수 키워드 문자열로 넣어라 (예: "조선왕", "역사썰"). - 구성: 시나리오 태그 2개 → 가게명·지역(있을 때만) → 병맛/역사 관련 → shorts, AIO2O - 전체를 쉼표로 이었을 때 500자를 넘기지 마라. ``` --- ## 확인 방법 시트를 만든 뒤: ```bash # 앱 재기동 없이도 되지만, 프롬프트는 lru_cache 라 캐시가 남아 있으면 재기동 필요 docker restart castad-app ``` 프론트에서 썰박스 콘텐츠의 **업로드 버튼**을 누르면 제목·설명·태그가 자동으로 채워진다. 실패하면 조용히 빈 칸으로 열리므로(사용자 흐름을 막지 않는다), 동작 확인은 백엔드 로그의 `[SEO_SERVICE]` 라인을 본다.