여러 줄 주석이 설명보다 경위(예전·실측·지적)를 적고 있어 읽는 사람이 결론을 찾기 어려웠다. - 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>
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
"""지역 이야기 프롬프트 계약 — 문장은 여기서 만들지 않고 **읽어 온다**."""
|
||
import json
|
||
from functools import lru_cache
|
||
from pathlib import Path
|
||
|
||
_SPEC_PATH = Path(__file__).with_name("section_prompts.json")
|
||
|
||
SYSTEM_PROMPT = (
|
||
"너는 지역 콘텐츠 리서처다. 검색으로 확인한 것만 쓰고, 확인하지 못한 값은 필드를 통째로 뺀다. "
|
||
"JSON 하나만 출력한다."
|
||
)
|
||
|
||
|
||
@lru_cache(maxsize=1)
|
||
def _spec() -> dict:
|
||
"""산출물 로드."""
|
||
try:
|
||
return json.loads(_SPEC_PATH.read_text(encoding="utf-8"))
|
||
except FileNotFoundError as ex: # pragma: no cover - 배포 누락은 기동 시 바로 드러난다
|
||
raise RuntimeError(
|
||
f"{_SPEC_PATH.name} 이 없다 — 레포 루트에서 `npm run export:prompts` 를 돌려야 한다"
|
||
) from ex
|
||
|
||
|
||
def kinds() -> list[str]:
|
||
return list(_spec()["specs"].keys())
|
||
|
||
|
||
def label(kind: str) -> str:
|
||
return _spec()["specs"][kind]["label"]
|
||
|
||
|
||
def max_items(kind: str) -> int:
|
||
return int(_spec()["specs"][kind]["maxItems"])
|
||
|
||
|
||
def build_prompt(kind: str, region: str) -> str:
|
||
"""지역 하나 × 종류 하나의 프롬프트."""
|
||
spec = _spec()["specs"].get(kind)
|
||
if spec is None:
|
||
raise ValueError(f"모르는 지역 이야기 종류: {kind}")
|
||
|
||
head = (
|
||
"너는 지역 콘텐츠 리서처다. 아래 조건에 맞는 JSON 하나만 출력한다.\n"
|
||
f"\n[지역] {region}\n"
|
||
f"\n아래 '해야 할 일'에서 [지역] = {region}. "
|
||
"업소가 지정되지 않았으므로 특정 업소를 가리키는 문장(connection 등)은 쓰지 않는다.\n"
|
||
)
|
||
return f"{head}\n{spec['task']}\n{_spec()['rules']}{spec['rules']}"
|