안녕하세요! 문서 로더와 타사 통합에 대한 자세한 설명을 준비했습니다. 이 내용을 통해 LangChain을 사용하여 Hacker News와 같은 외부 서비스에서 데이터를 가져와서 OpenAI의 언어 모델과 함께 사용하는 방법을 알아보겠습니다.
LangChain은 언어 모델과 함께 일할 때 다양한 데이터 소스에서 문서를 로드하고 처리할 수 있는 강력한 도구입니다. 문서 로더는 PDF나 CSV 같은 로컬 파일뿐만 아니라, 웹 사이트나 타사 API에서 데이터를 가져올 수 있습니다. 이번에는 Hacker News의 댓글을 가져와 요약하는 예제를 통해 타사 통합에 대해 알아보겠습니다.
문서 로더는 다양한 형식의 문서를 프로그램으로 가져와서 처리할 수 있게 해주는 도구입니다. 로컬 파일 시스템에 있는 문서뿐만 아니라, 웹 URL이나 API를 통해 접근 가능한 데이터도 로드할 수 있습니다.
타사 통합은 LangChain이 AWS S3, 구글 클라우드, 위키피디아, Hacker News 등과 같은 외부 서비스와 연결하여 데이터를 가져올 수 있게 해줍니다. 그러나 이러한 통합은 해당 서비스의 API와 의존성이 있기 때문에, 서비스의 정책 변경이나 API 업데이트로 인해 통합이 중단될 수 있습니다. 예를 들어, Twitter의 API 정책 변경으로 인해 Twitter 통합이 현재 작동하지 않을 수 있습니다. 이러한 점을 염두에 두고 개발을 진행해야 합니다.
Hacker News는 기술 및 스타트업 관련 뉴스를 공유하는 플랫폼으로, 다양한 토론과 댓글이 활발하게 이루어집니다. 우리는 특정 게시물의 댓글을 가져와서 요약해 보는 예제를 진행할 것입니다.
먼저 필요한 패키지를 설치해야 합니다.
pip install langchain openai python-dotenv
langchain
: LangChain 라이브러리openai
: OpenAI의 API를 사용하기 위한 라이브러리python-dotenv
: .env
파일에서 환경 변수를 로드하기 위한 라이브러리프로젝트 디렉토리에 .env
파일을 생성하고, OpenAI API 키를 저장합니다.
OPENAI_API_KEY=your_openai_api_key_here
your_openai_api_key_here
부분을 실제 API 키로 대체하세요.
이제 코드를 단계별로 설명하겠습니다.
from langchain.document_loaders import HackerNewsLoader
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from dotenv import load_dotenv
import os
HackerNewsLoader
: Hacker News에서 데이터를 가져오는 로더ChatOpenAI
: OpenAI의 채팅 모델ChatPromptTemplate
, HumanMessagePromptTemplate
: 프롬프트를 생성하기 위한 템플릿load_dotenv
: .env
파일에서 환경 변수를 로드os
: 운영 체제와 상호 작용하기 위한 모듈load_dotenv()
.env
파일에서 환경 변수를 로드합니다.
분석하고자 하는 Hacker News 게시물의 URL을 설정합니다.
hn_post_url = 'https://news.ycombinator.com/item?id=YOUR_POST_ID'
YOUR_POST_ID
를 원하는 게시물의 ID로 변경하세요. 예를 들어, 게시물의 URL이 https://news.ycombinator.com/item?id=123456
이라면 YOUR_POST_ID
를 123456
으로 바꾸면 됩니다.
loader = HackerNewsLoader(hn_post_url)
documents = loader.load()
loader.load()
: 해당 게시물의 댓글을 문서 형식으로 로드합니다.첫 번째 댓글의 내용을 확인해 봅니다.
print(documents[0].page_content)
chat = ChatOpenAI(temperature=0)
temperature
: 생성되는 텍스트의 무작위성을 결정합니다. 0으로 설정하면 가장 가능성이 높은 응답을 생성합니다.human_message_prompt = HumanMessagePromptTemplate.from_template(
"다음 Hacker News 댓글을 간략히 요약해 주세요:\n\n{comment}"
)
{comment}
부분에 실제 댓글 내용이 들어갈 것입니다.chat_prompt = ChatPromptTemplate.from_messages([human_message_prompt])
summary = chat(chat_prompt.format_prompt(comment=documents[0].page_content).to_messages())
chat_prompt.format_prompt(...)
: 프롬프트에 실제 데이터를 삽입합니다.chat(...)
: 모델에 프롬프트를 전달하고 응답을 받습니다.print(summary.content)
마지막으로 전체 코드를 제공합니다.
from langchain_community.document_loaders import HNLoader
from langchain_community.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from dotenv import load_dotenv
import os
# 환경 변수 로드
load_dotenv()
# OpenAI API 키 설정
openai_api_key = os.getenv('OPENAI_API_KEY')
# Hacker News 게시물 URL 설정
hn_url = "https://news.ycombinator.com/item?id=41992116" # 원하는 게시물 ID로 변경 가능
hn_loader = HNLoader(hn_url)
# 게시물 및 댓글 데이터 로드
data = hn_loader.load()
# 첫 번째 댓글 내용 확인 (옵션)
first_comment_text = data[0].page_content if data else "댓글이 없습니다."
# OpenAI 채팅 모델 설정
chat = ChatOpenAI(model='gpt-4', temperature=0, openai_api_key=openai_api_key)
# 프롬프트 템플릿 생성
human_message_prompt = HumanMessagePromptTemplate.from_template(
"다음 Hacker News 댓글을 간략히 요약해 주세요:\n\n{comment}"
)
# 채팅 프롬프트 생성
chat_prompt = ChatPromptTemplate.from_messages([human_message_prompt])
# 첫 번째 댓글 요약 요청
if first_comment_text:
summary = chat(chat_prompt.format_prompt(comment=first_comment_text).to_messages())
print("요약 결과:")
print(summary.content)
else:
print("댓글이 없습니다.")
documents
는 댓글의 리스트이므로, for
루프를 사용하여 모든 댓글을 요약할 수 있습니다.for doc in documents:
summary = chat(chat_prompt.format_prompt(comment=doc.page_content).to_messages())
print("원본 댓글:")
print(doc.page_content)
print("요약:")
print(summary.content)
print("-" * 50)
all_comments = "\n\n".join([doc.page_content for doc in documents])
summary = chat(chat_prompt.format_prompt(comment=all_comments).to_messages())
print("전체 댓글 요약:")
print(summary.content)
이렇게 LangChain을 사용하여 Hacker News의 댓글을 가져와서 OpenAI의 언어 모델로 요약하는 방법을 알아보았습니다. 이 과정에서 문서 로더와 타사 통합의 개념, 프롬프트 템플릿 생성, 모델 호출 방법 등을 배웠습니다.
타사 통합은 강력한 도구이지만, API의 변화나 서비스 정책에 따라 작동하지 않을 수 있으므로 항상 최신 정보를 확인하고 에러에 대비해야 합니다.
더 다양한 데이터 소스와 모델을 활용하여 자신만의 응용 프로그램을 만들어 보세요!