GPT-4 API로 프롬프트 엔지니어링 실험하기
배경
사내 문서 분류 작업을 자동화하기 위해 GPT-4 API를 도입하게 됐다. GPT-3.5와 달리 추론 능력이 확실히 좋다는 평가를 받고 있어서, 프롬프트 설계에 집중하면 좋은 결과를 낼 수 있을 것 같았다.
Zero-shot vs Few-shot
처음엔 단순한 지시만 줬다.
const prompt = `다음 문서를 카테고리로 분류해줘: ${document}`;
정확도가 70% 정도였다. Few-shot 예시를 3개 추가하니 87%로 상승했다.
const examples = [
{ doc: '예시1', category: 'A' },
{ doc: '예시2', category: 'B' },
{ doc: '예시3', category: 'C' }
];
const prompt = `
다음 예시를 참고해서 문서를 분류해줘:
${examples.map(e => `문서: ${e.doc}\n카테고리: ${e.category}`).join('\n\n')}
분류할 문서: ${document}
`;
Chain-of-Thought
복잡한 케이스에서는 "단계별로 생각하고 결론을 내려줘"라는 문구를 추가했다. 애매한 경계 케이스 처리가 개선됐다.
Temperature 조정
분류 작업은 일관성이 중요해서 temperature를 0.3으로 낮췄다. 창의적인 응답보다는 안정적인 결과가 필요한 경우였다.
const response = await openai.createChatCompletion({
model: 'gpt-4',
messages: [{ role: 'user', content: prompt }],
temperature: 0.3,
max_tokens: 100
});
배운 점
- 예시를 추가하는 것만으로도 성능 향상이 크다
- 프롬프트 길이와 비용을 고려해야 한다 (GPT-4는 비쌈)
- 구조화된 출력을 원하면 JSON 형식을 명시하는 게 효과적이다
- 실험과 측정이 필수다. 직관만으로는 부족하다
프롬프트 엔지니어링이 당분간은 중요한 스킬이 될 것 같다.