LangChain으로 사내 문서 검색 시스템 구축하기

배경

팀 내부 문서가 Confluence, Notion, Wiki 등에 분산되어 있어 필요한 정보를 찾기 어렵다는 불만이 계속 나왔다. GPT-4 API가 공개된 이후 RAG(Retrieval-Augmented Generation) 방식으로 문서 검색 시스템을 만들어보기로 했다.

기술 스택

  • LangChain: 문서 로딩, 청크 분할, 체인 구성
  • OpenAI API: text-embedding-ada-002, GPT-4
  • Pinecone: 벡터 DB
  • Python FastAPI: API 서버

구현 과정

1. 문서 임베딩

from langchain.document_loaders import ConfluenceLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Pinecone

# 문서 로드
loader = ConfluenceLoader(
    url="https://company.atlassian.net/wiki",
    username=username,
    api_key=api_key
)
documents = loader.load()

# 청크 분할 (토큰 제한 고려)
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
splits = text_splitter.split_documents(documents)

# 벡터 저장
embeddings = OpenAIEmbeddings()
vectorstore = Pinecone.from_documents(splits, embeddings, index_name="docs")

2. 검색 체인 구성

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(model_name="gpt-4", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)

result = qa_chain({"query": "배포 프로세스는?"})

문제와 해결

청크 크기 조정

초기에 chunk_size를 500으로 설정했더니 문맥이 끊겨 답변 품질이 낮았다. 1000으로 늘리고 overlap을 200으로 설정하니 개선됐다.

비용 관리

GPT-4 API 비용이 생각보다 높아서 임베딩만 배치로 처리하고, 실시간 검색은 캐싱을 적용했다. 자주 묻는 질문은 Redis에 24시간 캐싱한다.

결과

슬랙 봇으로 연동해서 팀원들이 자연어로 문서를 검색할 수 있게 됐다. 정확도는 약 70% 정도로, 완벽하진 않지만 문서 찾는 시간은 확실히 줄었다.

다음 단계로는 파인튜닝과 프롬프트 엔지니어링으로 정확도를 높여볼 계획이다.

LangChain으로 사내 문서 검색 시스템 구축하기