본문 바로가기
Data Science/LLM & GenAI

랭체인(Langchain) 소개 및 특징 (RAG필수 프레임워크)

by En.Lee 2025. 1. 20.

랭체인(Langchain)은 대규모 언어 모델(LLM)로 구동되는 애플리케이션을 개발하기 위한 프레임워크입니다.

RAG에 관심이 있거나 개발하시는 분들이라면 랭체인을 한 번쯤은 들어보셨을 것입니다.

 

GPT와 같은 LLM을 이용해 애플리케이션을 만들려 할 때 부수적으로 개발해야 할 모듈이 많습니다.

예를 들어, 문서를 통한 QA 시스템을 만들 때는 기존 FAQ나 정해진 매뉴얼을 불러오는 로더(Loader)부터 데이터베이스화, 프롬프트 작성 등 간단한 시스템에도 서비스를 위한 모듈을 모두 개발해야 합니다. 랭체인(Langchain)은 LLM을 사용하기 위한 다양한 모듈을 통합해 제공하는 프레임워크입니다.

 

 

랭체인(Langchain)의 주요 특징과 기능

프롬프트 관리 (Prompt Management)

  • 프롬프트를 체계적으로 설계하고 관리할 수 있도록 도와줍니다.
  • 템플릿을 사용해 효율적인 프롬프트 제작이 가능.

체인 구성 (Chains)

  • LLM을 포함한 다양한 모듈을 연결해 워크플로우를 구성할 수 있습니다.
  • 예: 입력 → 프롬프트 작성 → 모델 호출 → 후처리 → 출력.

메모리 관리 (Memory)

  • 챗봇 등 대화형 AI에서 대화 이력을 유지할 수 있도록 도와줍니다.
  • 단기 및 장기 메모리를 지원하여 보다 자연스러운 상호작용이 가능.

데이터 소스 연결 (Data Connection)

  • 데이터베이스, 웹 검색, API 등 다양한 외부 소스와 연결 가능.
  • PDF, CSV 등 파일을 처리하는 기능도 포함.

에이전트 (Agents)

  • LLM이 스스로 도구(예: 계산기, 검색 등)를 선택하고 활용할 수 있도록 구성.
  • 복잡한 작업을 수행하기 위해 필요한 도구들을 조합하여 자동화 가능.

통합 및 확장성

  • OpenAI, Hugging Face, Google Vertex AI 등의 다양한 모델과 쉽게 연동 가능.
  • Python을 중심으로 한 개발 환경 지원.

랭체인(Langchain) 프레임워크 구성

Langchain Framework

 

LangChain Expreesion Language(LCEL)

LangChain 프레임워크에서 사용되는 기능으로, LLM 기반 애플리케이션의 로직을 보다 직관적이고 선언적으로 구성할 수 있도록 도와주는 DSL(도메인 특정 언어)입니다. 기존의 파이썬 코드보다 간결한 방식으로 체인을 정의하고, 다양한 컴포넌트를 쉽게 조합할 수 있도록 설계되었습니다.

 

LCEL의 주요 특징

1. 함수형 스타일의 체인 구성

기존의 절차적 코드 대신, 데이터를 흐름에 따라 연결하는 방식으로 LLM 파이프라인을 구성.

| (파이프 연산자)를 활용한 직관적인 체인 표현이 가능.

2. 가독성 향상 및 코드 간결화

복잡한 체인을 단순화하여 유지보수 용이.

파이프라인을 단순한 연산으로 표현 가능.

3. 유연한 조합 및 확장성

프롬프트 템플릿, LLM 호출, 출력을 처리하는 다양한 구성 요소를 손쉽게 조합.

기존 LangChain과의 호환성을 유지하면서도 선언적 스타일로 확장 가능.

 

LCEL 사용법

OpenAI나 API를 활용해 LLM기반 애플리케이션을 구축할 때 지정하는 파라미터들을 파이프연산자로 쉽게 코딩할 수 있습니다.

이런 특징은 직관적인 이해가 가능하고 프롬프트 템플릿 지정, 프럼프트 사전 처리, 프롬프트 사후 처리 등 복잡한 코딩을 단순하게 표현할 수 있는 장점이 있습니다.

 

LCEL 기본 문법

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.chains import LLMChain

# LCEL 방식 적용
prompt = PromptTemplate.from_template("What is {topic}?")
llm = OpenAI(model_name="gpt-3.5-turbo")

