1. 랭체인(LangChain)이란 무엇인가?
    랭체인(LangChain)은 LLM 기반 애플리케이션 개발을 위한 오픈소스 프레임워크입니다. 이 프레임워크는 LLM의 추론 및 지식 확보 능력을 향상시키기 위한 다양한 모듈을 제공하여, 개발자들이 복잡한 LLM 워크플로우를 쉽게 구성하고 관리할 수 있도록 돕습니다.

랭체인의 주요 구성 요소
• Document Loader (문서 로더): 다양한 형식의 데이터(텍스트, PDF, HTML 등)를 로드합니다.
• Text Splitter (텍스트 분할기): 긴 문서를 LLM의 입력 제약에 맞춰 작은 청크로 나눕니다.
• Embedding Model (임베딩 모델): 텍스트를 벡터 형태로 변환하여 의미적 유사성을 계산할 수 있게 합니다.
• Vectorstore (벡터 저장소): 임베딩된 문서를 저장하고 효율적으로 검색할 수 있는 데이터베이스입니다.
• Retriever (검색기): 사용자 쿼리에 가장 관련성이 높은 문서를 벡터 저장소에서 찾아냅니다.
• LLM (거대 언어 모델): 실제 응답을 생성하는 핵심 모델입니다.
• Chain (체인): 여러 LLM 호출과 다른 유틸리티를 연결하여 복잡한 작업을 수행하는 시퀀스입니다.
• Agent (에이전트): LLM이 특정 작업을 위해 어떤 도구를 사용할지 스스로 결정하게 하는 모듈입니다.
• Tool (도구): 에이전트가 외부 데이터 소스나 API와 상호작용할 수 있게 해주는 기능입니다.
• Memory (메모리): 대화 기록을 유지하여 LLM이 이전 대화 내용을 참고할 수 있게 합니다.
• LMGraph: 랭체인의 향상된 버전으로, 복잡하고 상태 저장(stateful)이 필요한 LLM 애플리케이션을 위한 그래프 기반 프레임워크입니다.

  1. RAG 파이프라인과 LangChain의 역할
    랭체인은 특히 검색 증강 생성(Retrieval-Augmented Generation, RAG) 파이프라인 구축에 강점을 보입니다. RAG는 외부 지식 소스에서 관련 정보를 검색한 후, 이 정보를 바탕으로 LLM이 응답을 생성하여 LLM의 환각 현상을 줄이고 최신 정보를 제공하는 데 도움을 줍니다.

2.1. 데이터 준비 및 전처리 (Indexing)
1. Document Loading:
◦ 텍스트 파일(TextLoader), PDF 파일(PyPDFLoader), 특정 디렉토리(DirectoryLoader) 등 다양한 형식의 문서를 불러올 수 있습니다.
2. Chunking (Text Splitting):
◦ LLM은 입력 토큰 수에 제한이 있으므로, 긴 문서를 작은 단위로 쪼개는 과정이 필수적입니다.
◦ CharacterTextSplitter: 특정 구분자(separator)를 기준으로 텍스트를 분할합니다.
◦ RecursiveCharacterTextSplitter: 여러 구분자를 계층적으로 사용하여 더 의미 있는 청크를 생성합니다. 첫 번째 구분자로 분할하고, 여전히 긴 청크는 다음 구분자로 다시 분할하는 식입니다.
◦ SemanticChunker: 임베딩 모델을 사용하여 문장 간의 의미적 유사성(embedding distance)이 임계값 이하일 때 청크를 결합하고, 그렇지 않을 때 분리합니다.
◦ CharacterTokenSplitter: 토큰 기반 분할기로, LLM의 컨텍스트 제한이 보통 토큰 단위로 정해지므로 효율적입니다.

