Command Palette

Search for a command to run...

ai

프롬프트 엔지니어링 실전 가이드 - AI 요약 품질 3배 높이기

YouTube 영상 요약 시스템을 개발하며 배운 프롬프트 작성 기법과 품질 향상 노하우를 공유합니다.


프롬프트가 왜 중요한가?

같은 LLM 모델이라도 프롬프트에 따라 결과물의 품질이 크게 달라집니다. YouTube 영상 요약 시스템을 개발하면서 프롬프트를 여러 차례 개선했고, 최종적으로 일관되고 유용한 요약을 얻을 수 있었습니다.

1. 출력 형식 명시하기

Before (모호한 지시)

다음 영상 자막을 요약해주세요.

자막: ...

문제점:

  • 요약 길이가 들쭉날쭉
  • 형식이 매번 다름 (문단, 목록, 혼합)
  • 불필요한 서론이 붙음 ("네, 요약해 드리겠습니다...")

After (명확한 형식 지정)

다음 유튜브 영상 자막을 500자 이내로 요약해주세요.
AI 모델의 답변 여부나 서론 없이 작성된 요약 내용만 즉시 출력하세요.

영상 제목: ${title}

[출력 형식]
(핵심 주제 1줄)

(주요 내용 3-5개 bullet point)

(결론/시사점 1줄)

* 주의: "핵심 주제:", "주요 내용:" 같은 라벨을 붙이지 말고 내용만 작성하세요.

자막:
${transcript}

개선 효과:

  • 일관된 구조의 요약
  • 바로 사용 가능한 형태
  • 파싱이 쉬움

2. 역할(Role) 부여하기

LLM에게 특정 역할을 부여하면 해당 관점에서 더 적절한 응답을 생성합니다.

const prompt = `당신은 AI/개발 분야 전문 에디터입니다.
다음 기술 영상의 핵심을 개발자 관점에서 요약해주세요.
 
기술적 용어는 유지하되, 불필요한 인사말이나 채널 홍보 내용은 제외하세요.
...`;

3. Few-shot 예시 제공하기

원하는 출력의 예시를 보여주면 품질이 향상됩니다.

const prompt = `다음 뉴스 기사를 요약해주세요.
 
[좋은 요약 예시]
입력: "OpenAI가 GPT-5를 발표했습니다. 새 모델은..."
출력:
OpenAI, GPT-5 정식 발표
 
- 멀티모달 성능 대폭 향상
- 컨텍스트 윈도우 200K 토큰 지원
- API 가격 GPT-4 대비 50% 인하
 
경쟁사 대비 기술 격차 유지, 가격 경쟁력 확보
 
[요약할 기사]
${article}
`;

4. 제약 조건 명시하기

하지 말아야 할 것을 명확히 지정합니다.

const constraints = `
[제약 조건]
- 500자 이내로 작성
- 영어 원문이라도 한국어로 요약
- "요약:", "결론:" 같은 라벨 사용 금지
- AI가 작성했다는 언급 금지
- 영상의 구독/좋아요 요청은 제외
`;

5. 컨텍스트 제공하기

LLM이 더 정확한 판단을 할 수 있도록 맥락 정보를 제공합니다.

const prompt = `다음은 AI 기술 유튜브 채널 "${channelName}"의 영상입니다.
채널 특성: ${channelDescription}
영상 길이: ${duration}
조회수: ${viewCount}
 
위 맥락을 고려하여 요약해주세요.
...`;

6. Fallback 프롬프트 설계

자막이 없거나 정보가 부족할 때를 위한 대체 프롬프트를 준비합니다.

// 자막 기반 요약 (1순위)
const transcriptPrompt = `자막 기반 요약...`;
 
// 영상 설명 기반 요약 (2순위)
const descriptionPrompt = `자막을 확인할 수 없습니다.
아래 영상 정보만으로 간략히 요약해주세요.
 
영상 제목: ${title}
채널명: ${channelName}
영상 설명: ${description.slice(0, 2000)}
 
* 확인되지 않은 내용은 추측하지 마세요.
`;

7. 프롬프트 템플릿화

프로젝트에서 사용하는 프롬프트를 함수로 관리합니다.

// lib/prompts.ts
 
export function createSummaryPrompt(params: {
  title: string;
  content: string;
  maxLength?: number;
  language?: 'ko' | 'en';
}) {
  const { title, content, maxLength = 500, language = 'ko' } = params;
 
  if (language === 'ko') {
    return `다음 유튜브 영상 자막을 ${maxLength}자 이내로 한국어로 요약해주세요.
AI 모델의 서론 없이 요약 내용만 출력하세요.
 
영상 제목: ${title}
 
[출력 형식]
(핵심 주제 1줄)
 
(주요 내용 3-5개 bullet point)
 
(결론 1줄)
 
자막:
${content.slice(0, 15000)}`;
  }
 
  return `Summarize the following transcript in ${maxLength} characters...`;
}
 
export function createNewsPrompt(params: {
  title: string;
  content: string;
  source: string;
}) {
  return `다음 뉴스 기사를 한국어로 요약해주세요...`;
}

8. 반복 개선 (Iteration)

프롬프트는 한 번에 완성되지 않습니다. 실제 결과물을 보며 반복 개선합니다.

개선 사이클

1. 초기 프롬프트 작성
        ↓
2. 여러 샘플로 테스트
        ↓
3. 문제점 파악
   - 형식 불일치?
   - 정보 누락?
   - 불필요한 내용?
        ↓
4. 프롬프트 수정
        ↓
5. 다시 테스트

실제 개선 로그

버전문제해결
v1"네, 요약해드리겠습니다" 서론"서론 없이 즉시 출력" 추가
v2"핵심 주제:" 라벨 붙음"라벨 없이 내용만" 명시
v3영어 원문 그대로 출력"반드시 한국어로" 강조
v4구독 요청 포함됨"채널 홍보 제외" 추가

실전 팁

1. 토큰 길이 고려

Gemini Flash는 약 15,000자까지 안정적으로 처리합니다. 긴 자막은 앞부분만 사용합니다.

const truncated = transcript.slice(0, 15000);

2. 온도(Temperature) 조절

요약처럼 정확성이 중요한 작업은 낮은 temperature를 사용합니다.

const model = genAI.getGenerativeModel({
  model: "gemini-2.0-flash",
  generationConfig: {
    temperature: 0.3,  // 낮을수록 일관된 출력
    maxOutputTokens: 1000,
  },
});

3. 결과 후처리

LLM 출력은 항상 후처리가 필요할 수 있습니다.

function cleanSummary(raw: string): string {
  return raw
    .replace(/^(요약|Summary|결론)[::]\s*/gm, '')  // 라벨 제거
    .replace(/^[-•]\s*/gm, '- ')  // bullet 통일
    .trim();
}

프롬프트 엔지니어링에 정답은 없습니다. 자신의 유스케이스에 맞게 실험하고 개선하는 과정이 핵심입니다.

마무리

좋은 프롬프트의 특징:

  • 명확한 지시: 모호함 없이 구체적
  • 형식 지정: 원하는 출력 구조 명시
  • 제약 조건: 하지 말아야 할 것 명시
  • 예시 제공: 원하는 결과의 샘플
  • 반복 개선: 실제 결과 기반 수정

이 원칙들을 적용하면서 요약 품질이 크게 향상되었습니다. 여러분의 프로젝트에도 적용해보세요.