본문 바로가기
AI

LangChain을 이용한 RAG 서비스 개발

by 보증서는 남자 2024. 11. 4.

LLM을 이용해 어플리케이션을 만들때 주로 사용되는 라이브러리로 LangChain이 있습니다. 오늘은 LangChain이라는게 무엇인지 어떻게 서비스를 개발하는지에 대해 알아보겠습니다.

LangChain이란?

LangChain은 대규모 언어 모델(LLM)을 사용하여 애플리케이션을 개발하기 위한 프레임워크입니다. 이 프레임워크는 LLM을 다른 데이터 소스 및 컴퓨팅 환경과 쉽게 통합할 수 있도록 도와줍니다. 특히 RAG(Retrieval-Augmented Generation) 시스템을 구축하는 데 매우 유용합니다.

LangChain의 주요 개념

  1. Chains: 여러 컴포넌트를 연결하여 복잡한 작업을 수행합니다.
  2. Agents: 주어진 목표를 달성하기 위해 자율적으로 행동하는 엔티티입니다.
  3. Memory: 대화 히스토리나 중간 상태를 저장합니다.
  4. Prompts: LLM에 입력할 텍스트 템플릿을 관리합니다.
  5. Document Loaders: 다양한 소스에서 데이터를 로드합니다.
  6. Vector Stores: 임베딩을 저장하고 검색합니다.

LangChain 사용 방법

LangChain은 모듈화된 구조를 가지고 있어, 필요한 컴포넌트만 선택적으로 사용할 수 있습니다. 일반적인 사용 단계는 다음과 같습니다:

  1. 필요한 모듈 임포트
  2. LLM 설정
  3. 문서 로더 선택 및 데이터 로드
  4. 벡터 스토어 생성
  5. 검색 체인 구성
  6. 쿼리 실행 및 결과 확인

파이썬을 이용한 Quick Start

아래는 LangChain을 사용하여 간단한 RAG 시스템을 구축하는 예제입니다:

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
from langchain.document_loaders import TextLoader

# 1. 문서 로드
loader = TextLoader('path/to/your/file.txt')
documents = loader.load()

# 2. 텍스트 분할
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# 3. 임베딩 생성 및 벡터 스토어 구축
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)

# 4. 검색 체인 생성
qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever())

# 5. 쿼리 실행
query = "What is the main topic of this document?"
result = qa.run(query)
print(result)

이 예제에서는 다음 단계를 수행합니다:

  1. 텍스트 파일을 로드합니다.
  2. 문서를 작은 청크로 분할합니다.
  3. OpenAI의 임베딩 모델을 사용하여 각 청크의 벡터 표현을 생성합니다.
  4. Chroma 벡터 스토어에 임베딩을 저장합니다.
  5. OpenAI의 LLM을 사용하여 RetrievalQA 체인을 생성합니다.
  6. 사용자 쿼리에 대한 응답을 생성합니다.

이렇게 내가 가지고 있는 문서를 통해 LLM에게 특정 정보를 주입하여 더욱 자세한 정보를 얻을 수 있습니다. 예제에서는 텍스트 문서를 통해 예제가 작성되었지만 어떻게 응용하느냐에 따라 다양한 어플리케이션을 만들 수 있습니다.

 

인터넷을 검색하는 동작을 추가한다면 검색이 가능하고 검색 결과를 보여주는 서비스를 만들 수 있습니다. 퍼플랙시티 같은 서비스가 대표적일 것 같네요. 개인 소프트웨어 프로젝트를 검색하도록 만든다면 코파일럿이나 커서 AI 같은 서비스를 만들 수도 있습니다.

LangChain을 사용하는 이유

1. 모듈화 및 추상화

  • LangChain은 복잡한 LLM 기반 작업을 모듈화하고 추상화합니다.
  • 개발자는 저수준의 세부 사항에 신경 쓰지 않고 고수준의 기능에 집중할 수 있습니다.
  • 이는 개발 시간을 단축시키고 코드의 가독성을 높입니다.

2. 다양한 LLM 지원

  • OpenAI, Hugging Face, Cohere 등 다양한 LLM 제공업체를 지원합니다.
  • 필요에 따라 쉽게 LLM을 교체하거나 여러 LLM을 함께 사용할 수 있습니다.

3. 통합된 개발 환경

  • 문서 로딩, 텍스트 분할, 임베딩, 벡터 저장소 등 LLM 애플리케이션 개발에 필요한 다양한 기능을 제공합니다.
  • 이러한 기능들이 잘 통합되어 있어 일관된 방식으로 개발할 수 있습니다.

4. RAG (Retrieval-Augmented Generation) 구현 용이성

  • LangChain은 RAG 시스템 구축을 위한 다양한 도구와 컴포넌트를 제공합니다.
  • 문서 검색, 관련 정보 추출, LLM과의 통합 등 RAG 구현에 필요한 모든 단계를 쉽게 처리할 수 있습니다.

5. 메모리 및 상태 관리

  • 대화 히스토리나 중간 상태를 쉽게 관리할 수 있는 메모리 컴포넌트를 제공합니다.
  • 이를 통해 상태를 유지해야 하는 복잡한 대화형 AI 시스템을 구축할 수 있습니다.

6. 확장성 및 유연성

  • 사용자 정의 컴포넌트를 쉽게 추가하고 기존 컴포넌트를 확장할 수 있습니다.
  • 이는 특정 비즈니스 요구사항에 맞는 커스텀 솔루션을 개발하는 데 유용합니다.

7. 활발한 커뮤니티 및 지속적인 개발

  • LangChain은 활발한 개발자 커뮤니티를 가지고 있어 지속적으로 개선되고 있습니다.
  • 새로운 기능과 최신 AI 기술이 빠르게 통합되고 있습니다.

8. 테스트 및 실험 용이성

  • LangChain은 다양한 실험과 프로토타이핑을 쉽게 할 수 있는 환경을 제공합니다.
  • 이는 QA 엔지니어가 AI 기반 테스트 도구를 개발하고 실험하는 데 매우 유용합니다.

LangChain을 사용함으로써, 개발자들은 복잡한 LLM 기반 애플리케이션을 더 빠르고 효율적으로 개발할 수 있습니다. 

 

RAG라는 시스템을 통해 LLM을 이용해 애플리케이션을 개발하지만 이 과정에서 필요한 기능들을 제공해주는 것이 LangChain 라이브러리라고 볼 수 있을 것 같습니다.

 

다음 포스팅에서는 이런 LLM 기반의 서비스를 어떻게 테스트하는지에 대해 작성해보겠습니다.

'AI' 카테고리의 다른 글

LangSmith - RAG 서비스 테스트  (1) 2024.11.21
LLM과 성능향상 방법  (3) 2024.10.28