GPT-4 API로 프롬프트 체이닝 구현하며 배운 것들

배경

사용자 피드백을 자동으로 분류하고 요약하는 기능을 만들어야 했다. 처음엔 하나의 긴 프롬프트로 모든 작업을 시키려 했는데, 결과가 일관성이 없었다.

프롬프트 체이닝 적용

작업을 3단계로 분리했다.

// 1단계: 카테고리 분류
const categoryPrompt = `다음 피드백을 기능/버그/UI/기타 중 하나로 분류:
${feedback}`;

// 2단계: 감정 분석
const sentimentPrompt = `다음 피드백의 감정을 긍정/중립/부정으로 분석:
${feedback}`;

// 3단계: 요약 (이전 결과 활용)
const summaryPrompt = `카테고리: ${category}, 감정: ${sentiment}
위 맥락을 바탕으로 다음 피드백을 한 문장으로 요약:
${feedback}`;

각 단계의 출력을 다음 단계의 입력으로 사용하니 훨씬 정확해졌다.

비용 최적화

문제는 API 호출이 3배로 늘어난 것이었다. 배치 처리로 개선했다.

async function processBatch(feedbacks) {
  const categories = await Promise.all(
    feedbacks.map(f => classifyCategory(f))
  );
  
  // 같은 카테고리끼리 묶어서 처리
  const grouped = groupBy(feedbacks, (f, i) => categories[i]);
  // ...
}

동시 요청 수를 제한하고, 짧은 피드백은 단일 프롬프트로 처리하도록 했다.

교훈

  • 복잡한 작업은 단계별로 분리하는 게 정확도가 높다
  • 각 단계의 출력을 구조화(JSON)하면 다음 단계에서 활용하기 좋다
  • 비용과 레이턴시를 항상 모니터링해야 한다
  • 모든 요청에 체이닝이 필요한 건 아니다

프롬프트 엔지니어링은 결국 작업 분해와 최적화의 문제였다.

GPT-4 API로 프롬프트 체이닝 구현하며 배운 것들