LangChain은 LLM(대형 언어 모델) 을 활용한 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임워크다.
OpenAI GPT와 같은 LLM은 기본적으로 "질문 → 답변"은 잘 수행하지만, 실제 서비스에서는 다음과 같은 기능이 추가로 필요하다.
LangChain은 이러한 기능들을 쉽게 연결하고 관리할 수 있도록 만들어진 프레임워크다.
예를 들어 LLM에게 회사 내부 문서에 대한 질문을 한다고 가정해보자.
LLM 자체는 학습 시점 이후의 정보나 사내 문서를 알지 못한다.
따라서 다음과 같은 과정이 필요하다.
사용자 질문
↓
관련 문서 검색
↓
검색 결과 추출
↓
질문과 함께 LLM에 전달
↓
답변 생성
이러한 흐름을 직접 구현할 수도 있지만, LangChain은 이를 쉽게 구성할 수 있도록 다양한 컴포넌트를 제공한다.
프롬프트를 템플릿 형태로 관리할 수 있다.
from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template(
"{topic}에 대해 설명해줘"
)
print(prompt.format(topic="Transformer"))
출력:
Transformer에 대해 설명해줘
동일한 프롬프트 구조를 유지하면서 변수만 바꿔 사용할 수 있다.
LangChain은 다양한 LLM을 동일한 인터페이스로 사용할 수 있도록 지원한다.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
지원하는 대표 모델은 다음과 같다.
모델을 변경하더라도 코드 구조를 크게 바꿀 필요가 없다.
LangChain이 가장 많이 사용되는 분야 중 하나가 RAG(Retrieval-Augmented Generation)다.
RAG는 질문에 답하기 전에 관련 문서를 검색한 후, 해당 문서를 참고하여 답변을 생성하는 방식이다.
일반적인 흐름은 다음과 같다.
문서 수집
↓
문서 분할(Chunking)
↓
임베딩(Embedding)
↓
벡터DB 저장
↓
질문 입력
↓
유사 문서 검색
↓
문서 + 질문을 LLM에 전달
↓
최종 답변 생성
LangChain은 이 전체 과정을 연결하는 역할을 수행한다.
Chain은 여러 작업 단계를 하나의 흐름으로 연결하는 기능이다.
예를 들어 다음과 같은 작업을 생각해볼 수 있다.
사용자 질문
↓
문서 검색
↓
검색 결과 요약
↓
답변 생성
각 단계를 연결하여 하나의 파이프라인처럼 실행할 수 있다.
Agent는 LLM이 상황에 따라 적절한 도구를 선택하도록 만드는 기능이다.
예를 들어 사용자가 다음과 같이 질문했다고 가정하자.
오늘 서울 날씨 알려줘
Agent는 다음과 같은 과정을 수행할 수 있다.
질문 분석
↓
날씨 정보 필요 판단
↓
날씨 API 호출
↓
결과 수집
↓
답변 생성
즉, 단순히 학습된 지식만 사용하는 것이 아니라 외부 도구를 활용할 수 있게 된다.
LangChain은 여러 컴포넌트로 구성된다.
Prompt
↓
LLM
↓
Output Parser
또는
Prompt
↓
Retriever
↓
LLM
↓
Output Parser
필요에 따라 다양한 컴포넌트를 조합하여 원하는 워크플로우를 만들 수 있다.
초기 생성형 AI 서비스 개발에서는 다음 기능들이 필수였다.
LangChain은 이러한 기능들을 하나의 프레임워크에서 제공했기 때문에 빠르게 대중화되었다.
특히 RAG 관련 튜토리얼 대부분이 LangChain을 기반으로 작성되었다.
최근에는 LangChain의 단점도 많이 언급된다.
최근에는 다음과 같은 선택지도 많이 사용된다.
필요한 기능만 직접 구현하는 방식이다.
OpenAI SDK
+
Vector DB
+
Custom Logic
단순한 프로젝트에서는 오히려 더 관리하기 쉬운 경우도 많다.
데이터와 RAG에 특화된 프레임워크다.
문서 검색과 데이터 연결 기능이 강력하다.
LangChain 팀이 만든 프레임워크다.
복잡한 Agent 시스템과 워크플로우를 구현하는 데 적합하다.
상태(State)
↓
노드(Node)
↓
상태(State)
↓
노드(Node)
형태로 동작한다.
예전 튜토리얼에서는 다음과 같은 코드를 자주 볼 수 있다.
from langchain.embeddings import OpenAIEmbeddings
하지만 최근 버전에서는 패키지가 분리되었다.
from langchain_openai import OpenAIEmbeddings
마찬가지로 ChatOpenAI도 다음과 같이 사용한다.
from langchain_openai import ChatOpenAI
오래된 튜토리얼을 따라 하다가 ImportError가 발생하는 이유가 대부분 여기에 있다.