o2o-site-AEO/solution/backend/scripts/generate_lodging_catchphrases.py
Mina Choi 11d30bb3d1 [chore] solution,admin,ontology: 코드 주석을 한 줄로 — 히스토리 주석 삭제
여러 줄 주석이 설명보다 경위(예전·실측·지적)를 적고 있어 읽는 사람이 결론을 찾기 어려웠다.

- 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>
2026-09-28 16:05:19 +09:00

43 lines
2.0 KiB
Python

"""숙박 공통 감성 문구를 한 번 생성한다."""
import asyncio
import json
import sys
from pathlib import Path
import httpx
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from services.llm.gemini import DEFAULT_MODEL, call, extract_text
PROMPT = """여러 숙박업체 홈페이지 첫 화면에서 돌아가며 보여 줄 한국어 감성 문구 10개를 작성하세요.
호텔, 모텔, 펜션, 게스트하우스 어디에나 쓸 수 있어야 합니다.
휴식, 여행, 머무는 시간, 일상에서의 잠깐의 쉼을 담아 담백하고 따뜻하게 쓰세요.
각 문구는 공백 포함 15~30자. 과장, 진부한 최상급, 상호명, 지명, 계절, 날씨,
바다/숲/정원/독채 등 시설이나 경관, 청결/조식/가격 등 확인이 필요한 사실과 서비스 약속은 금지합니다.
서로 다른 표현으로 정확히 10개, 문자열 JSON 배열만 반환하세요."""
async def main():
async with httpx.AsyncClient(timeout=90) as client:
response = await call(client, DEFAULT_MODEL, {
"contents": [{"role": "user", "parts": [{"text": PROMPT}]}],
"generationConfig": {
"responseMimeType": "application/json",
"responseSchema": {"type": "ARRAY", "items": {"type": "STRING"}, "minItems": 10, "maxItems": 10},
"temperature": 0.8,
},
}, max_retries=0)
lines = json.loads(extract_text(response))
if not isinstance(lines, list) or len(lines) != 10 or not all(isinstance(s, str) and 15 <= len(s.strip()) <= 30 for s in lines):
raise ValueError("문구 개수·길이 검증 실패")
lines = [s.strip() for s in lines]
if len(set(lines)) != 10:
raise ValueError("중복 문구")
target = Path(__file__).resolve().parents[2] / "site/src/lib/lodging-catchphrases.json"
target.write_text(json.dumps(lines, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
print(json.dumps({"model": DEFAULT_MODEL, "items": lines}, ensure_ascii=False))
if __name__ == "__main__":
asyncio.run(main())