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

문제 상황

고객 문의를 자동 분류하는 기능을 GPT-4 API로 구현했는데, 초기 버전에서는 분류 정확도가 60% 정도에 그쳤다. 특히 애매한 경계 케이스에서 일관성 없는 결과를 반환했다.

개선 과정

1. 명확한 역할과 제약사항 정의

처음에는 "사용자 문의를 분류해줘"라는 단순한 프롬프트를 사용했다. 역할과 출력 형식을 명확히 지정하니 일관성이 개선되었다.

const systemPrompt = `당신은 고객 문의를 분류하는 전문가입니다.
다음 카테고리 중 하나로만 분류하세요: 결제, 배송, 환불, 기술지원, 기타
반드시 JSON 형식으로 응답하세요: {"category": "카테고리명", "confidence": 0.95}`;

2. Few-shot 예시 추가

경계 케이스에 대한 예시를 3~5개 포함시키니 정확도가 크게 향상되었다.

const fewShotExamples = [
  { input: "결제했는데 배송이 안와요", output: { category: "배송", confidence: 0.9 } },
  { input: "환불 계좌 변경하고 싶어요", output: { category: "환불", confidence: 0.95 } },
  { input: "앱이 자꾸 꺼져요", output: { category: "기술지원", confidence: 0.9 } }
];

3. Temperature 조정

분류 작업은 창의성보다 일관성이 중요해서 temperature를 0.3으로 낮췄다. 같은 입력에 대한 결과 편차가 줄어들었다.

4. 검증 로직 추가

function validateResponse(response) {
  const parsed = JSON.parse(response);
  const validCategories = ['결제', '배송', '환불', '기술지원', '기타'];
  
  if (!validCategories.includes(parsed.category)) {
    throw new Error('Invalid category');
  }
  
  if (parsed.confidence < 0.7) {
    // 신뢰도 낮은 경우 사람 검토 큐로
    return { ...parsed, needsReview: true };
  }
  
  return parsed;
}

결과

  • 분류 정확도: 60% → 87%
  • 응답 형식 일관성: 95% 이상
  • 사람 검토 필요 케이스: 명확히 구분 가능

배운 점

LLM API를 사용할 때 프롬프트 설계가 모델 선택만큼 중요하다는 것을 체감했다. 특히 프로덕션 환경에서는 출력 형식 검증과 신뢰도 기반 fallback 로직이 필수였다. Few-shot 예시는 문서화 역할도 겸해서 팀원들이 시스템 동작을 이해하는 데도 도움이 되었다.

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