# 기존 방식
chain = LLMChain(prompt=prompt, llm=llm)
response = chain.run({"topic": "LangChain"})

# LCEL 방식 (파이프 연산자 사용)
response = prompt | llm | str
print(response.invoke({"topic": "LangChain"}))

 

LCEL을 이용한 복잡한 체인구성

from langchain.prompts import PromptTemplate
from langchain.chains import SequentialChain
from langchain.chat_models import ChatOpenAI

# 첫 번째 단계: 프롬프트로 질문 작성
prompt1 = PromptTemplate.from_template("What are the benefits of {topic}?")
prompt2 = PromptTemplate.from_template("Summarize the key points about {topic}.")

llm = ChatOpenAI(model="gpt-4")

# LCEL로 체인 연결
chain1 = prompt1 | llm
chain2 = prompt2 | llm

# 연속 체인 조합
final_chain = chain1 | chain2
output = final_chain.invoke({"topic": "AI in healthcare"})
print(output)

 

LCEL이 적합한 사용 사례

  • 빠른 LLM 기반 프로토타이핑 (챗봇, 자동화 워크플로우)
  • 단계별 논리적 흐름이 필요한 애플리케이션 (문서 요약, 질의응답)
  • 데이터 처리 파이프라인 (API 호출, 텍스트 변환)

LangGraph

LangGraphLangChain 프레임워크의 확장 기능으로, LLM 기반 애플리케이션의 워크플로우를 그래프(Graph) 기반으로 설계하고 실행할 수 있도록 도와주는 도구입니다. LangGraph를 사용하면 복잡한 논리 흐름을 보다 유연하고 구조적으로 구현할 수 있으며, 기존의 Linear Chain보다 더 복잡한 의사 결정 및 상태 관리를 효과적으로 처리할 수 있습니다.

 

LangGraph의 주요 특징

1. 비선형 워크플로우 설계 (Non-Linear Workflow)

  • 단순한 입력-출력 체인 대신 의사 결정 노드, 병렬 실행, 조건부 흐름 등을 설정할 수 있음.
  • AI 에이전트가 다양한 경로로 데이터를 처리할 수 있도록 설계 가능.

2. 상태 관리 및 메모리 기능 (State Management)

  • 작업 수행 중 상태를 유지하며 이전 단계의 데이터를 참조하고, 다양한 경로를 선택할 수 있음.
  • LLM이 동적 의사 결정을 내릴 때 유용.

3. 조건부 흐름 (Conditional Routing)

  • 특정 입력에 따라 경로를 분기시켜 다중 결과를 처리.
  • 예: 유저 질문의 유형에 따라 다른 경로로 진행.

4. 병렬 및 순차 작업 (Parallel & Sequential Processing)

  • 여러 작업을 동시에 수행하거나, 순서대로 실행할 수 있도록 지원.

5. 유연한 통합 (Modular Integration)

  • LangChain의 기존 기능(프롬프트 템플릿, LLM, 메모리 등)과 원활하게 통합 가능.
  • 다양한 데이터 소스 및 외부 API와 연결.

LangGraph의 핵심 개념

  • 노드(Node): 그래프의 개별 작업 단위로, 프롬프트 처리, API 호출, 데이터 조작 등이 포함됨.
  • 엣지(Edge): 노드 간의 연결을 정의하며, 데이터 흐름과 실행 순서를 지정.
  • 입력/출력 (Input/Output): 노드의 데이터 흐름을 결정하는 요소.
  • 상태(State): 각 단계에서 처리된 데이터를 저장 및 공유.

LangGraph 사용예제

LangGraph는 Apache Beam과 같이 그래프 형식의 인터페이스를 통해 복잡한 과정을 시각적으로 설계, 구동할 수 있는 프레임워크 입니다. 코드를 통해 네트워크 그래프를 설정하고 각 분기에 따라 여러 컴포넌트를 섞어 사용할 수 있습니다.

 

기본 그래프 그리기 예제

from langchain.graphs import StateGraph
from langchain.chat_models import ChatOpenAI

# LangGraph의 상태 및 워크플로우 정의
def process_input(state):
    llm = ChatOpenAI(model="gpt-4")
    response = llm.predict("Tell me about " + state["topic"])
    return {"response": response}

