프롬프트 체이닝으로 LLM 응답 품질 개선하기

문제 상황

사내 문서 요약 도구를 만들면서 Claude에게 "문서를 읽고 핵심 내용을 추출한 뒤 3줄 요약과 액션 아이템을 작성하라"는 단일 프롬프트를 사용했다. 결과물이 매번 달랐고, 때로는 요약이 빠지거나 액션 아이템이 모호했다.

프롬프트 체이닝 적용

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

1단계: 핵심 내용 추출

다음 문서에서 핵심 사실과 의사결정 내용만 추출해주세요.
불필요한 배경 설명은 제외하고, bullet point로 나열하세요.

2단계: 요약 생성

위에서 추출한 내용을 바탕으로 3줄 요약을 작성하세요.
각 문장은 한 가지 주제만 다루어야 합니다.

3단계: 액션 아이템 도출

추출된 핵심 내용에서 실행 가능한 액션 아이템을 찾아주세요.
담당자, 기한, 구체적 행동이 명확한 것만 포함하세요.

구현

Node.js로 간단히 구현했다.

const Anthropic = require('@anthropic-ai/sdk');
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });

async function chainPrompts(document) {
  // 1단계
  const extraction = await client.messages.create({
    model: 'claude-3-5-sonnet-20250219',
    max_tokens: 1024,
    messages: [{
      role: 'user',
      content: `다음 문서에서 핵심 사실과 의사결정 내용만 추출해주세요:\n\n${document}`
    }]
  });

  const keyPoints = extraction.content[0].text;

  // 2단계
  const summary = await client.messages.create({
    model: 'claude-3-5-sonnet-20250219',
    max_tokens: 512,
    messages: [{
      role: 'user',
      content: `다음 내용을 3줄로 요약하세요:\n\n${keyPoints}`
    }]
  });

  // 3단계
  const actions = await client.messages.create({
    model: 'claude-3-5-sonnet-20250219',
    max_tokens: 512,
    messages: [{
      role: 'user',
      content: `다음에서 액션 아이템을 도출하세요:\n\n${keyPoints}`
    }]
  });

  return {
    summary: summary.content[0].text,
    actions: actions.content[0].text
  };
}

결과

  • 응답 일관성이 눈에 띄게 향상됨
  • 각 단계별 출력을 검증하기 쉬워짐
  • API 비용은 약 2배 증가했지만 품질 개선이 더 중요했음
  • 중간 결과를 캐싱하면 비용 최적화 가능

교훈

복잡한 작업은 하나의 프롬프트로 해결하려 하지 말고, 단계를 나눠서 처리하는 게 답이었다. 각 단계의 출력이 다음 단계의 입력이 되도록 설계하면 LLM이 더 집중된 결과를 낸다.