LLM: LangChain

Ohback·2025년 3월 11일

1. LangChain

LangChain(LangChain.ai)은 LLM (Large Language Model)과 다양한 데이터 소스를 쉽게 연결할 수 있도록 도와주는 프레임워크로, 특히 RAG (Retrieval-Augmented Generation) 구현에 최적화되어 있어서, LLM과 벡터DB(FAISS, ChromaDB, Pinecone 등)를 결합하여 강력한 AI 응용 프로그램을 만들 수 있다.
*한 줄 요약: LangChain을 사용하지 않아도 AI 응용 프로그램을 만들 수 있지만 사용하면 매우 편리하다!

1-1. LangChain의 장점

LLM을 단순히 한 번 호출하는 게 아니라, 여러 기능과 연결하여 강력한 응용 시스템을 만들 수 있음

  • 체인(Chains) → 여러 개의 LLM 호출을 연결하여 복잡한 논리를 처리할 수 있음.
  • 메모리(Memory) → 대화의 맥락을 유지할 수 있음.
  • 도구 연동(Tools & Agents) → 외부 API, DB, 검색 시스템과 결합 가능.
  • 검색 기반 생성(RAG) → FAISS, Pinecone 등과 결합하여 LLM의 한계를 보완할 수 있음.

1-2. LangChain의 주요 기능

기능LangChain 없이 직접 구현LangChain 사용
프롬프트 최적화직접 프롬프트 작성PromptTemplate 활용 가능
Output Parsers (출력 처리)json.loads(), re.findall() 같은 수동 파싱이 필요StructuredOutputParser 등으로 자동 변환
여러 작업 연결 (체인)함수로 직접 연결LLMChain, SequentialChain 등으로 자동 처리
외부 데이터 검색Requests, FastAPI 등 직접 호출Agent, Tool 기능으로 자동 선택
대화 기록 저장 (메모리)JSON, Redis, DB 등을 수동 저장ConversationBufferMemory 자동 관리
벡터DB 검색 (RAG)FAISS, ChromaDB 직접 검색Retriever 기능으로 자동 처리
SQL 연동 (DB 조회)SQLAlchemy 등 직접 구현SQLDatabaseChain 활용 가능

1-3. Prompt 클래스 계층 구조

BasePromptTemplate  (모든 프롬프트 템플릿의 부모 클래스)
│
├── PipelinePromptTemplate  (여러 개의 프롬프트를 체인으로 연결)
│
├── StringPromptTemplate (추상 클래스)  
│   │
│   ├── PromptTemplate  (가장 기본적인 프롬프트)
│   │
│   ├── FewShotPromptTemplate  (Few-shot 예제 포함)
│   │
│   ├── FewShotPromptWithTemplates  (Few-shot 예제 + 템플릿 조합)
│
└── BaseChatPromptTemplate (Chat 모델을 위한 프롬프트)
    │
    ├── AutoGPTPrompt  (AutoGPT에서 사용하는 프롬프트)
    │
    ├── ChatPromptTemplate  (대화형 프롬프트)
    │   │
    │   └── AgentScratchPadChatPromptTemplate  (에이전트용 대화 프롬프트)
    │
    └── BaseMessagePromptTemplate (대화 메시지 프롬프트)
        │
        ├── MessagesPlaceholder  (메시지를 동적으로 삽입)
        │
        ├── BaseStringMessagePromptTemplate (문자열 기반 메시지 프롬프트)
            │
            ├── ChatMessagePromptTemplate  (일반 챗 메시지)
            ├── HumanMessagePromptTemplate  (사용자 메시지)
            ├── AIMessagePromptTemplate  (AI 응답 메시지)
            └── SystemMessagePromptTemplate  (시스템 메시지)

2. Chat vs Memory 차이점

구분그냥 Chat직접 대화 맥락 유지Memory로 자동 대화 맥락 유지
이전 대화 기억❌ 기억 못함✅ 직접 관리✅ 자동 관리
추가 코드 필요 여부❌ 필요 없음✅ 직접 구현 필요✅ LangChain 자동 처리
대화 맥락 유지 방식매번 새로운 대화JSON/DB에 직접 저장ConversationBufferMemory로 자동 저장
적용 사례단순 FAQ 챗봇DB 기반 챗봇대화형 챗봇, 상담 챗봇

2-1. Memory 클래스 계층 구조

BaseMemory (추상 클래스)
│
├── ConversationalMemory (추상 클래스)  
│   │
│   ├── ✅ ConversationBufferMemory  ← (전체 대화 저장)
│   ├── ✅ ConversationBufferWindowMemory  ← (최근 `k`개의 대화 저장)
│   ├── ✅ ConversationSummaryMemory  ← (대화 요약 저장)
│   ├── ✅ VectorStoreRetrieverMemory  ← (벡터DB에 저장)
│   ├── ✅ CombinedMemory  ← (여러 Memory 조합)
│
├── RunnableWithMessageHistory (고급 기능)  
│   │
│   ├── ✅ RunnableWithConversationalMemory  ← (대화 히스토리를 유지하는 Runnable)
│   ├── ✅ RunnableWithPersistentMemory  ← (지속적으로 대화 저장)
│
└── Memory Integrations (외부 시스템 연동)
    │
    ├── ✅ SQLDatabaseMemory  ← (SQL DB에 대화 저장)
    ├── ✅ RedisChatMemory  ← (Redis에 대화 저장)
    ├── ✅ DynamoDBChatMemory  ← (AWS DynamoDB 연동)
profile
기록은 기억을 지배한다.

0개의 댓글