graph = StateGraph(initial_state={"topic": "Artificial Intelligence"})

# 그래프 노드 추가
graph.add_node("process", process_input)

# 실행 경로 정의
graph.set_entry_point("process")

# 그래프 실행
result = graph.run()
print(result["response"])

 

병렬처리 그래프 예제

def task_1(state):
    return {"result_1": "Task 1 completed"}

def task_2(state):
    return {"result_2": "Task 2 completed"}

graph = StateGraph(initial_state={})
graph.add_node("task_1", task_1)
graph.add_node("task_2", task_2)

# 병렬 실행 설정
graph.add_edge("task_1", "task_2")

graph.set_entry_point("task_1")
result = graph.run()
print(result)

LangServe

LangServeLangChain 애플리케이션을 웹 서비스로 쉽게 배포할 수 있도록 도와주는 도구입니다. 이를 통해 LangChain 기반의 LLM(대형 언어 모델) 파이프라인을 API 형태로 제공할 수 있으며, 프론트엔드 및 기타 애플리케이션과 쉽게 통합할 수 있습니다.

LangServe를 활용하면 LangChain 체인을 FastAPI 기반의 RESTful API로 변환하여 웹 애플리케이션이나 모바일 앱과 연동할 수 있습니다.

 

LangServe는 Langchain을 이용해 구성한 RAG시스템을 쉽게 웹 서비스로 배포할 수 있게 돕는 프레임워크입니다. 컨테이너로 묶고 별도의 서버를 구성하는 번거로움을 단 몇 줄의 코드로 쉽게 배포할 수 있도록 돕는데 의미가 있습니다.

 

LangServe의 주요 특징

1. 간편한 API 배포

  • LangChain 모델 및 체인을 바로 REST API로 배포할 수 있음.
  • FastAPI를 기반으로 하므로 자동 문서화(Swagger UI) 지원.

2. 확장성 및 유연성

  • 서버리스 환경, 클라우드 플랫폼(AWS, GCP, Azure) 등 다양한 배포 옵션 지원.
  • 로컬 개발 환경에서 빠르게 테스트 가능.

3. 비동기 처리 지원

  • 고성능 API 처리를 위해 비동기 방식으로 요청을 처리.

4. 자동 스케일링 가능

  • 컨테이너화(Docker)를 통해 마이크로서비스로 배포 가능.

5. 보안 및 인증 지원

  • API 키 및 인증 토큰을 활용한 보안 강화.

LangServe의 장점

  • 쉽고 빠른 배포: 코드 몇 줄로 AI 서비스를 웹 API로 변환.
  • 확장성: 대량의 요청을 처리할 수 있도록 컨테이너 기반 배포 가능.
  • API 문서화: FastAPI의 Swagger UI로 자동 문서화.
  • 다양한 프론트엔드 연동: React, Vue.js, 모바일 앱과 쉽게 연결.

 

LangServe 사용 예제

간단한 LangServe 배포 코드

from langchain.llms import OpenAI
from langserve import add_routes
from fastapi import FastAPI

# LangChain LLM 설정
llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0.7)

# FastAPI 애플리케이션 생성
app = FastAPI()

# LangServe를 통해 API 경로 추가
add_routes(app, llm, path="/llm")

# 서버 실행
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

 

LangChain의 프롬프트 체인을 API로 배포하는 예제코드

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

prompt = PromptTemplate.from_template("What is the meaning of {word}?")
llm = OpenAI(model_name="gpt-4")

# 체인 생성
chain = LLMChain(llm=llm, prompt=prompt)

# FastAPI 애플리케이션 설정
app = FastAPI()

# LangServe로 체인 등록
add_routes(app, chain, path="/meaning")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

 

LangServe를 사용하면 LangChain을 기반으로 하는 LLM 애플리케이션을 빠르게 API로 변환하고 배포할 수 있습니다. 이를 통해 웹 애플리케이션, 모바일 앱, 기업 내 시스템과의 연동이 훨씬 용이해지며, 빠른 프로토타이핑 및 운영 환경 배포가 가능합니다.


LangSmith

LangSmith는 LangChain 기반의 애플리케이션을 디버깅, 평가 및 모니터링할 수 있도록 도와주는 도구입니다. LLM(대형 언어 모델)을 활용한 애플리케이션의 성능을 최적화하고, 체인의 정확성을 검증하며, 개발 과정에서 발생하는 오류를 분석하는 데 초점을 맞추고 있습니다.

