본 시리즈는 LLM(대규모 언어 모델) 기반 애플리케이션을 처음 설계‧개발하시는 파이썬 개발자분들을 위한 가이드입니다. 0.3.x 버전의 LangChain‧LangGraph 공식 문서를 기준으로 작성되었으며, 최신 변경 사항은 반드시 공식 문서와 CHANGELOG를 참고해 주시기 바랍니다.
1. 서론: 왜 LangChain인가?
LLM 시대 초기에는 단순한 “프롬프트 → LLM → 답변” 흐름으로도 데모를 만들 수 있었습니다. 그러나 실시간 데이터 검색, 외부 도구 호출, 다중 에이전트 협업, 세션 메모리 등 요구사항이 늘어나면서
- 일관된 추상화로 다양한 모델‧스토어를 연결하고,
- 고수준 인지 컴포넌트를 재사용하며,
- 운영 환경까지 고려한 내구성 있는 설계가 필요해졌습니다.
이 문제를 해결하기 위해 등장한 프레임워크가 LangChain입니다. LangChain의 목표는 두 가지로 요약됩니다.
- LLM·벡터스토어·외부 API를 표준화된 인터페이스로 연결한다.
- 체인·에이전트·메모리·워크플로우 등 인지적 기능을 제공해 빠른 프로토타이핑 → 안정적 운영을 지원한다.
2. LangChain 스택 한눈에 보기
레이어 | 주요 역할 | 핵심 키워드 |
---|---|---|
langchain‑core | LLM‧임베딩‧벡터스토어에 대한 최소 추상화 | Runnable , 경량 의존성 |
langchain | 체인, 에이전트, 메모리 등 인지 로직 | Chains · Agents · Memory |
LangGraph | 복잡한 상태 머신·멀티에이전트 워크플로우 | Durable Execution, Checkpoint |
LangServe / LangSmith | API 배포·관측(Observability) | FastAPI, Tracing, Evaluation |
학습 TIP 본 편에서는 core*와 *langchain 두 레이어에 집중하고, LangGraph 및 배포 도구는 2편에서 자세히 다룹니다.
1. langchain‑core (핵심 추상화 레이어)
- 스키마 통일 :
BaseMessage
,Document
등 공통 객체를 사용해 모델 간 교체 비용을 최소화합니다. - Runnable 인터페이스 : 모든 구성요소가
invoke()
·batch()
·stream()
을 지원해 동기·비동기·스트리밍 호출 방식을 통일합니다. - 경량 패키지 : 불필요 의존성이 없으므로 설치가 빠르고, M1·ARM 환경에서도 빌드 오류가 적습니다.
2. langchain (인지 로직 레이어)
- Chains : 순차·병렬·조건 분기를 조합해 하나의 “작업 단위”를 정의합니다. 최신 버전은 LCEL(LangChain Expression Language) 파이프라인을 권장합니다.
- Agents : LLM이 Tool을 선택·호출하며 Thought → Action → Observation 루프를 실행합니다.
- Memory : Buffer·Summary 메모리 등으로 사용자 세션을 유지합니다.
- Tools :
@tool
데코레이터 하나로 파이썬 함수를 LLM 호출 가능 함수로 노출합니다.
3. 핵심 컴포넌트 요약
범주 | 대표 클래스 | 기능 요약 | 실무 팁 | |
---|---|---|---|---|
Prompt | PromptTemplate |
변수 치환·Few‑shot 예시 관리 | Git/HF Hub로 버전 관리 | |
LLM | ChatOpenAI 등 |
공급사별 래퍼, 모두 Runnable |
.bind(temperature=0) 선결합 |
|
Text Splitter | RecursiveCharacterTextSplitter |
의미 단위 분할 | chunk_size ·overlap 튜닝 |
|
Retriever | VectorStoreRetriever |
MMR·유사도 검색 | FAQ 봇은 MMR 효과적 | |
Memory | ConversationBufferMemory |
대화 기록 또는 요약 저장 | 토큰 초과 시 Summary 교체 | |
Tool | @tool |
외부 API·계산기 래핑 | dict 반환으로 구조화 출력 |
|
Agent | create_react_agent |
ReAct·Function Calling 프리셋 | max_iterations 로 루프 제한 |
|
Runnable / LCEL | invoke , ` |
` | 파이프라인 DSL | RunnableParallel 병렬 입력 |
4. Runnable & LCEL: 표준 실행 모델
1. Runnable 철학
모든 컴포넌트를 “입력 → 출력” 단일 연산으로 모델링하면 다음 이점이 있습니다.
- 호환성 — 체인으로 자유롭게 결합 가능
- 관측성 — LangSmith 트레이스로 기록, 디버깅 용이
- 재사용성 —
.with_config()
로 공통 옵션 주입 후 재활용
2. LCEL 핵심 문법
|
: 순차 파이프RunnableParallel
: 병렬 실행 후 결과 묶기.with_fallbacks()
: 예외 발생 시 예비 체인 실행.bind()
: 매개변수 사전 결합 (예:model.bind(temperature=0)
)
answer_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt_template
| model.bind(max_tokens=512)
| StrOutputParser()
)
디버깅 팁
.with_config(print_step=True)
옵션을 사용하면 각 단계 결과를 콘솔에 출력할 수 있습니다.
5. 실습 예제
1. 세 줄짜리 Q&A 체인
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
prompt = PromptTemplate("""당신은 친절한 AI입니다.\n질문: {question}""")
model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.0)
chain = prompt | model | StrOutputParser()
print(chain.invoke({"question": "LangChain의 장점은?"}))
- 장점 : 빠른 MVP 가능
- 제한 : 검색·메모리·Tool 호출 부재 → 실제 서비스로는 부족
2. 구조화 출력 Q&A 체인
from langchain.output_parsers import JsonOutputParser
schema = {
"answer": "string",
"citations": {"type": "array", "items": {"type": "string"}}
}
parser = JsonOutputParser(pydantic_schema=schema)
prompt2 = PromptTemplate("""문서 {context}를 참고해 JSON 형식으로 답하세요.\n{question}""")
qa_chain = {"context": retriever, "question": RunnablePassthrough()} | prompt2 | model | parser
result = qa_chain.invoke({"question": "정리된 답변과 출처를 알려줘."})
print(result["answer"])
6. 개념 정리 · 학습 로드맵
- 계층적 관점 — core → langchain → graph → serve 순으로 학습하면 혼동이 적습니다.
- 표준 인터페이스 —
Runnable
을 이해하면 대부분의 컴포넌트를 다룰 수 있습니다. - Agent 확장 — Tool 사용 → Agent → Multi‑Agent(LangGraph)로 자연스럽게 확장합니다.
- 관측 가능성 — LangSmith 트레이스로 실시간 모니터링·평가를 설정하세요.
7. 자주 묻는 질문(FAQ)
Q1. 체인과 에이전트는 어떻게 구분하나요?
- 체인 : 순서와 로직이 고정된 파이프라인. (예: 검색 → 요약 → 답변)
- 에이전트 : 어떤 Tool을 언제 호출할지 LLM이 결정합니다. 외부 세계와의 상호작용이 동적일 때 사용합니다.
Q2. LangChain 없이 직접 구현하면 이점이 있나요?
직접 구현도 가능하지만, 메모리 관리·트레이싱·멀티모델 라우팅 등 공통 기능을 모두 재개발해야 하므로 장기적인 유지보수 비용이 큽니다.
Q3. 상용 서비스에 사용 시 라이선스 제약이 있나요?
LangChain 자체는 MIT 라이선스입니다. 다만 연결되는 LLM·서드파티 API의 이용약관 및 요금제는 별도로 확인해야 합니다.
'인공지능 (AI) > LangChain&LangGraph' 카테고리의 다른 글
6 – 챗봇 배포와 최적화 (2) | 2025.06.18 |
---|---|
5 – 멀티 에이전트 챗봇 예제 프로젝트 (1) | 2025.06.18 |
4 – LangGraph로 멀티 에이전트 구성하기 (1) | 2025.06.18 |
3 – LangChain 핵심 모듈 심화 (1) | 2025.06.18 |
2 – LangGraph 소개 (0) | 2025.06.18 |