•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();
}프롬프트 엔지니어링에 정답은 없습니다. 자신의 유스케이스에 맞게 실험하고 개선하는 과정이 핵심입니다.
마무리
좋은 프롬프트의 특징:
- 명확한 지시: 모호함 없이 구체적
- 형식 지정: 원하는 출력 구조 명시
- 제약 조건: 하지 말아야 할 것 명시
- 예시 제공: 원하는 결과의 샘플
- 반복 개선: 실제 결과 기반 수정
이 원칙들을 적용하면서 요약 품질이 크게 향상되었습니다. 여러분의 프로젝트에도 적용해보세요.