2.2. 지식 벡터화 및 저장 (Embedding & Vectorstore)
1. Embedding Model:
◦ OpenAIEmbeddings: OpenAI의 text-embedding-3-small 같은 모델을 사용하여 텍스트를 고정된 길이의 벡터로 변환합니다.
◦ HuggingFaceEmbeddings / HuggingFaceBgeEmbeddings: Hugging Face 모델(예: BAAI/bge-small-en-v1.5)을 사용하여 로컬에서 임베딩을 생성할 수 있으며, HuggingFaceBgeEmbeddings는 쿼리 인스트럭션이 추가되어 검색에 최적화된 임베딩을 생성합니다.

  1. Vectorstore:
    ◦ Chroma 또는 FAISS와 같은 벡터 저장소에 임베딩된 문서를 저장하여 효율적인 유사성 검색을 가능하게 합니다.
    2.3. 정보 검색 (Retrieval)
    사용자 쿼리가 들어오면 검색기는 벡터 저장소에서 관련 문서를 찾아냅니다.
    • similarity_search: 가장 유사한 문서를 반환합니다.
    • mmr (Maximal Marginal Relevance): 관련성뿐만 아니라 다양성도 고려하여 중복되지 않는 문서를 검색합니다.
    • similarity_score_threshold: 특정 유사도 점수 이상인 문서만 반환합니다.
    • k: 반환할 문서의 수를 지정합니다.
    • MultiQueryRetriever: LLM이 사용자 쿼리로부터 여러 개의 관련 쿼리를 생성하여 다양한 관점에서 문서를 검색합니다.
    • ParentDocumentRetriever: 작은 청크를 검색한 후, 해당 청크가 속한 더 큰 원본 문서를 반환하여 더 넓은 컨텍스트를 제공합니다.
    2.4. 응답 생성 (Generation)
    검색된 관련 문서를 프롬프트와 함께 LLM에 전달하여 최종 응답을 생성합니다.
    • ChatOpenAI: OpenAI의 gpt-3.5-turbo와 같은 모델을 사용합니다.
    • Ollama: 로컬에서 llama2, vicuna 또는 사용자 정의 모델(teacher 페르소나 모델)과 같은 LLM을 실행하고 연동할 수 있습니다.
    • HuggingFacePipeline: Hugging Face 모델(예: camel-5b-hf)을 파이프라인으로 구성하여 로컬 LLM을 랭체인과 연동합니다.

2.5. 워크플로우 연결 (Chain)
랭체인의 핵심은 이 모든 모듈을 체인(Chain)으로 연결하여 복잡한 작업을 자동화하는 것입니다.
• 기본 체인: prompt | llm과 같이 프롬프트와 LLM을 직접 연결할 수 있습니다.
• Output Parser: LLM의 응답을 원하는 형식(예: 문자열)으로 파싱할 수 있습니다 (StrOutputParser).
• RAG 체인: 검색기, 프롬프트, LLM, 파서 등을 조합하여 RAG 파이프라인을 완성합니다.
• RunnableParallel & RunnablePassthrough: 복잡한 데이터 흐름을 병렬로 처리하거나 입력 값을 그대로 다음 단계로 전달하는 데 사용됩니다.

  1. 랭체인을 통한 확장성: Agent와 LangGraph
    랭체인은 단순한 RAG를 넘어 LLM의 능력을 에이전트와 도구를 통해 확장합니다.
    • Agent (에이전트)와 Tool (도구):
    ◦ 에이전트는 LLM이 스스로 판단하여 특정 도구를 호출하여 작업을 수행하게 합니다.
    ◦ retriever_tool: 기계 학습 관련 쿼리를 검색하는 도구로 활용됩니다.
    ◦ wikipedia_tool: 위키피디아에서 일반적인 정보를 검색하는 도구입니다.
    ◦ graph_generator: 입력된 데이터를 바탕으로 그래프를 생성하는 사용자 정의 도구도 만들 수 있습니다.
    ◦ 이러한 도구들을 통해 LLM은 외부 시스템과 연동하여 정보 검색, 데이터 시각화 등 다양한 작업을 수행할 수 있습니다.
    • LangGraph:
    ◦ 일반적인 체인으로는 표현하기 어려운 복잡하고 상태를 저장해야 하는 워크플로우를 위해 LangGraph를 사용할 수 있습니다.
    ◦ LangGraph는 노드(node)와 엣지(edge)로 구성된 그래프를 통해 여러 단계의 LLM 호출, 도구 사용, 조건부 라우팅 등을 유연하게 정의할 수 있습니다. 이를 통해 LLM 기반 에이전트가 복잡한 의사결정 과정을 거쳐 작업을 완료하도록 설계할 수 있습니다.
profile
함께 세상을 만드는 사람들

0개의 댓글