"프롬프트 엔지니어링"이 직업으로 뜬다는 소리가 들리는데, 솔직히 반쯤은 맞고 반쯤은 과장. 실제로 서비스에 붙이면서 알게 된 것들 정리.
1. Role 위치가 생각보다 중요
system에 역할 박고, user에 지시 박는 게 기본인데, few-shot 예제를 system에 넣을지 user에 넣을지에 따라 결과가 꽤 다르다. gpt-3.5-turbo 기준, user 쪽 예제가 따라가는 경향이 강함. system은 "영구 제약", user는 "최근 예시" 느낌으로 취급되는 것 같다.
2. 순서 효과
같은 프롬프트에서도 지시 → context → 질문 순이 context → 지시 → 질문보다 결과가 더 안정적이었다. 모델이 맨 앞/맨 뒤를 더 잘 기억하는 U-shape recency 문제가 확실히 있다.
3. JSON 강제
"반드시 아래 JSON 스키마로만 응답. 다른 텍스트 금지.
{ "intent": "...", "entities": ["..."], "confidence": 0.0 }
만약 판단 불가면 intent="unknown"."
이렇게 박아도 Sure, here is the JSON: 같은 서문이 10%쯤 섞여 나온다. 그래서 assistant 턴을 {로 시작하게 prefill하는 트릭을 씀. 첫 토큰을 강제하면 뒤따르는 토큰이 JSON 문법에 묶임.
4. 체이닝
한 번에 다 시키지 말 것. (a) 의도 분류 → (b) 필요한 정보 retrieval → (c) 답변 생성. 세 단계 분리하니 각 단계가 gpt-3.5-turbo로도 충분함. 비용 1/3, 품질은 오히려 상승.
5. 길이 제어
"간결하게"는 잘 안 먹힘. "최대 3문장, 120자 이내"는 꽤 잘 먹힘. 숫자로 박는 게 답이다.
CoT(chain-of-thought)는 gpt-4에서 드라마틱하게 먹히는데 3.5에선 오히려 산만해지는 경우가 많다. 모델마다 튜닝 포인트가 다르다.
댓글 없음:
댓글 쓰기