LangChain(LangChain.ai)은 LLM (Large Language Model)과 다양한 데이터 소스를 쉽게 연결할 수 있도록 도와주는 프레임워크로, 특히 RAG (Retrieval-Augmented Generation) 구현에 최적화되어 있어서, LLM과 벡터DB(FAISS, ChromaDB, Pinecone 등)를 결합하여 강력한 AI 응용 프로그램을 만들 수 있다.
*한 줄 요약: LangChain을 사용하지 않아도 AI 응용 프로그램을 만들 수 있지만 사용하면 매우 편리하다!
LLM을 단순히 한 번 호출하는 게 아니라, 여러 기능과 연결하여 강력한 응용 시스템을 만들 수 있음
| 기능 | 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 활용 가능 |
BasePromptTemplate (모든 프롬프트 템플릿의 부모 클래스)
│
├── PipelinePromptTemplate (여러 개의 프롬프트를 체인으로 연결)
│
├── StringPromptTemplate (추상 클래스)
│ │
│ ├── PromptTemplate (가장 기본적인 프롬프트)
│ │
│ ├── FewShotPromptTemplate (Few-shot 예제 포함)
│ │
│ ├── FewShotPromptWithTemplates (Few-shot 예제 + 템플릿 조합)
│
└── BaseChatPromptTemplate (Chat 모델을 위한 프롬프트)
│
├── AutoGPTPrompt (AutoGPT에서 사용하는 프롬프트)
│
├── ChatPromptTemplate (대화형 프롬프트)
│ │
│ └── AgentScratchPadChatPromptTemplate (에이전트용 대화 프롬프트)
│
└── BaseMessagePromptTemplate (대화 메시지 프롬프트)
│
├── MessagesPlaceholder (메시지를 동적으로 삽입)
│
├── BaseStringMessagePromptTemplate (문자열 기반 메시지 프롬프트)
│
├── ChatMessagePromptTemplate (일반 챗 메시지)
├── HumanMessagePromptTemplate (사용자 메시지)
├── AIMessagePromptTemplate (AI 응답 메시지)
└── SystemMessagePromptTemplate (시스템 메시지)
| 구분 | 그냥 Chat | 직접 대화 맥락 유지 | Memory로 자동 대화 맥락 유지 |
|---|---|---|---|
| 이전 대화 기억 | ❌ 기억 못함 | ✅ 직접 관리 | ✅ 자동 관리 |
| 추가 코드 필요 여부 | ❌ 필요 없음 | ✅ 직접 구현 필요 | ✅ LangChain 자동 처리 |
| 대화 맥락 유지 방식 | 매번 새로운 대화 | JSON/DB에 직접 저장 | ConversationBufferMemory로 자동 저장 |
| 적용 사례 | 단순 FAQ 챗봇 | DB 기반 챗봇 | 대화형 챗봇, 상담 챗봇 |
BaseMemory (추상 클래스)
│
├── ConversationalMemory (추상 클래스)
│ │
│ ├── ✅ ConversationBufferMemory ← (전체 대화 저장)
│ ├── ✅ ConversationBufferWindowMemory ← (최근 `k`개의 대화 저장)
│ ├── ✅ ConversationSummaryMemory ← (대화 요약 저장)
│ ├── ✅ VectorStoreRetrieverMemory ← (벡터DB에 저장)
│ ├── ✅ CombinedMemory ← (여러 Memory 조합)
│
├── RunnableWithMessageHistory (고급 기능)
│ │
│ ├── ✅ RunnableWithConversationalMemory ← (대화 히스토리를 유지하는 Runnable)
│ ├── ✅ RunnableWithPersistentMemory ← (지속적으로 대화 저장)
│
└── Memory Integrations (외부 시스템 연동)
│
├── ✅ SQLDatabaseMemory ← (SQL DB에 대화 저장)
├── ✅ RedisChatMemory ← (Redis에 대화 저장)
├── ✅ DynamoDBChatMemory ← (AWS DynamoDB 연동)