여러 줄 주석이 설명보다 경위(예전·실측·지적)를 적고 있어 읽는 사람이 결론을 찾기 어려웠다. - ts·tsx·js·mjs·css·py 478개: 여러 줄 주석은 첫 문장 한 줄로, 과거형·날짜 문장은 삭제 - 주석 위치는 TypeScript 파서·파이썬 tokenize/ast 로 찾는다 — 문자열 안의 # · /* 는 건드리지 않는다 - eslint·ts·noqa·type: ignore 같은 지시 주석은 그대로 둔다 파이썬 275개 정리 전후 AST 동일, TS 298개 주석 뺀 토큰 동일(빈 JSX 주석 10곳만 차이). site·frontend·admin tsc, site vitest 105 passed Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
48 lines
2.3 KiB
Python
48 lines
2.3 KiB
Python
"""이 숙소의 노래 — 가사 프롬프트와 응답 스키마."""
|
|
|
|
# Suno 가 받는 style 문자열.
|
|
STYLE_CHOICES = [
|
|
"acoustic ballad", "city pop", "folk pop", "lo-fi", "bossa nova", "soft rock", "jazz",
|
|
]
|
|
|
|
RESPONSE_SCHEMA = {
|
|
"type": "object",
|
|
"properties": {
|
|
"title": {"type": "string", "description": "곡 제목. 상호를 그대로 쓰지 말고 한 구절로."},
|
|
"lyrics": {"type": "string", "description": "가사. [Verse]/[Chorus] 구조 태그를 포함한다."},
|
|
"style": {"type": "string", "description": f"장르·분위기. 다음 중 하나에서 시작한다: {', '.join(STYLE_CHOICES)}"},
|
|
},
|
|
"required": ["title", "lyrics", "style"],
|
|
}
|
|
|
|
|
|
def build_prompt(place_name: str, category_label: str, region: str, grounding: list[str], intro: str) -> str:
|
|
"""가사 프롬프트."""
|
|
material = "\n".join(f"- {line}" for line in grounding) or "- (확인된 항목 없음)"
|
|
intro_block = f"\n[이 숙소 소개문]\n{intro.strip()}\n" if (intro or "").strip() else ""
|
|
|
|
return f"""너는 작은 가게의 노래를 쓰는 작사가다. 아래 업소의 노래 가사를 쓴다.
|
|
|
|
[업소]
|
|
- 상호: {place_name}
|
|
- 업종: {category_label}
|
|
- 지역: {region or "(모름)"}
|
|
|
|
[확인된 항목 — 이 안에서만 말한다]
|
|
{material}
|
|
{intro_block}
|
|
[쓰는 법]
|
|
- 한국어. 40초 안에 불리는 길이다 — [Verse] 한 덩이 + [Chorus] 한 덩이면 충분하다.
|
|
- 구조 태그([Verse], [Chorus])를 반드시 넣는다. Suno 가 이 태그로 곡을 나눈다.
|
|
- **없는 것을 말하지 않는다.** 위 목록에 없는 시설·풍경·서비스를 지어내지 않는다.
|
|
지역과 계절, 머무는 마음처럼 사실 확인이 필요 없는 정서는 자유롭게 쓴다.
|
|
- **숫자를 넣지 않는다.** 요금·전화번호·주소·객실 수는 가사에 쓰지 않는다.
|
|
틀리면 손님이 손해를 보고, 노래는 고쳐 부르기 어렵다.
|
|
- 광고 문구처럼 쓰지 않는다("최고", "1등", "예약하세요"). 손님이 흥얼거릴 노래다.
|
|
- 상호는 후렴에 한 번쯤 자연스럽게 넣는다.
|
|
|
|
[출력]
|
|
title(곡 제목) · lyrics(가사) · style(장르·분위기) 를 JSON 으로 준다.
|
|
style 은 이 업소의 분위기에 맞는 것을 고른다: {', '.join(STYLE_CHOICES)}.
|
|
"""
|