LangChain이란?
LangChain은 LLM(Large Language Model)을 활용한 애플리케이션을 쉽게 만들 수 있게 해주는 프레임워크입니다. 복잡한 프롬프트 관리, 문서 처리, 벡터 DB 연동 등을 간편하게 처리할 수 있습니다.
무엇을 만들 것인가
이번 튜토리얼에서는 회사 내부 문서를 학습한 Q&A 챗봇을 만들어보겠습니다. 이런 챗봇은 다음과 같은 경우에 유용합니다:
- 사내 정책이나 규정에 대한 질문 답변
- 제품 문서 검색
- 기술 문서 Q&A
필요한 준비물
pip install langchain
pip install openai
pip install chromadb
pip install pypdf
pip install tiktokenStep 1: 문서 로딩
먼저 학습시킬 문서를 로드합니다. PDF, 텍스트, 마크다운 등 다양한 형식을 지원합니다.
from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# PDF 문서 로드
loader = PyPDFLoader("company_policy.pdf")
documents = loader.load()
# 문서를 적절한 크기로 분할
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
splits = text_splitter.split_documents(documents)Step 2: 벡터 DB 구축
문서를 임베딩하여 벡터 DB에 저장합니다. 이렇게 하면 나중에 유사한 내용을 빠르게 검색할 수 있습니다.
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
# 임베딩 모델 설정
embeddings = OpenAIEmbeddings()
# 벡터 DB 생성
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embeddings,
persist_directory="./chroma_db"
)Step 3: 리트리버 설정
질문과 관련된 문서를 검색하는 리트리버를 설정합니다.
# 리트리버 생성
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 3} # 상위 3개 문서 반환
)Step 4: 챗봇 구성
이제 LLM과 리트리버를 결합하여 실제 챗봇을 만듭니다.
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# LLM 설정
llm = ChatOpenAI(
model_name="gpt-4",
temperature=0
)
# QA 체인 생성
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True
)Step 5: 질문하기
이제 챗봇에게 질문할 수 있습니다!
# 질문하기
question = "연차는 어떻게 신청하나요?"
result = qa_chain({"query": question})
print(result["result"])
print("\n참고 문서:")
for doc in result["source_documents"]:
print(f"- {doc.metadata['source']}")개선 팁
1. 프롬프트 커스터마이징
기본 프롬프트를 수정하여 답변 품질을 높일 수 있습니다.
from langchain.prompts import PromptTemplate
template = """다음 문서를 참고하여 질문에 답변하세요.
문서에 정보가 없다면 "해당 정보를 찾을 수 없습니다"라고 답하세요.
문서: {context}
질문: {question}
답변:"""
PROMPT = PromptTemplate(
template=template,
input_variables=["context", "question"]
)2. 메모리 추가
대화 기록을 기억하도록 만들 수 있습니다.
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)실제 활용 사례
저는 이 방법으로 회사 슬랙봇을 만들었습니다. 팀원들이 정책이나 절차에 대해 질문하면 자동으로 답변해주는 봇입니다.
결과적으로:
- 반복적인 질문 답변 시간 80% 절감
- 신입 사원 온보딩 시간 단축
- 문서 검색 효율성 향상
주의사항
중요한 의사결정에는 AI 답변만 의존하지 마세요. 항상 원본 문서를 확인하고, 필요하다면 사람에게 확인받는 것이 좋습니다.
마무리
LangChain을 사용하면 복잡한 RAG 시스템도 몇 줄의 코드로 구현할 수 있습니다. 여러분도 한번 만들어보세요!