LangSmith를 활용하면 LLM 기반 애플리케이션의 개발 프로세스를 더 체계적이고 효율적으로 관리할 수 있으며 추적, 로깅, 분석, 벤치마킹 기능을 제공합니다.

 

LangSmith가 필요한 이유는 무엇보다 '추적' 때문입니다. LLM을 활용한 애플리케이션이나 RAG를 써서 LLM에 프롬프트를 보낼 때 어느정도의 토큰이 사용됬는지 부터 응답시간, API로 보낸 데이터 ,받은 데이터 등을 확인 할 수 있습니다.

하나의 질문을 바로 확인하는 것은 print로 쉽게 확인할 수 있지만, LLM을 이용한 데이터 재생산, 서비스 등을 할 때는 문제가 있던 프롬프트를 모두 확인하는 것은 쉽지 않습니다. LangSmith는 간단한 방법으로 프로젝트를 연결해 프로젝트 내에 사용하는 LLM호출, RAG 인터페이스를 모두 추적, 관찰할 수 있어 편리합니다.

단점은 기본으로 Trace횟수를 다쓰면 유료로 전환된다는 점입니다. (v3 부터 유료로 전환...)

 

LangSmith의 주요 기능

1. 디버깅 (Debugging)

  • LangChain의 체인을 실행할 때 발생하는 입출력 추적 및 분석.
  • 프롬프트의 문제를 발견하고 수정할 수 있도록 상세한 실행 기록 제공.
  • 체인의 작동 방식을 시각적으로 확인 가능.

2. 평가 및 벤치마킹 (Evaluation & Benchmarking)

  • 여러 버전의 체인을 비교하고 성능을 평가.
  • 자동화된 평가 도구를 통해 정확성, 응답 속도, 비용 효율성을 분석.

3. 프로파일링 (Profiling)

  • 체인의 실행 시간, 비용 및 성능 병목 현상을 식별.
  • API 호출 비용 추적 및 최적화.

4. 로깅 및 모니터링 (Logging & Monitoring)

  • 체인의 전체 수행 내역을 시각적으로 기록 및 모니터링.
  • 프로덕션 환경에서도 성능 데이터를 수집하여 분석 가능.

5. 협업 기능 (Collaboration)

  • 팀원과 체인 실행 결과 및 성능 보고서를 공유.
  • 실시간 피드백을 통한 지속적인 개선.

 

LangSmith의 장점

  • 개발 속도 향상: 자동화된 로깅 및 디버깅을 통해 빠른 문제 해결 가능.
  • 데이터 기반 최적화: 체인의 성능을 측정하고 데이터 기반으로 개선.
  • 비용 절감: 불필요한 API 호출을 줄이고 효율적으로 자원을 사용.
  • 사용자 경험 개선: 정확성과 일관성을 확보하여 최적의 LLM 응답 제공.

맺음말

LangChain이 무엇이고 어떻게 구성된 프레임워크인지 알아보았습니다. LangChain을 사용해야 하는 이유는 대형 언어 모델(LLM)을 활용한 애플리케이션을 보다 효율적이고 체계적으로 개발할 수 있도록 지원하기 때문입니다.

 

LangChain은 프롬프트 관리, 체인 구성, 메모리 관리, 데이터 소스 통합, 평가 및 디버깅 등의 기능을 제공하여 개발자들이 복잡한 AI 워크플로우를 간결하게 구현하고 유지보수할 수 있도록 돕습니다. 또한, 다양한 AI 모델(OpenAI, Hugging Face 등) 및 외부 시스템(API, 데이터베이스 등)과의 손쉬운 통합이 가능하며, LCEL(LangChain Expression Language)을 통해 직관적인 워크플로우 작성을 지원합니다.

 

나아가, LangServe를 이용하면 모델을 빠르게 API 형태로 배포할 수 있으며, LangSmith를 통해 체인의 성능을 모니터링 및 평가할 수 있어, 비용 효율적이고 최적화된 AI 애플리케이션 개발이 가능합니다. 이러한 기능을 통해 LangChain은 AI 기반 애플리케이션의 개발, 운영, 유지보수를 보다 쉽고 효과적으로 수행할 수 있도록 지원하는 강력한 프레임워크입니다.