LLM을 이용해 어플리케이션을 만들때 주로 사용되는 라이브러리로 LangChain이 있습니다. 오늘은 LangChain이라는게 무엇인지 어떻게 서비스를 개발하는지에 대해 알아보겠습니다.
LangChain이란?
LangChain은 대규모 언어 모델(LLM)을 사용하여 애플리케이션을 개발하기 위한 프레임워크입니다. 이 프레임워크는 LLM을 다른 데이터 소스 및 컴퓨팅 환경과 쉽게 통합할 수 있도록 도와줍니다. 특히 RAG(Retrieval-Augmented Generation) 시스템을 구축하는 데 매우 유용합니다.
LangChain의 주요 개념
- Chains: 여러 컴포넌트를 연결하여 복잡한 작업을 수행합니다.
- Agents: 주어진 목표를 달성하기 위해 자율적으로 행동하는 엔티티입니다.
- Memory: 대화 히스토리나 중간 상태를 저장합니다.
- Prompts: LLM에 입력할 텍스트 템플릿을 관리합니다.
- Document Loaders: 다양한 소스에서 데이터를 로드합니다.
- Vector Stores: 임베딩을 저장하고 검색합니다.
LangChain 사용 방법
LangChain은 모듈화된 구조를 가지고 있어, 필요한 컴포넌트만 선택적으로 사용할 수 있습니다. 일반적인 사용 단계는 다음과 같습니다:
- 필요한 모듈 임포트
- LLM 설정
- 문서 로더 선택 및 데이터 로드
- 벡터 스토어 생성
- 검색 체인 구성
- 쿼리 실행 및 결과 확인
파이썬을 이용한 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)
이 예제에서는 다음 단계를 수행합니다:
- 텍스트 파일을 로드합니다.
- 문서를 작은 청크로 분할합니다.
- OpenAI의 임베딩 모델을 사용하여 각 청크의 벡터 표현을 생성합니다.
- Chroma 벡터 스토어에 임베딩을 저장합니다.
- OpenAI의 LLM을 사용하여 RetrievalQA 체인을 생성합니다.
- 사용자 쿼리에 대한 응답을 생성합니다.
이렇게 내가 가지고 있는 문서를 통해 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 |