레이블이 Prompt인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Prompt인 게시물을 표시합니다. 모든 게시물 표시

20230523

ChatGPT API 프롬프트 엔지니어링 실전

"프롬프트 엔지니어링"이 직업으로 뜬다는 소리가 들리는데, 솔직히 반쯤은 맞고 반쯤은 과장. 실제로 서비스에 붙이면서 알게 된 것들 정리.

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에선 오히려 산만해지는 경우가 많다. 모델마다 튜닝 포인트가 다르다.