15분
#LangChain#RAG#챗봇

LangChain으로 나만의 AI 챗봇 만들기

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 tiktoken

Step 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 시스템도 몇 줄의 코드로 구현할 수 있습니다. 여러분도 한번 만들어보세요!