시범 입력에서만 잘되는 프롬프트는 부족해
지시문을 쓰는 일에서 어려운 대목은 평범한 입력 하나를 처리하게 만드는 게 아니야. 입력이 비었거나, 사용자가 공격적이거나, 문서 언어가 다르거나, 스키마의 필드가 빠졌을 때도 정해둔 방식으로 움직이게 해야 해. 예외 입력은 희귀한 별종이 아니라 실제 요청의 긴 꼬리에 늘 섞여 있어.
먼저 이름 붙일 예외 유형
- 빈 입력 — 사용자 메시지가 빈 문자열이거나 null인 경우.
- 잘못된 자료형 — 글을 기대했는데 숫자나 이미지가 들어온 경우.
- 적대적 입력 — 요약해야 할 자료 안에 모델을 조종하려는 지시가 숨은 경우.
- 다른 언어 — 영어만 처리하도록 만든 프롬프트에 한국어가 들어온 경우.
- 범위 밖 요청 — 코드 생성 프롬프트에 환불 문의가 들어온 경우.
- 빠진 맥락 — 꼭 필요한 문서를 검색하지 못한 경우.
- 잘린 맥락 — 문서 쉰 개 가운데 다섯 개만 전달된 경우.
예외를 제약으로 바꾸는 틀
각 예외에 이름을 붙이고, 그 상황에서 취할 행동을 한 문장으로 못 박아. "If the input is empty, return {error: 'empty_input'}. If the input is in a language other than English, translate before answering and tag the translation. If a required document is missing, return {status: 'insufficient_context', missing: [...]}."처럼 말이야.
물론 프롬프트는 조금 길어져. 대신 월요일 아침의 실제 요청에서도 살아남아.