Category
모델 출력을 의도대로 만들기 위해 지시·예시·출력 형식을 설계하는 작업이다. 프롬프트가 곧 인터페이스이자 사양이므로, 모호한 지시는 그대로 무음 오류로 돌아온다. 최근에는 구조화 출력 강제와 평가 기반 반복(eval-driven)이 즉흥적 튜닝을 대체하고 있다.
JSON 스키마 강제(constrained decoding)는 파서 깨짐을 0으로 만들지만, 모델이 토큰을 문법 제약 안으로만 샘플링하게 묶는다. 그 결과 자유 형식에서 먼저 풀어쓰던 중간 추론이 사라지고, 분류·수치 추출 같은 판단형 작업에서 정확도가 눈에 띄게 떨어지는 사례가 보고된다. 원인은 구조다. 스키마가 답 필드를 앞에 두면 모델은 생각하기 전에 답부터 커밋하게 된다. 회피책은 스키마 안에 reasoning 필드를 답 필드보다 먼저 배치해 constrained decoding 안에서도 사고 순서를 보존하거나, 추론 단계는 자유 텍스트로 받고 마지막 한 번만 구조화 호출로 분리하는 2단 패턴이다. OpenAI strict 모드가 minItems/maxItems류를 거부하는 것처럼, '강제'가 표현력을 좁히는 비용은 늘 따라온다.
Anthropic이 프롬프트 캐싱 1시간 TTL을 정식 옵션으로 열면서 긴 시스템 프롬프트·도구 정의·few-shot 블록을 반복 호출에서 90% 싸게 재사용할 수 있게 됐다. 핵심은 캐시 쓰기에 25%(5분)·100%(1시간) 프리미엄이 붙고, 읽기는 0.1배라는 비대칭 구조다. 그래서 캐시는 '읽기 횟수가 쓰기 비용을 상쇄할 만큼 자주, TTL 안에 다시 들어오는가'로 판단해야 한다. 실무에서 자주 깨지는 지점은 캐시 브레이크포인트 뒤에 타임스탬프나 사용자 ID 같은 가변 토큰을 한 줄 끼워 넣는 것으로, 접두사 해시가 통째로 어긋나 캐시가 매번 미스 난다. 캐시 가능한 정적 블록을 앞에, 가변 컨텍스트를 뒤에 배치하는 순서 규율이 비용 그래프를 바꾼다.