데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
LangChain은 대규모 언어 모델(LLM)을 활용한 애플리케이션을 빠르게 구축할 수 있도록 도와주는 오픈소스 프레임워크입니다. 체인(Chain), 에이전트(Agent), 메모리(Memory), RAG(Retrieval Augmented Generation) 등을 모듈 형태로 제공하여 복잡한 LLM 워크플로우를 단순화합니다.
여러 LLM 호출, 프롬프트, 도구를 연결하여 복잡한 작업을 순차적으로 실행. 재사용 가능한 파이프라인 구축.
외부 지식 베이스(벡터 DB, 문서)에서 관련 정보를 검색하여 LLM의 컨텍스트에 주입.幻觉 감소 및 최신 정보 활용.
LLM이 도구(검색, 계산기, API)를 동적으로 선택하고 실행하도록 지시. 복잡한 추론과 다단계 작업 자동화.
LangChain을 사용하지 않고 직접 LLM API를 호출하거나 다른 프레임워크를 사용할 때와 비교한 주요 차이점입니다.
| 항목 | LangChain | 직접 구현 / 기타 |
|---|---|---|
| 추상화 수준 | 고수준 모듈 (Chain, Agent, Memory) | 원시 API 호출, 수동 상태 관리 |
| RAG 구현 | 내장 Document Loader, Text Splitter, Vectorstore 연동 | 직접 문서 처리, 임베딩, 검색 파이프라인 구축 |
| 프롬프트 관리 | PromptTemplate, FewShotPromptTemplate, MessagePlaceholder | f-string, 조건부 분기 등 수동 처리 |
| 에이전트 | ReAct, OpenAI Function Calling, Tool 통합 | 자체 추론 루프 및 도구 등록 필요 |
| 생태계 & 커뮤니티 | 활성화된 커뮤니티, 1000+ 통합, LangSmith/LangServe | 제한적, 자체 유지보수 |
LangChain의 주요 구성 요소와 데이터 흐름을 ASCII 다이어그램으로 시각화했습니다.
주요 개념 설명
LangChain을 빠르게 설치하고 첫 번째 예제를 실행해보겠습니다.
Python 3.9+ 환경에서 pip로 설치합니다.
pip install langchain langchain-openai langchain-community
추가로 사용할 벡터 DB나 임베딩 모델에 따라 패키지를 설치합니다 (예: chromadb, tiktoken).
OpenAI API 키를 환경 변수로 설정합니다.
# Linux / macOS
export OPENAI_API_KEY="sk-your-api-key-here"
# Windows (PowerShell)
$env:OPENAI_API_KEY="sk-your-api-key-here"
Python 스크립트를 작성하여 LangChain의 기본 체인을 사용해보세요.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 1. LLM 모델 초기화
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)
# 2. 프롬프트 템플릿 생성
prompt = ChatPromptTemplate.from_messages([
("system", "당신은 전문적인 AI 어시스턴트입니다."),
("human", "{input}")
])
# 3. 체인 구성 (LLM + 출력 파서)
chain = prompt | llm | StrOutputParser()
# 4. 실행
response = chain.invoke({"input": "LangChain의 주요 장점을 세 가지로 요약해 주세요."})
print(response)
CLI에서 바로 테스트하기:
python -c "
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(model='gpt-4o-mini')
prompt = ChatPromptTemplate.from_messages([('human','{input}')])
chain = prompt | llm
print(chain.invoke({'input':'LangChain이 뭐예요?'}).content)
"
LangChain에서 자주 사용되는 설정값을 표로 정리했습니다. 실제 모델 제공자(OpenAI, Anthropic 등)에 따라 일부 옵션이 다를 수 있습니다.
| 설정 키 | 타입 | 기본값 | 설명 |
|---|---|---|---|
temperature |
float | 0.7 | 출력의 창의성/무작위성 (0 ~ 2). 낮을수록 보수적. |
max_tokens |
int | 모델별 (보통 4096) | 최대 토큰 수. 응답 길이 제한. |
model |
str | gpt-4o-mini | 사용할 LLM 모델 식별자. |
top_p |
float | 1.0 | 핵심 샘플링 (nucleus sampling) 임계값. |
frequency_penalty |
float | 0.0 | 토큰 빈도에 따른 패널티 (-2 ~ 2). |
presence_penalty |
float | 0.0 | 새로운 토큰 등장에 대한 패널티 (-2 ~ 2). |
streaming |
bool | False | 스트리밍 응답 활성화. 실시간 출력에 사용. |
verbose |
bool | False | 체인 실행 중 상세 로그 출력 (디버깅용). |
max_tokens을 너무 작게 설정하면 응답이 잘릴 수 있습니다. 프롬프트 + 출력의 총 토큰 합계가 모델 컨텍스트 윈도우를 초과하지 않도록 주의하세요.
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| 토큰 초과 오류 | 프롬프트 + 응답이 모델 컨텍스트 한도 초과 | Text Splitter로 문서 분할, max_tokens 조정, 요약 사용 |
| 에이전트가 잘못된 도구 호출 | 프롬프트 명확성 부족, 도구 설명 불충분 | 도구 이름과 설명을 상세히 작성, few-shot 예제 추가 |
| RAG에서 관련 문서 검색 실패 | 청크 크기 불적절, 임베딩 모델 부적합 | 청크 크기(500~1000자) 및 오버랩 조정, text-embedding-3-small 등 최신 모델 사용 |
| 메모리 누수 (ConversationBufferMemory) | 대화가 길어져 메모리에 모든 이력 저장 | ConversationSummaryMemory 또는 VectorStoreMemory로 전환, 토큰 제한 설정 |
| 비용 급증 | 불필요한 LLM 호출, 긴 프롬프트 | 캐싱 도입 (langchain.cache), 프롬프트 최적화, 모델 교체 (gpt-4o-mini 등) |
PydanticOutputParser를 사용하세요.fallback으로 다른 모델을 지정하세요.ainvoke, astream을 활용하여 동시 요청 처리량을 높이세요.아래 링크에서 공식 문서와 커뮤니티 리소스를 확인하세요.