필수 패키지 설치 및 환경 설정
이 튜토리얼에서는 Next.js 환경에서 유튜브 콘텐츠 요약 앱을 구축하는 방법을 자세히 알아봅니다. 시작하기 전에 필요한 패키지를 설치하고 API 키를 설정해야 합니다.
먼저, LangChain과 OpenAI를 사용하기 위해 다음 명령어를 사용하여 필요한 종속성을 설치합니다.
yarn add @langchain/openai langchain
이 명령어는 LangChain과 OpenAI를 프로젝트에 추가하여 인공지능 기반 기능을 통합할 수 있도록 합니다. OpenAI API 키를 설정하는 것도 중요합니다. 이는 OpenAI 플랫폼에 접속하여 텍스트 요약 및 분석 기능을 사용하는 데 필요합니다. API 키는 .env.local
파일에 안전하게 저장해야 합니다. 이 파일을 생성하고 다음 변수를 추가합니다.
OPENAI_API_KEY=your-api-key
이 키를 안전하게 관리하고 노출하지 않도록 주의해야 합니다. 보안은 개발 과정에서 매우 중요한 고려 사항입니다.
이 단계에서는 개발 환경을 설정하고 필요한 도구를 설치하는 방법을 자세히 설명합니다. OpenAI API 키를 설정하여 요약 기능이 원활하게 작동하도록 보장합니다.
LangChain과 OpenAI 통합
이 섹션에서는 랭체인과 OpenAI를 통합하여 유튜브 비디오의 텍스트 요약을 생성하는 방법을 설명합니다.
랭체인은 언어 모델을 기반으로 애플리케이션 개발을 간소화하는 프레임워크이며, OpenAI는 강력한 AI 모델을 제공합니다. 이 두 기술을 결합하여 효과적인 요약 도구를 만들 수 있습니다.
랭체인 라이브러리를 사용하여 OpenAI 모델과 상호 작용하는 방법을 알아봅니다. 다음 코드 스니펫은 랭체인과 OpenAI를 통합하는 데 사용되는 필수 모듈을 가져오는 방법을 보여줍니다.
import { ChatOpenAI } from "@langchain/openai";
import { PromptTemplate } from "langchain/core/prompts";
import { StringOutputParser } from "langchain/core/output_parsers";
ChatOpenAI는 OpenAI의 채팅 모델을 사용하기 위한 클래스이며, PromptTemplate는 모델에 전달할 프롬프트를 생성하는 데 사용됩니다. StringOutputParser는 모델에서 생성된 출력을 문자열로 변환하는 데 사용됩니다. 이러한 모듈을 사용하면 OpenAI 모델을 쉽게 구성하고 사용할 수 있습니다.
이 단계에서는 코드 스니펫과 함께 랭체인의 주요 기능을 사용합니다. 이를 통해 유튜브 비디오에서 얻은 텍스트를 OpenAI를 사용하여 요약할 수 있습니다.
프롬프트 템플릿 설정 및 활용
OpenAI 모델에 효과적인 지침을 제공하기 위해 프롬프트 템플릿을 설정하는 것이 중요합니다. 프롬프트 템플릿은 모델이 따라야 할 단계를 정의하고, 요약의 품질을 향상시키는 데 도움이 됩니다.
다음은 템플릿의 예입니다.
const TEMPLATE = `INSTRUCTIONS:
For the this {text} complete the following steps.
Generate the title for based on the content provided
Summarize the following content and include 5 key topics, writing in first person using normal tone.
Write a youtube video description
- Include heading and sections.
- Incorporate keywords and key takeaways
Generate bulleted list of key points and benefits
Return possible and best recommended key words`
이 템플릿은 모델에게 제목 생성, 주요 내용 요약, 유튜브 비디오 설명 작성 등의 단계를 안내합니다. 템플릿 변수를 사용하여 모델에 전달할 텍스트를 동적으로 지정할 수 있습니다.
프롬프트 템플릿을 설정하고 사용하는 방법을 보여주는 코드 스니펫입니다. 이를 통해 모델이 원하는 결과를 생성하도록 조정할 수 있습니다.
요약 생성 함수 구현
요약 생성 함수는 랭체인과 OpenAI를 사용하여 텍스트를 요약하는 핵심 로직을 구현합니다. 이 함수는 OpenAI 모델을 구성하고, 프롬프트 템플릿을 적용하며, 출력을 파싱하는 단계를 포함합니다.
다음은 요약 생성 함수의 예입니다.
async function generateSummary(content: string, template: STRING) {
const prompt = PromptTemplate.fromTemplate(template);
const model = new ChatOpenAI({
openAIApiKey: process.env.OPENAI_API_KEY,
modelName: process.env.OPENAI_MODEL ?? "gpt-4-turbo-preview",
temperature: parseFloat(process.env.OPENAI_TEMPERATURE) ?? 0.7,
maxTokens: parseInt(process.env.OPENAI_MAX_TOKENS) ?? 4000,
});
const outputParser = new StringOutputParser();
const chain = prompt.pipe(model).pipe(outputParser);
try {
const summary = await chain.invoke({ text: content });
return summary;
} catch (error) {
if (error instanceof Error) {
return new Response(JSON.stringify({ error: error.message }));
}
return new Response(JSON.stringify({ error: "Failed to generate summary." }));
}
}
이 함수는 ChatOpenAI 클래스를 사용하여 OpenAI 모델을 초기화하고, PromptTemplate를 사용하여 프롬프트를 생성합니다. chain.invoke 메서드를 사용하여 모델을 호출하고, 결과를 얻습니다. 오류 처리를 통해 안정적인 요약 생성을 보장합니다.
이 단계에서는 실제 코드 구현을 통해 텍스트 요약 기능을 통합합니다. 이를 통해 유튜브 비디오에서 추출한 텍스트를 효율적으로 요약할 수 있습니다.
프런트엔드에서 요약 기능 사용
이제 요약 생성 함수를 프런트엔드에서 사용하는 방법을 알아봅니다.
프런트엔드 코드를 통해 유튜브 비디오 URL을 입력받고, 백엔드 API를 호출하여 요약을 생성합니다. 다음은 프런트엔드 코드의 예입니다.
// 프런트엔드 코드 예시 (Next.js)
import { useState } from 'react';
async function Summarize() {
const [url, setUrl] = useState('');
const [summary, setSummary] = useState('');
const handleSubmit = async (event) => {
event.preventDefault();
const response = await fetch('/api/summarize', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ videoId: url }),
});
const data = await response.json();
setSummary(data.summary);
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={url}
onChange={(e) => setUrl(e.target.value)}
placeholder="YouTube Video URL"
/>
<button type="submit">Summarize</button>
<div>{summary}</div>
</form>
);
}
export default Summarize;
이 코드는 useState 훅을 사용하여 URL과 요약 결과를 관리하고, fetch API를 사용하여 백엔드 API를 호출합니다. 폼 제출 시 요약 결과를 화면에 표시합니다.
이 단계에서는 프런트엔드에서 요약 기능을 통합하여 실제 사용자 인터페이스를 구축합니다. 이를 통해 사용자가 유튜브 비디오 URL을 입력하고 요약 결과를 확인할 수 있습니다.