프롬프트 엔지니어링으로 GPT-4 API 응답 품질 개선하기

문제 상황

사내 고객 문의 챗봇에 GPT-4 API를 붙였는데, 같은 질문에도 응답 형식이 들쭉날쭉했다. 어떤 때는 간결하게 답하고, 어떤 때는 불필요한 설명을 덧붙였다. 특히 JSON 형식 응답을 요청했을 때 마크다운 코드블록으로 감싸거나 추가 설명을 붙이는 경우가 잦았다.

개선 과정

1. 시스템 프롬프트 구조화

기존에는 "당신은 고객 지원 봇입니다"처럼 모호하게 작성했다. 역할, 제약사항, 출력 형식을 명확히 분리했다.

const systemPrompt = `당신은 고객 문의 분류 전문가입니다.

## 역할
- 고객 문의를 카테고리별로 분류
- 긴급도 판단

## 제약사항
- 추가 설명 없이 JSON만 출력
- 확신이 없어도 가장 가능성 높은 카테고리 선택

## 출력 형식
{
  "category": "결제|배송|환불|기타",
  "urgency": "high|medium|low",
  "reason": "20자 이내 판단 근거"
}`;

2. Few-shot 예시 추가

단순 지시보다 예시를 보여주는 게 효과적이었다. 3~5개 정도의 입출력 예시를 포함시켰다.

const fewShotExamples = [
  {
    role: 'user',
    content: '결제했는데 주문 목록에 안 떠요'
  },
  {
    role: 'assistant',
    content: '{"category":"결제","urgency":"high","reason":"결제 확인 불가"}'
  }
];

const messages = [
  { role: 'system', content: systemPrompt },
  ...fewShotExamples,
  { role: 'user', content: userQuery }
];

3. Temperature 조정

창의성이 필요 없는 분류 작업이라 temperature를 0.3으로 낮췄다. 응답 일관성이 눈에 띄게 개선됐다.

const response = await openai.chat.completions.create({
  model: 'gpt-4',
  messages,
  temperature: 0.3,
  max_tokens: 150
});

결과

100건의 테스트 케이스 기준으로 JSON 파싱 실패율이 23%에서 2%로 감소했다. 분류 정확도도 78%에서 91%로 올랐다. 프롬프트 엔지니어링만으로도 충분히 실용적인 수준으로 끌어올릴 수 있었다.

교훈

  • 모호한 지시보다 구조화된 프롬프트가 효과적
  • Few-shot 예시는 3~5개가 적당 (더 많으면 토큰 낭비)
  • 작업 특성에 맞게 temperature 조정 필수
  • JSON 응답 요청 시 "JSON만 출력" 명시 중요
프롬프트 엔지니어링으로 GPT-4 API 응답 품질 개선하기