1. 모델 I/O
Model I/O (Model Input/Output)는 LLM과의 입출력 처리를 담당하는 중요한 구성 요소입니다. 쉽게 말해, 프롬프트를 만들고 모델에 입력한 후, 모델의 출력을 받아오는 과정 전반을 관리하는 역할을 합니다.
Model I/O의 주요 구성 요소
1. PromptTemplates (프롬프트 템플릿)
- LLM에 문장을 전달하기 전에 문장 구성을 편리하게 만들어주는 역할을 한다.
- LLM에게 줄 입력값을 구성하기 위한 템플릿입니다.
- 예: "질문: {question}\n답변:" 과 같은 형식에서 {question} 자리에 값을 넣어줍니다.
- 다양한 변수, 포맷 지원
2. LLM Wrappers (LLM 래퍼)
- OpenAI, HuggingFace 등 여러 모델을 공통 인터페이스로 묶어주는 부분입니다.
- ChatOpenAI, OpenAI, HuggingFaceHub 등이 이에 해당합니다.
- 개발자는 특정 LLM API와 직접 통신하지 않고 랭체인의 추상화를 사용해 LLM을 사용할 수 있습니다.
3. Output Parsers (출력 파서)
- 모델이 출력한 텍스트를 특정 형식(예: JSON, 리스트, 숫자 등)으로 변환하는 역할
- 예: 모델이 "정답은 42입니다"라고 출력하면 숫자 42만 추출해주는 파서
4. Example Selectors (예시 선택기)
- 프롬프트에 넣을 few-shot 예시를 동적으로 선택해주는 도구
- 많은 예시 중 문맥에 맞는 예시만 골라주는 역할
2. 데이터 연결
데이터 연결은 일반적인 데이터 분석환경에서 ETL(Extract, Transform, Load)에 해당 합니다.
ETL은 데이터를 한 곳에서 다른 곳으로 옮기는 과정을 말하며, 세단계로 나눠서 진행 합니다.
1. 추출(Extract)
- 여러 출처로부터 필요한 데이터를 가져옵니다.
2. 변환(Transform)
- 추출한 데이터를 분석하고 필요한 형태로 변환합니다.
3. 적재(Load)
- 변환된 데이터를 최종 목적지인 데이터베이스나 데이터 웨어하우스에 저장합니다.
데이터 연결의 구성요소
1. Document Loaders (문서 로더)
- 외부 파일을 읽어들여 LangChain이 처리할 수 있는 형태로 변환합니다.
- 다양한 포맷 지원: PDF, CSV, TXT, Word, Markdown, Notion, Web page, YouTube, Google Drive, 등등
2. Text Splitters (텍스트 분할기)
- 긴 문서를 **짧은 청크(chunk)**로 나누어 LLM이 효율적으로 처리할 수 있도록 도와줍니다.
- 슬라이딩 윈도우, 문단 기준, 토큰 기준 등 다양한 방식 제공
3. Embeddings (임베딩 생성기)
- 문서를 벡터 공간에 매핑하여 유사도 검색이 가능하게 함
- OpenAI, HuggingFace, BGE, GTR 등 다양한 임베딩 모델 사용 가능
4. Vector Stores (벡터 저장소)
- 문서를 임베딩한 벡터를 저장하고, LLM이 질의할 때 유사 문서를 검색하는 데 사용
- 지원 저장소: FAISS, Chroma, Pinecone, Weaviate, Milvus, Qdrant 등
5. Retrievers (검색기)
- Vector Store에서 관련 문서를 찾아주는 역할
- 단순 유사도 검색 외에 MultiQuery, SelfQuery, ParentDocumentRetriever 등 고급 검색기도 제공
6. Memory (메모리)
- 대화 중 이전 데이터(컨텍스트)를 기억해서 문맥을 유지하는 데 사용
- 하지만 장기 기억이 필요할 경우 Retriever를 통해 외부 DB와 연동함
7. Tools & Agents (도구 & 에이전트)
- LLM이 동적으로 툴을 사용하여 데이터를 검색하거나 계산 수행
- 예: "stock 가격 알려줘" → Tool: WebSearch 실행 → 결과 반환
3. 체인
체인은 말 그대로 여러 구성 요소를 조합해서 하나의 파이프라인을 구성해주는 역할을 합니다.
LLM을 활용한 여러 작업을 단계적으로 연결하여 자동화된 흐름을 구성하는 구조를 의미합니다.
체인이란?
Chain = 프롬프트 만들기 → 모델에 전달 → 결과 처리
즉, 하나 이상의 구성 요소(프롬프트, 모델, 파서 등)를 파이프라인처럼 연결해서 순차 처리하는 시스템입니다.
대표적인 체인 종류
1. LLMChain
- 가장 기본적인 체인
- 챗봇 같은 애플리케이션은 이전 대화를 기억해야 하지만 LLM은 기본적으로 채팅 기록을 장기적으로 보관하지 않기 때문에 메모리를 사용해야 한다.